{"version":3,"sources":["../node_modules/ionicons/node_modules/@stencil/core/internal/client lazy /^/.*$/ include: /.entry/.js$/ exclude: /.system/.entry/.js$/ groupOptions: {} namespace object","../node_modules/@stencil/core/internal/client lazy /^/.*$/ include: /.entry/.js$/ exclude: /.system/.entry/.js$/ groupOptions: {} namespace object","stores/Session.ts","stores/CustomerType.ts","stores/ScrollPosition.ts","stores/MainRightPage.ts","stores/UserSelectedDelivery.ts","helpers/enum.ts","stores/UserSelectedVehicleConfig.ts","stores/PaymentOptions.ts","stores/CheckoutCustomer.ts","stores/OrderCustomerDetails.ts","stores/OrderDetails.ts","stores/OrderScheduleDelivery.ts","stores/Vehicle.ts","stores/DefaultConfig.ts","stores/CountryStateList.ts","stores/LinkSource.ts","stores/OrderDetailPageDataVersion.ts","stores/OrderDocuments.ts","services/localStorage.ts","stores/ScrollBarDisplay.ts","stores/MainPageNumber.ts","stores/GlobalDropdown.ts","stores/Store.ts","businessHelpers/SelectedDeliveryhelper.ts","businessHelpers/OrderScheduleDeliveryHelper.ts","businessHelpers/VehicleHelper.ts","businessHelpers/DefaultConfigHelper.ts","helpers/Uri.ts","services/PaymentOptions.ts","services/CountryState.ts","helpers/useCountryState.ts","components/PaymentOptions.tsx","businessHelpers/DriveawayCostHelper.ts","businessHelpers/FinanceHelper.ts","services/Vehicle.ts","businessHelpers/LandingPageHelper.ts","pages/Global/landing/ImportantInfoDialog.tsx","pages/Global/landing/DesignYourDialog.tsx","pages/Main/ScrollToSection.tsx","helpers/useSatellite.ts","pages/Global/GlobalTheme.tsx","pages/GlobalPage.tsx","helpers/useCheckMobileScreen.ts","services/User.ts","scene/Layout/MainMenu.tsx","pages/Main/exterior/CarColorSelected.tsx","pages/Main/variant/VariantComparison.tsx","pages/Main/variant/ComparisonDialog.tsx","pages/Main/variant/ConfidenceDialog.tsx","pages/Main/variant/Variant.tsx","pages/Main/exterior/Exterior.tsx","pages/Main/interior/Interior.tsx","pages/Main/accessories/Accessories.tsx","services/Interest.ts","components/PrivacyPolicyLink.tsx","pages/Main/checkout/ShareDialog.tsx","components/IsNumberVerification.tsx","pages/Main/checkout/PrivacyCollectionDialog.tsx","pages/Main/checkout/SaveDialog.tsx","components/DriveawayPriceDialog.tsx","pages/Main/checkout/Checkout.tsx","pages/Main/checkout/CashFinanceDescDialog.tsx","pages/Main/checkout/CustomerPayment.tsx","services/Locations.ts","pages/Main/checkout/Delivery.tsx","businessHelpers/CheckoutHelper.ts","components/NoInventoryReminder.tsx","services/AdyenPayment.ts","services/Order.ts","pages/Main/checkout/TermsConditionsDialog.tsx","helpers/authConfig.ts","helpers/useAzureB2C.ts","pages/Main/checkout/AccountGuidelines.tsx","pages/Main/checkout/CheckoutWaitlist.tsx","components/ChargingDialog.tsx","pages/Main/charging/Charging.tsx","components/CarCarouselDialog.tsx","components/CarCarousel.tsx","pages/Main/MainLeftImageGrid.tsx","pages/Main/MobileImageCarousel.tsx","helpers/useSreenSize.ts","pages/MainPage.tsx","helpers/useClearUserDataStore.ts","scene/Users/UserPopUp.tsx","scene/Layout/GlobalDrawer.tsx","scene/Layout/GlobalSelectVehicle.tsx","scene/Layout/GlobalShop.tsx","helpers/useCheckTabletScreen.ts","scene/Layout/GlobalMenu.tsx","LayoutPages.tsx","scene/Layout/Footer.tsx","HomePage.tsx","Styles.ts","components/Spinner.tsx","scene/Info/NotFoundPage.tsx","scene/Users/SignInPage.tsx","pages/Support/ComingSoon.tsx","helpers/useAnalyticsEventTracker.ts","scene/Users/ForgotPasswordPage.tsx","scene/Users/ResetPasswordPage.tsx","scene/Users/EmailVerficationPage.tsx","scene/Playground/GoogleAutoCompletePage.tsx","scene/Users/AuthPage.tsx","components/ScrollToTop.tsx","pages/InventoryPage.tsx","businessHelpers/AvailableInventoryHelper.ts","pages/Global/orders/purchasingProgress/ProvideDetails.tsx","businessHelpers/OrderCustomerDetailsHelper.ts","businessHelpers/DriverLicenseHelper.ts","businessHelpers/AddressHelper.ts","businessHelpers/DocumentHelper.ts","pages/Global/orders/purchasingProgress/ArrangePayment.tsx","services/GoogleApi.ts","pages/Global/orders/purchasingProgress/SelectLocation.tsx","pages/Global/orders/purchasingProgress/SelectDateTime.tsx","pages/Global/orders/purchasingProgress/PickupLocation.tsx","pages/Global/orders/purchasingProgress/ScheduleDelivery.tsx","services/Document.ts","pages/Global/orders/purchasingProgress/ReviewContract.tsx","pages/Global/orders/purchasingProgress/FinanceApplication.tsx","pages/Global/orders/purchasingProgress/RetryPayment.tsx","pages/Global/orders/purchasingProgress/ViewAppointment.tsx","pages/Global/orders/purchasingProgress/ProgressSteps.tsx","pages/OrderProgress/OrderPlacedSuccess.tsx","pages/OrderProgress/OrderWaitlisted.tsx","pages/Global/inventory/NewVehicleInventory.tsx","services/TestDrive.ts","pages/Global/testDrive/TestDrive.tsx","businessHelpers/TestDriveHelper.ts","pages/Global/orders/MyOrders.tsx","pages/Global/profiles/Profiles.tsx","businessHelpers/ProfileHelper.ts","pages/Global/privacy/Privacy.tsx","pages/Global/orders/Support.tsx","pages/Global/orders/Documents.tsx","pages/Global/orders/OrderDetails.tsx","scene/Info/MaintenancePage.tsx","App.tsx","helpers/claimUtils.ts","index.tsx"],"names":["webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","module","exports","id","GOT_SESSION","CLEAR_SESSION","GOT_COUNTRY_STATE","SET_CUSTOMER_TYPE","setCustomerTypeAction","customerType","type","SET_SCROLL_POSITION","setScrollPosition","positionStatus","initScrollPositionState","SET_MAIN_SECTION","checkMainSection","mainSection","initMainSectionState","SET_MAIN_RIGHT_PAGE","hideGlobalPage","isHideGlobal","initMainRightPageState","UPDATE_DELIVERY","updateDeliveryAction","delivery","UPDATE_COUNTRYSTATE","UPDATE_POSTCODE","UPDATE_SELECTEDPICKUPLOCATION","UPDATE_SELECTEDHOMEDELIVERY","UPDATE_DELIVERYOPTIONS","CLEAR_DELIVERYOPTIONS","enumProcessingStatus","constModel","constStateList","name","enumDeliveryOptions","enumDeliveryOptionsDisplayName","enumPaymentOptions","enumCountryCode","enumCountryName","enumClientTypes","Code","Text","enumVehicleOptionType","enumVehicleOptionTypeName","enumChargeType","enumPage","enumInterestType","enumRDErrorCode","enumRedirectPage","enumOrderStatus","enumScrollSection","enumPipelineButtonID","enumDocumentType","enumInventorySort","enumTestDriveTransaction","enumDeliveryPriceError","ErrorCode","ErrorMessage","enumErrorMessage","enumLinkSource","enumCallBackRequest","enumAuBank","BankName","BankBranchName","AccountName","BSBNumber","AccountNumber","Phone","enumNZBank","SET_DEFAULTVEHICLE","UPDATE_VARIANT","updateVariantAction","variantID","variant","variantBasePrice","UPDATE_EXTERIOR","updateExteriorAction","exteriorID","exterior","exteriorPrice","UPDATE_INTERIOR","updateInteriorAction","interiorID","interior","interiorPrice","hasStock","UPDATE_ALLOPTIONS","updateAllOptionsAction","options","UPDATE_OPTION","updateOptionAction","option","CLEAR_SELECTEDCONFIG","initSelectedVehicle","VariantID","VariantName","VariantBasePrice","ExteriorID","Exterior","ExteriorPrice","InteriorID","Interior","InteriorPrice","Options","Subtotal","HasStock","calculateSubtotal","state","subtotal","map","item","OptionPrice","UPDATE_SELECTEDPAYMENTOPTION","updateSelectedPaymentOptionAction","selectedPaymentOption","UPDATE_DRIVEAWAYCOST","updateDriveawayCostAction","driveAwayCost","driveAwayCostRequest","UPDATE_FINANCE","CLEAR_PAYMENTOPTIONS","clearPaymentOptionsAction","initPaymentOptions","PaymentOption","rdEnum","DriveAwayCost","DriveAwayCostRequest","Finance","SET_CHECKOUTCUSTOMERDETAILS","CLEAR_CHECKOUTCUSTOMERDETAILS","clearCheckoutCustomerDetailsAction","SET_ORDERCUSTOMERDETAILS","CLEAR_ORDERCUSTOMERDETAILS","SET_ORDERDETAILS","CLEAR_ORDERDETAILS","SET_ORDERSCHEDULEDELIVERY","setOrderScheduleDeliveryAction","scheduleDelivery","SET_SCHEDULEDATE","SET_SCHEDULETIME","CLEAR_ORDERSCHEDULEDELIVERY","variantList","selectedVariant","UPDATE_SELECTEDVARIANT","updateSelectedVariantAction","exteriorList","selectedExterior","UPDATE_SELECTEDEXTERIOR","interiorList","selectedInterior","UPDATE_SELECTEDINTERIOR","UPDATE_OPTIONS","updateOptionsAction","accessories","chargingList","CLEAR_VEHICLE","SET_DEFAULTCONFIG","setDefaultConfigAction","defaultConfig","SET_DEFAULTCONFIGLOADED","SET_COUNTRYSTATES","SET_LINKSOURCE","setLinkSourceAction","source","SET_ORDERDETAILPAGEDATAVERSION","setOrderDetailPageDataVersionAction","Clear_ORDERDETAILPAGEDATAVERSION","SET_ORDERDOCUMENTS","CLEAR_ORDERDOCUMENTS","getSessionStorageKey","key","loadState","serializedState","localStorage","getItem","JSON","parse","err","SET_SCROLLBAR_DISPLAY","checkIsShowScrollBar","isShowScrollBar","initIsShowScrollBarState","SET_MAIN_PAGE_NUMBER","setMainPageNumber","mainPageNumber","initMMainPageNumberState","SET_GLOBAL_DROPDOWN","setGlobalDropdown","vehicles","shop","initGlobalDropdownState","appReducer","combineReducers","session","action","countryInfo","scrollPosition","mainRightPage","globalDropdown","selectedDelivery","Country","State","SelectedPickupLocation","SelectedDeliveryOption","SelectedDeliveryFullAddress","SelectedDeliveryPostcode","SelectedDeliveryState","SelectedDeliverySuburb","PrimaryAddress","PrimaryPostcode","PrimarySuburb","PrimaryState","InvalidPrimaryAddress","DeliveryAvailable","DeliveryPrice","DeliveryPriceErrorCode","DeliveryDistance","PickupLocationName","countryCode","stateCode","PostCode","Suburb","postcode","suburb","location","SelectedHomeDeliveryFullAddress","homeDeliveryAddress","SelectedHomeDeliveryPostcode","homeAddressPostcode","SelectedHomeDeliverySuburb","homeAddressSuburb","SelectedHomeDeliveryState","homeAddressState","deliveryOption","selectedVehicle","defaultVehicle","newState","index","findIndex","value","YanaOptionID","OptionType","ChargeType","filter","paymentOptions","finance","checkoutCustomer","customerDetails","orderCustomerDetails","orderDetails","orderScheduleDelivery","YanaOrderID","YanaOrderNo","YanaCustomerID","YanaCustomerNo","DeliveryLocationState","DeliveryLocationSuburb","DeliveryLocationPostcode","DeliveryLocationAddress","DeliveryOption","DeliveryDate","undefined","DeliveryFormatDate","DeliveryTime","Available","date","formatDate","time","orderDocuments","docs","vehicle","VariantList","SelectedVariant","ExteriorList","SelectedExterior","InteriorList","SelectedInterior","Accessories","Charging","defautConfig","ExteriorName","InteriorName","Loaded","LinkKey","ExpiryDateText","loaded","countryStateList","countryStates","linkSource","orderDetailDataVersion","LOGOUT_CLEAR","rootReducer","updatedState","getBackendPath","process","getFrontendOrigin","getCMSAssets","getGoogleMapAPIKey","getAdyenEnv","country","env","getAdyenKey","getShareLink","webUniqueKey","currencyFormat","currencyFormatter","Intl","NumberFormat","style","currency","isNil","format","currencyFormatCharging","checked","currencyFormatWithIncluded","currencyFormatWithBlank","currencyFormatWithZeroBlank","validateEmail","email","test","noActivityRedirectHomePage","resposne","errorCode","url","window","href","getDriveAwayCost","request","abortSignal","a","requestOptions","method","headers","body","stringify","credentials","signal","fetch","response","json","rdHelper","getFinanceTermOptions","getFinanceBallonOptions","termOptionID","TermOptionID","getFrequency","calculateFinance","getCountryAndState","useCountryState","dispatch","useDispatch","countryAndStates","useSelector","doGetCountryAndState","dataInStore","status","countryListState","data","length","itemData","states","stateData","push","countryName","getCountry","returnCountry","allCountryAndStates","getStates","stateList","findCountry","find","m","PaymentOptions","forwardRef","props","ref","countryState","isFromLandingPage","subTotal","estDeliveryDate","variantName","variantPrice","exteriorName","interiorName","selectedLocationFromStore","vehFromStore","appState","customerTypeFromStore","paymentOptionsFromStore","useState","isOpen","setIsOpen","paymentOption","setPaymentOption","selectedState","setSelectedState","postCode","setPostcode","setSuburb","registrationType","setRegistrationType","VariantPrice","SubTotal","RegistrationType","Distance","CallSource","IfCalculateFinance","driveawayCostRequest","setDriveawayCostRequest","LuxuryCarTax","LocalStampDuty","LocalRegistrationCost","LocalCTP","LocalPlateFee","HomeDelivery","DriveawayPrice","OnRoadFee","GST","RoadUserChargers","TyreStewardshipFee","setDriveAwayCost","setStates","abortControllerInitialValue","AbortController","setCostAbortController","SelectedTermOptions","SelectedBalloonPaymentOptions","SelectedPaymentFrequency","Deposit","DriveawayCost","InterestRate","ComparisonRate","FinanceAmount","BallonAmount","LoanPayment","LoanPaymentText","CreditAssistanceFee","MonthlyAccountFee","FreqencyName","NoOfMonth","InterestRateTo","TotalLoanPayment","PPSR","financePageState","setFinancePageState","Source","financeRequest","setFinanceRequest","termOptions","setTermOptions","selectedTermOptions","setSelectedTermOptions","balloonPaymentOptions","setBalloonPaymentOptions","selectedBalloonPaymentOptions","setSelectedBalloonPaymentOptions","frequencyOptions","setFrequencyOptions","selectedFrequencyOption","setSelectedFrequencyOptions","initAbortCalculateFinanceValue","setFinanceAbortController","financeActiveEventKey","setFinanceActiveKey","useImperativeHandle","openDialog","document","overflowY","paddingRight","useEffect","buildDriveawayCostRequest","buildFinanceRequest","doGetDriveAwayCost","doGetStates","distance","pickupOption","requestData","abortController","paymentOptionService","driveAwayCostDataFromBackend","driveawayCostData","driveAwayCostData","luxuryCarTax","localStampDuty","localRegistrationCost","localCTP","localPlateFee","homeDelivery","onRoadFeeSubtotal","driveawayPrice","exteriorColourPrice","interiorColourPrice","gst","roadUserChargers","tyreStewardshipFee","getOptions","console","log","optionData","configs","optionType","OptionName","optionName","optionPrice","OptionPicture","OptionPictureMobile","OptionDesc","optionDesc","chargeType","Disable","TermsDescription","doGetTermOptions","responseData","defaultTerm","tempTermOptions","termItem","ID","filterID","Name","filterName","IsDefault","isDefault","doGetBallonOptions","ballonOptionResponse","defaultFinalBalloonPayments","tempfinalBalloonPayments","finalBalloonPaymentsItem","doGetFrequencyOptions","frequencyResponse","defaultFrequencyPayments","tempFrequencyPayments","frequencyItem","doCalculateFinance","updatedFinance","interestRateText","comparisonRateText","totalFinancedAmountText","balloonpaymentText","monthlyLoanPayment","monthlyLoanPaymentText","creditAssistanceFeeText","monthlyAccountFeeText","freqencyName","noOfMonth","interestRateTo","totalLoanPayment","ppsr","CustomFinanceToggle","children","eventKey","isActive","decoratedOnClick","useAccordionButton","className","onClick","showVehicleTemplate","optionsTemplate","paddingBottom","showTaxTemplate","optionItemsTemplate","selectedOptions","optionItem","template","setTimeout","stateDropdown","getElementById","setAttribute","classList","add","regoTypeDropdown","termDropdown","balloonDropdown","balloonItemTemplate","data-dtm","position","visible","draggable","resizable","onHide","Button","Row","Col","lg","display","inputId","onChange","onStateChange","optionLabel","placeholder","disabled","itemTemplate","types","getRegistrationTypes","margin","parseInt","target","keyfilter","minWidth","Fragment","fontSize","width","Accordion","defaultActiveKey","activeKey","onSelect","Card","Collapse","Body","Header","activeEventKey","alt","src","textDecoration","cursor","open","getAvailableInventoryFilters","needDefaultValue","variantRequest","NeedDefaultValue","Variant","getAvailableInventory","availableInventory","getLandingPage","landing","getVariants","getExteriors","getInteriors","getInitLandingPage","Postcode","CustomerType","Model","YanaVariantID","YanaVariantName","LoadPaymentText","FrequentlyText","ImportantInfoDialog","header","DesignYourDialog","setIsScrolled","handleScroll","event","scrollTop","querySelectorAll","forEach","dialogContent","removeEventListener","ScrollToSection","createContext","ScrollProvider","variantRef","useRef","exteriorRef","interiorRef","financeRef","chargingRef","paymentRef","deliveryComponentRef","deliveryRef","checkoutRef","watchlistRef","Provider","scrollToSection","section","current","scrollIntoView","behavior","useScroll","context","useContext","useSatellite","trackEvent","_satellite","track","warn","getVariable","getVar","GlobalTheme","isGlobalDialogOpen","satellite","useNavigate","paymentOpionsRef","dialogVisible","setDialogVisible","loaderVisible","setLoaderVisible","useLocation","preloader","closeLoader","isFromOtherPage","setIsHovered","selectedDeliveryFromStore","countryStateFromStore","menuGlobalBtn","sections","closePreLoader","timeout","clearTimeout","countries","setCountries","selectedCountry","setSelectedCountry","doGetCountry","landingPageHelper","landingPage","setLandingPage","handleHover","prevIsHovered","doGetLandingPage","vehicleService","landingData","driveawayCost","available","yanaVariantId","exteriorId","interiorId","loanPaymentText","frequentlyText","isAndroid","navigator","userAgent","isIOS","globalContentBox","querySelector","videoKey","videoRef","handleVisibilityChange","hidden","ended","pause","currentTime","duration","addEventListener","onCountryChange","onMouseEnter","onMouseLeave","selectedDeliveryStore","paymentOptionsStore","customerTypeStore","defaultConfigStore","linkSourceStore","onSubmit","preload","muted","autoPlay","playsInline","GlobalPage","useCheckMobileScreen","innerWidth","setWidth","handleWindowSizeChange","setSession","clearSession","getProfile","yanaCustomerID","yanaCustomerNo","nzYanaCustomerID","nzYanaCustomerNo","saveProfile","userProfile","privacy","isUpdateProfile","token","validateResetPasswordToken","isShowMaintenance","MainMenu","activeButton","setActiveButton","element","sm","includes","CarColorSelected","color","handleColor","colorList","handleChangeColor","carColor","exteriorListFromStore","classNames","ExteriorColorName","ExteriorFilterImage","VariantComparison","variantListFromStore","leftExteriorList","setLeftExteriorList","rightExteriorList","setRightExteriorList","ExteriorColorDescTitle","ExteriorColorDesc","ExteriorPicture","ExteriorPictureMobile","ExteriorFilterMobile","ExteriorOrderingNo","selectedLeftExteriorList","setSelectedLeftExteriorList","selectedRightExteriorList","setSelectedRightExteriorList","leftVariantName","setLeftVariantName","rightVariantName","setRightVariantName","leftVariantDesc","setLeftVariantDesc","rightVariantDesc","setRightVariantDesc","variantLeft","variantRight","colorLeft","colorRight","leftImageUrlSet","rightImageUrlSet","totalPriceLeft","totalPriceRight","payByMonthLeft","payByMonthRight","viewPosition","initLeftColor","initLeftImageUrlSet","initLeftVariant","initRightColor","initRightImageUrlSet","initRightVariant","activeLeftImage","setActiveLeftImage","activeRightImage","setActiveRightImage","isMobile","doGetExterior","VariantDescription","isLeft","exteriorTempItem","exteriorColorName","exteriorColorDescTitle","exteriorColorDesc","exteriorPicture","exteriorPictureMobile","exteriorFilter","exteriorFilterMobile","setIsWhichSide","images","getElementsByClassName","compareImages","img","slider","w","h","clicked","updateWidth","offsetWidth","offsetHeight","createElement","parentElement","insertBefore","top","left","slideReady","preventDefault","slideMove","slideFinish","pos","getCursorPos","slide","x","touch","changedTouches","getBoundingClientRect","pageX","pageXOffset","i","initComparisons","ComparisonDialog","pageName","openLearnMoreDialog","setOpenLearnMoreDialog","onVisible","accordionButton","alwaysOpen","Item","ConfidenceDialog","linkSourceFromStore","isMoible","handleDialogHide","crossIcon","icons","backgroundImage","backgroundSize","onShow","navigate","vehicleFromStore","selectedCustomerType","defaultConfigFromStore","getExteriorImages","setSelectedVariant","variants","setVariants","setIsTypeVisible","doGetVariants","isDefaultVariant","selectedConfigStore","vehicleStore","updatedVariants","toLowerCase","timeoutId","resData","Range","range","Power","power","KmHour","kmHour","VariantPicture","variantPicture","VariantPictureMobile","variantPictureMobile","variantDescription","variantItemTemplate","isFromInventoryPage","directionButtons","direction","aria-hidden","indicators","onGoToInventory","Carousel","nextIcon","prevIcon","interval","setSelectedExterior","exteriors","setExteriors","isPaidVisible","setIsPaidVisible","isDefaultExterior","updatedExteriors","exteriorTemplate","opacity","transition","interiorListFromStore","setSelectedInterior","interiors","setInteriors","doGetInterior","doGetOptions","isDefaultInterior","InteriorColorName","updatedInteriors","interiorRequest","InteriorColorDescTitle","InteriorColorDesc","InteriorPicture","InteriorPictureMobile","InteriorFilterImage","InteriorFilterMobile","InteriorOrderingNo","interiorColorName","interiorColorDescTitle","interiorColorDesc","interiorColorPrice","interiorPicture","interiorPictureMobile","interiorFilter","interiorFilterMobile","yanaOptionID","optionPicture","optionPictureMobile","termsDescription","charging","interiorTemplate","selectedOptionsFromStore","isSelectedOption","findSelectedOption","selectedItems","accessoriesCheckbox","getElementsByName","padding","border","htmlFor","handleSelect","saveInterest","interest","ifCallYanaAPI","getInterest","linkKey","getWaitlist","webkey","PrivacyPolicyLink","ShareDialog","shareDialog","setShareDialog","copyTooltip","emailTooltip","tooltip","setTooltip","isCopyLink","setIsCopyLink","isEmailSend","setIsEmailSend","invalidEmail","pageState","setPageState","shareFailedMessage","setShareFailedMessage","sharingStatus","setSharingStatus","setWebUniqueKey","selectVehFromStore","selectedPaymentOptions","customerTypeForStore","openShareDialog","newKey","uuidv4","doShareInterest","handleCopy","rdUri","clipboard","writeText","handleSendEmail","emailValidator","getDeliveryLocationState","LocationState","getDeliveryLocationPostcode","LocationPostcode","getDeliveryLocationSuburb","LocationSuburb","getDeliveryLocationFullAddress","LocationAddress","isShareOnly","newWebUniqueKey","interestData","Email","FirstName","LastName","Mobile","ABN","BusinessName","DeliveryAddress","EstDeliveryDate","PrivacyStatement","Marketing","InterestType","Comments","WebUniqueKey","VehicleThumbnail","interestService","showEmailSuccess","message","Tooltip","appendTo","aria-describedby","height","strokeWidth","animationDuration","dangerouslySetInnerHTML","__html","IsNumberVerification","evt","charCode","which","keyCode","PrivacyCollectionDialog","isShowDialog","setIsShowDialog","onDialogOpen","SaveDialog","saveDialog","setSaveDialog","initPageState","firstname","lastname","confirmEmail","mobile","comments","checkMarketingComms","checkPrivacy","invalidFirstname","invalidLastname","invalidConfirmEmail","invalidMobile","emailMismatch","invalidCheckMarketingComms","invalidCheckPrivacy","saveFailedMessage","setSaveFailedMessage","savingStatus","setSavingStatus","isOverflown","setIsOverflown","textAreaRef","checkOverflow","textarea","maxVisibleHeight","getComputedStyle","lineHeight","scrollHeight","selectedVehicleFromStore","openSaveDialog","onSaveHide","validation","invalid","newPageState","handleSubmit","agreeCheckbox","marketingCheckbox","borderRadius","marginTop","onKeyPress","isNumberKey","slice","rows","backgroundColor","DriveawayPriceDialog","handleDialogOpen","driveawayCostFromStore","Checkout","checkoutFormPage","addsOnItem","getDeliveryAddress","price","getDeliveryPrice","CashFinanceDescDialog","paymentType","toUpperCase","marginBottom","CustomerPayment","handlePayment","handleCustomerType","handlePaymentType","paymentOptionStore","childRef","getLocations","getAddress","keywords","getDistance","Delivery","handleDelivery","addressList","setAddressList","primaryAddress","setPrimaryAddressAddress","PickupLocationAvailable","DeliveryPriceError","primaryAddressAvailabeDetails","setPrimaryAddressAvailabeDetails","differentDeliveryAddress","setDifferentDeliveryAddress","differentDeliveryAddressAvailabeDetails","setDifferentDeliveryAddressAvailabeDetails","pickupLocations","setPickupLocations","DifferentDeliveryAddress","PickupAddressConfirm","InvalidDeliveryType","InvalidPrimaryPostcode","InvalidPrimaryState","InvalidPickupLocation","InvalidDeliveryAddress","InvalidDeliveryPostcode","InvalidDeliveryState","pageInvalidState","setPageInvalidState","pickupLocationDataLoadingStatus","setPickupLocationDataLoadingStatus","inputRef","regionalInputRef","locationCheckboxRef","differentAddressCheckboxRef","isFocused","setIsFocused","isRegoFocused","setIsRegoFocused","isNullAddress","address","fullAddress","isNullPostcode","getValidate","invalidDelivery","invalidDeliveryOption","invalidPrimaryAddress","invalidPrimaryPostcode","invalidPrimaryState","invalidPickupLocation","invalidDeliveryAddress","invalidDeliveryPostcode","invalidDifferentState","deliveryError","innerHTML","validationDelivery","dispatchRegoAddress","handleDeliveryType","updatedDelivery","selectedPickuplocation","IsSelected","LocationName","doGetAddress","query","locationService","result","onDeliveryAddressChange","clearPrimaryState","doGetLocations","doGetDeliveryPrice","VehicleSubTotal","locatiions","pickupLocationName","pickupLocationAddress","pickupLocationSuburb","pickupLocationPostcode","pickupLocationState","LocationAvailable","pickupLocationAvailable","deliveryPrice","deliveryAvailable","DeliveryErrorCode","deliveryPriceErrorCode","primaryAddressAvailabe","homeDeliveryPostcode","homeDeliverySuburb","homeDeliveryState","updateSelectedDelivery","selectedLocation","DeliveryState","DeliveryPostcode","DeliverySuburb","PickupAddress","PickupState","PickupPostcode","PickupSuburb","priceResponse","priceResponseData","deliveryAddressAvailabe","eligibleForPickupLocation","autoComplete","onFocus","onBlur","field","inputClassName","suggestions","completeMethod","onAddressSelect","onAddressChange","hasDeliveryEligible","hasInStoreEligible","eligibleNoteTemplate","invalidDeliveryState","onDeliveryAddressSelect","error","showDeliveryAddressError","NoInventoryReminder","handleToInventoryPage","getNewPaymentIDs","orderID","savePaymentLog","order","adyenSession","placeReservation","hasLogin","placeOrder","getOrderByYanaCustomerID","customerID","customerNo","nzCustomerID","nzCustomerNo","getOrderDetailsByYanaIDs","yanaOrderID","yanaOrderNo","updateOrderDetails","confirmContract","contract","getScheduleAvailabeTime","saveScheduleAvailabeTime","saveRetryPayment","getLMCT","callBackRequest","getFinanceStatus","getReservationStatus","setReservationCountdown","extendReservationCountdown","TermsConditionsDialog","b2cPolicies","names","signUpSignIn","forgotPassword","authorities","authority","authorityDomain","msalConfig","auth","clientId","knownAuthorities","redirectUri","postLogoutRedirectUri","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","system","loggerOptions","loggerCallback","level","containsPii","LogLevel","Info","info","Verbose","debug","Warning","protectedResources","apiTodoList","endpoint","scopes","read","write","loginRequest","useAzureB2C","instance","useMsal","isAuthenticated","useIsAuthenticated","signIn","loginRedirect","catch","signOut","logoutRedirect","isAuth","inProgress","InteractionStatus","None","getAllAccounts","isAuthAndLogin","AccountGuidelines","toPrivacy","CheckoutWaitlist","azureB2C","checkOutCustomerFromStore","driveawayFromStore","toConfiguration","paymentPageStatus","clientType","setClientType","joinConsentRef1","joinConsentRef2","businessname","abn","address2","agreement","comment","invalidBusinessname","invalidABN","invalidABNLength","invalidAddress","invalidSuburb","emailDuplicated","invalidAgreement","invalidState","invalidPostcode","checkoutHelper","reserverationSubmittingStatus","setReservationSubmittingStatus","confirmOrderSubmittingStatus","setConfirmOrderSubmittingStatus","submittingToYana","setSubmittingToYana","VehicleImages","CustomerCountry","BillingAddress","BillingSuburb","BillingPostcode","BillingState","RegoAddress","RegoSuburb","RegoPostcode","RegoState","NameOnCreditCard","RDAcountID","RDPaymentID","OrderID","YanaOrderReservationID","YanaOrderReservationNo","FromLinkSource","PaymentHistory","DownPayment","PaymentDueDate","FinalPaymentAmount","Total","Balance","PaymentAmount","setOrder","placeReservationMessage","setPlaceReservationMessage","placeOrderMessage","setPlaceOrderMessage","isShowPaymentPanel","setIsShowPaymentPanel","paymentContainer","customCardInstance","SessionID","SessionData","SessionResult","ResultCode","setAdyenSession","isShowAdyenRetryButton","setIsShowAdyenRetryButton","adyenFailedMessage","setAdyenFailedMessage","reservationExpiryMin","reservationCountDownSeconds","setReservationCountDownSeconds","reservationCountdownStage","setReservationCountdownStage","reservationExtendCount","setReservationExtendCount","showCountdownDialog","setShowCountdownDialog","lmctText","setLMCTText","showOutOfStock","setShowOutOfStock","confirm","invalidConfirm","confirmed","setConfirmed","paymentErrorMessage","translations","doGetLMCT","orderService","partnerLMCT","doGetAdyenConfig","Uri","locale","environment","clientKey","sessionData","onPaymentCompleted","component","localBilling","paymentID","strPaymentOrder","orderComment","postAdyenSession","sessionResult","resultCode","billingData","paymentOrder","postOrder","Address1","NameOnCard","doPlaceOrder","doSavePaymentLog","doGetPaymentIDs","beforeSubmit","actions","tempData","billingAddress","street","Address2","houseNumberOrName","postalCode","city","stateOrProvince","paymentMethod","holderName","setItem","onError","paymentMethodsConfiguration","card","hasHolderName","holderNameRequired","billingAddressRequired","brands","showPayButton","paymentService","adyenSessionID","adyenSessionData","rdPaymentTransactionID","yanaIds","yanaOrderIDs","orderVehicle","ignore","doInitPayment","isRefresh","adyenConfig","AdyenCheckout","checkout","create","onReady","mount","streetRef","cityRef","postcodeRef","houseNumberOrNameRef","showConfirmPopup","setShowConfirmPopup","confirmPopupMessage","setConfirmPopupMessage","clearMessage","validateAccount","isInvalid","invalidBusinessName","invalidFirstName","invalidLastName","emailMisMatch","onClickPaymentButton","withoutLogin","orderData","getActiveAccount","responseOrderData","rdAccountID","yanaReservationID","yanaReservationNumber","paymentAmount","checkoutCustomerStore","reservationCountDown","reservationCountDownStage","reservationExtensionCount","onClickWaitlist","chargingCheckbox","doSetReservationCountdown","setInterval","newCountdownSecond","clearInterval","maxLength","onCopy","onPaste","onCut","background","sec","minutes","Math","floor","seconds","countDownTimeTemplate","isValid","update","remount","submit","showHeader","ChargingDialog","removeFirstItemList","isAddOrRemove","some","toLocaleLowerCase","md","chargingCurrencyFormat","chargeList","setChargeList","chargingListFromStore","selectedPublicCharge","selectedHomeWithoutPriceCharge","selectedHomeHasPriceCharge","tempList","CarCarouselDialog","slideNumber","carouselPage","setCarouselPage","getInteriorImages","handleOpen","pageNumber","handleClose","defaultActiveIndex","activeIndex","selectedIndex","CarCarousel","variantAWD","exteriorColor","interiorColor","carouselInterval","mobileImages","isUseImages","setVehicle","carouselDialogRef","MainLeftImageGrid","imgExpand","setImgExpand","topPanel","bottomPanel","topExpand","bottomExpand","expanded","setExpanded","addsOn","deliveryType","customize","setCustomize","activeImage","setActiveImage","sectionName","fullView","frontView","backView","sideView","initialImage","setInitialImage","interirorFullView","interirorFrontView","interirorBackView","initialInteriorImage","setInitialInteriorImage","carImage","setCarImage","carInteriorImage","setCarInteriorImage","handleImgExpand","selectedClassName","remove","tileIndex","split","pop","documentElement","setProperty","scrollTo","MobileImageCarousel","sectionStatus","isShowExteriorPopup","currentExteriorIndex","isShowInteriorPopup","currentInteriorIndex","isShowSummaryPopup","currentSummaryIndex","mobileCarouselPopup","setMobileCarouselPopup","handleMobileCarouselPopup","handleCloseMobileCarousel","accessKey","useScreenSize","screenSize","setScreenSize","smallScreen","matchMedia","mediumScreen","largeScreen","handleResize","matches","MainPage","activeAccount","isShowBottomPanel","driveawayRequestData","setDriveawayRequestData","handleCustomer","toVariantWithLinkKey","financeData","updatedFinanceStore","FinalBalloonPayment","balloonAmount","comparisonRate","loanPayment","Term","term","FrequencyName","frequencyName","innerHeight","windowSize","setWindowSize","setWindowDigitalData","setTrackEvent","level3","idTokenClaims","digitalData","pageInfo","siteSectionsLevel1","siteSectionsLevel2","siteSectionsLevel3","siteSectionsLevel4","siteSectionsLevel5","universalID","seoStrategyPageName","pageType","languageSelected","siteName","brand","region","renderedExperience","viewport","orientation","internalCampaignInfo","articleInfo","visitorProfile","userProfileStateAuthentication","userLoginStart","configProducts","configExtColor","configIntColorUpholstery","configModelPackageVersion","engine","transmission","vehicleInfo","vehicleType","modelName","modelYear","bodyStyle","trimLevel","condition","vin","toolsInfo","wheels","dealerName","dealerId","individualProductPrice","configuratorStartPrice","configuratorEndPrice","data-section-id","paddingTop","scrollMarginTop","currentUrl","replace","history","replaceState","useClearUserDataStore","storeData","clearData","newData","UserPopUp","isClickable","clearUserData","userVisible","setUserVisible","loginSession","imageLoaded","imageList","onLogOut","userService","onUserOpen","onUserHide","customHeader","data-dtm2","closable","dismissableMask","GlobalDrawer","drawerVisible","setDrawerVisible","onDrawerHide","pathname","reload","toConfigure","GlobalSelectVehicle","onChangeActiveBtn","selectVehicleCategory","setselectVehicleCategory","isVehicleSelectionDisplay","setIsVehicleSelectionDisplay","toConfigurate","category","xs","GlobalShop","filterShow","toTestDrive","useCheckTabletScreen","GlobalMenu","activeBtn","setIsHasOrder","setIsClickable","shopDivHeight","setShopDivHeight","isTablet","menuRef","vehicleRef","shopRef","sessionFromStore","auCustomerID","auCustomerNo","NZYanaCustomerID","NZYanaCustomerNo","doGetMyOrders","activeBtnValue","handleClickOutside","contains","MainLayoutPage","title","sceneId","langScreenID","metaKeywords","canonicalHref","searchParams","URLSearchParams","search","isScrollbarVisible","containerRef","doGetIsShowMaintenance","maintenanceCodeFromUrl","rdUserService","isShow","maintenanceTestingCode","maintenanceCode","chatele","maintenanceTestingCodeFromUrl","get","codeInStorage","Footer","toRegister","HomePage","setIsGlobalDialogOpen","expiryedLink","setExpiryedLink","redirectPage","isCheckoutPaymentPage","useParams","animatedElements","block","inline","setScrollGlobalOpacity","observer","IntersectionObserver","entries","entry","isIntersecting","threshold","el","observe","scrollGlobalOpacity","doGetInterest","interestBackendData","isExpired","getInterestOptions","expiryDateText","typeOfLink","observers","sectionElement","thresholdValue","sid","getAttribute","sectionId","root","rootMargin","disconnect","scrollTimeout","setIsShowBottomPanel","container","globalOpacityRatio","parseFloat","toFixed","ratio","screen","globalContainer","startsWith","roundedRatio","round","updateDeviceRatioClass","zIndex","gray2","gray5","gray6","primary2","fontFamily","baseFieldCSS","styled","button","fieldset","div","label","css","input","Spinner","spinnerWidth","NotFoundPage","React","SignInPage","ComingSoon","useAnalyticsEventTracker","ReactGA","ForgotPasswordPage","setErrorMessage","loading","isSent","password","invalidPassword","handleGoBack","handleSent","ResetPasswordPage","invalidToken","setInvalidToken","setEmail","pageProcess","setPageProcess","secondsRemaining","setSecondsRemaining","confirmPassword","invalidConfirmPassword","passwordNoMatched","number","upperLowerCase","characters","passwordRules","setPasswordRules","doValidateToken","intervalId","prevSeconds","isShowPassword","isShowResetPassword","passwordVisible","setPasswordVisible","passwordCheck","passwordEnter","trim","handleUpdate","invalidNewPass","invalidConfirmPass","handlePasswordInsert","EmailVerficationPage","verifyCode","invalidCode","doValidateEmail","GoogleAutoCompletePage","setAddress","returnAddressList","AuthPage","checkoutCustomerFromStore","doSetupSession","user","orderResponse","btoa","ScrollToTop","InventoryPage","defaultSelectedVariant","defaultSelectedExterior","defaultSelectedInterior","isShopFront","outOfStockBoxLocation","drawerShow","seDdrawerShow","selectedVariants","setSelectedVariants","selectedExteriors","setSelectedExteriors","selectedInteriors","setSelectedInteriors","availableInventoryList","setAvailableInventoryList","Variants","Exteriors","Interiors","Sort","availableRequest","setAvailabeRequest","sort","setSort","filterQty","setFilterQty","stock","setStock","searchResultLoadingStatus","setSearchResultLoadingStatus","isButtonClicked","setIsButtonClicked","inventoryAbortController","setInventoryAbortController","handleVariant","updateSelectedVariants","SelectVariantID","newItem","SelectVariantName","getExteriorList","getInteriorList","handleExteriorColor","updateSelectedExteriors","SelectExteriorName","SelectExteriorID","handleInteriorColor","updateSelectedInteriors","SelectInteriorName","SelectInteriorID","handleRestFilter","score","buildAvailableRequest","doGetAvailableInventory","abort","doGetAvailableInventoryFilter","variantRequestData","vehicleSerivce","stockList","stockFromBackend","stocks","exteriorFilterImage","interiorFilterImage","exteriorDisplayOrderingNo","interiorDisplayOrderingNo","variantsList","variantsFromBackend","defaultVariantID","defaultVariantName","isDefaultSelected","variantHasSock","defaultExteriors","defaultInteriors","stockItem","exteriorHasStock","self","v","hasVariant","hasExteriant","interiorHasStock","lst","availableList","availableInventorys","BasePrice","basePrice","onGoToOrder","filterDialogVisible","setFilterDialogVisible","handleFilterDialogClose","data-pr-tooltip","transform","marginLeft","onSortChange","filterPanel","selectedItem","maxWidth","size","ProvideDetails","buttonText","uploadFile1","uploadFile2","detailsRef","businessRef","billingRef","registrationRef","driveLicenseFrontRef","driveLicenseBackRef","orderCustomerDetailsFromStore","orderDocumentsFromStore","birthday","driverLicense","driverLicenseNo","driverLicenseExpiryDate","middlename","phone","secondaryPhone","businessName","regoAddress","deliveryAddress","actionType","invalidBirthday","invalidPhone","invalidSecondaryPhone","invalidDriverLicense","invalidNo","invalidExpiryDate","invalidUploadDoc1","invalidUploadDoc2","invalidBillingAddress","InvalidAddress1","InvalidAddress2","InvalidSuburb","InvalidState","InvalidPostcode","invalidRegoAddress","invaidPageState","setInvaidPageState","DocumentName","DocumentType","Base64","InvalidDocment","InvalidReason","DocumentKey","DocumentUrl","DocumentDownloadUrl","driveLicenseImages","setDriveLicenseImages","submitMessage","setSubmitMessage","submitStatus","setSubmitStatus","setInvalidABNLength","doGetDoc","findFrontDocs","findFrontDoc","findBackDocs","findBackDoc","validationInput","invalidForm","invalidDriveLicenseNo","invalidDrivLicenseExpDate","invalidBusiness","invalidPhone1","validBirthday","moment","validExpdate","invalidDriveLicenseImage1","invalidDriveLicenseImage2","validateDetails","validateBusiness","errorRefs","updateDoc1","updateDoc2","dialogContentRef","onSaveAndSubmit","isSubmit","updateData","orderDetailPageVersionStore","isFront","file","files","invalidFizeSize","invalidFileName","uploadFileMaxSize","allowedExtensions","invalidMessage","updateDoc","reader","FileReader","readAsDataURL","onloadend","base64data","toString","showInvalidFileError","mask","onDriveLicenseExpDateChange","click","focus","accept","borderBottom","onInput","ArrangePayment","orderDetailsFromStore","bankDetails","setBankDetails","getGeometryLocation","SelectLocation","deliveryLocation","setDeliveryLocation","setDistance","orderScheduleDeliveryFromStore","initGoogleMapState","googleMapAPIKey","zoom","containerStyle","center","lat","lng","activeMarker","googleMapState","setGoogleMapState","isLoaded","useJsApiLoader","googleMapsApiKey","language","doGetGeometryLocation","doGetDistance","googleApiService","mapContainerStyle","SelectDateTime","dipatch","selectedDate","setSelectedDate","selectedTime","setSelectedTime","timeList","setTimeList","timeListLoadingStatus","setTimeListLoadingStatus","doGetTime","Date","toDate","minDate","showWeek","scheduleDeliveryStore","PickupLocation","ScheduleDelivery","scheduleStep","setScheduleStep","isReschedule","toNextStep","handleConfirm","ifDisableButton","onTabChange","getAllDocuments","doc","getSpecificDocuments","ReviewContract","fullName","setFullName","invalidFullname","setInvalidFullname","consent","setConsent","errorMessage","pdfLink","setPDFLink","onHideDialog","findDocs","requestFrontData","Documents","docService","reportName","displayUrl","onSignContract","FullName","download","rel","FinanceApplication","FinanceApplicationStepName","FinanceApplicationStepLink","financeStatus","setFinanceStatus","doGetFinanceStatus","financeApplicationStepName","financeApplicationStepLink","RetryPayment","setCustomCardInstance","showButton","setShowButton","selectedOrderDetailsFromStore","customCard","span","offset","ViewAppointment","Progress","progressList","lastPathname","isSuccessWaitListedPage","activeStep","setActiveStep","accordionOpen","setAccordionOpen","accordionOpenInit","step","pipelineBarStepStatus","PurchasingStepsToggle","callback","pipelineStatus","updatedAccordionOpen","Object","collapseOpenState","aria-expanded","onDownloadContract","onDownload","link","downloadUrl","buttonTemplate","stepItem","buttonID","desc","OrderPlacedSuccess","rdRefNo","financeLink","setFinanceLink","showContactMessage","setShowContactMessage","setCurrentStep","doGetOrder","orderFromAPI","vehicleThumbnail","getOrderOptions","deliveryLocationState","deliveryLocationSuburb","deliveryLocationPostcode","deliveryLocationAddress","orderCustomer","firstName","lastName","customerCountry","billingSuburb","billingPostCode","billingState","regoSuburb","regoPostCode","regoState","totalPrice","currentBalance","linkToFinanceApplication","currentStepYanaValue","pipelines","pipeLineData","pipeLines","stepNo","pipelineNumber","pipelineBarStepNumber","pipelineName","pipelineDesc","completeDate","showPrice","aspectRatio","ProgressSteps","OrderWaitlisted","setInterest","doGetWaitlist","interestFromBackend","marketing","interestType","NewVehicleInventory","getTestDriveLocations","model","getTestDriveModels","getTestDriveVariants","saveTestDrive","testDrive","TestDrive","QRcode","locations","setLocations","Address","selectedLocations","setSelectedLocations","setModels","ModelID","selectedModel","setSelectedModel","isFirstRenderCountry","utmtag","transaction","yanaTestDriveID","yanaTestDriveNo","invalidCountry","invalidLocation","invalidModel","invalidVariant","invalidPageState","setInvalidPageState","submittingStatus","setSubmittingStatus","doGetModels","testDriveService","tempLocations","tempModels","modelID","tempVariant","invalidComfirm","onBookTestDrive","Status","Message","onVariantChange","onLocationChange","emptyMessage","MyOrders","myOrderList","setMyOrderList","loadingStatus","setLoadingStatus","orderList","OrderNo","CustomerID","CustomerNo","VariantImage","OrderDate","orderDate","OrderStatus","orderStatus","IsShowActionRequiredWording","isShowActionRequiredWording","orderItem","visibility","orderId","orderNo","toOrderDetails","Profiles","yanaProfileID","nzYanaProfileID","usename","phone1","phone2","invalidUsername","setInvalidState","GMCommunicationEmail","GMCommunicationMobile","GMPartnerCommunicationEmail","GMPartnerCommunicationMobile","setPrivacy","submitResult","setSubmitResult","invalidANBLength","setInvalidANBLength","doGetProfile","profileService","profile","middleName","phoneNumber1","phoneNumber2","privacyFromBackend","gmCommunicationEmail","gmCommunicationMobile","gmPartnerCommunicationEmail","gmPartnerCommunicationMobile","Privacy","setProfile","communicationsHistory","setCommunicationsHistory","profileFromBackend","communicationHistory","Communications","communicationDescription","Type","SentDate","sent","onSavePrivacy","Support","requestDialogVisible","setRequestDialogVisible","requestStatus","setRequestStatus","callBackType","setCallBackType","processingState","setProcessingState","handleCallBackRequest","RequestType","onShowRequestDialog","onHideRequestDialog","alignItems","Dropdown","data-bs-theme","Toggle","Menu","orderDetailPageVersionFromStore","orderDocs","setOrderDocs","doGetAllDocs","tempDocs","allDocs","reportType","handleDownloadClick","OrderDetails","yanaID","yanaNo","stepsList","setStepsList","isCancelledOrder","setIsCancelledOrder","setIfShowViewAppointmentButton","paymentSummaryLink","setPaymentSummaryLink","lastStepCollapseHeightRef","setLastStepCollapseHeight","btn0","btn1","btn2","btn3","btn4","btn5","btn6","atob","tempOrder","getPaymentHistory","orderPaymentHistory","downPayment","paymentDueDate","finalPaymentAmount","isCancelled","showViewAppointmentButton","birthDay","driveLicenseNumber","driveLicenseExpDate","deliveryDate","deliveryTime","orderScheduleDeliveryStore","paymentHistoryData","PaymentDate","paymentDate","PaymentName","paymentName","FrqQuestionsToggle","AccordionContext","doGetDownloadPaymentSummary","MaintenancePage","store","newVersion","clearStorageOnDeployment","clear","persistedState","createStore","__REDUX_DEVTOOLS_EXTENSION__","subscribe","_","throttle","saveState","getState","configureStore","setupIonicReact","App","callbackId","addEventCallback","eventType","EventType","LOGIN_SUCCESS","ACQUIRE_TOKEN_SUCCESS","payload","account","policyToCompare","tfpMatches","hasOwnProperty","acrMatches","compareIssuingPolicy","signUpSignInFlowRequest","LOGIN_FAILURE","resetPasswordRequest","removeEventCallback","basename","path","msalInstance","PublicClientApplication","setActiveAccount","SSO_SILENT_SUCCESS","ReactDOM","render","StrictMode"],"mappings":"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","file":"static/js/main.8db9a15f.chunk.js","sourcesContent":["function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 522;","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 523;","import { ISelectedCountryState } from \"model/ICountryStateList\";\r\nimport { ISessionState } from \"model/ISessionState\";\r\n// Session\r\nexport const GOT_SESSION = 'GotSession';\r\nexport const gotSessionAction = (session: ISessionState | null) =>\r\n({\r\n    type: GOT_SESSION,\r\n    session,\r\n} as const);\r\nexport const CLEAR_SESSION = 'ClearSession';\r\nexport const clearSessionAction = () =>\r\n({\r\n    type: CLEAR_SESSION\r\n} as const);\r\ntype SessionActions = ReturnType<typeof gotSessionAction>\r\n    | ReturnType<typeof clearSessionAction>;\r\n\r\n\r\nexport const initialSessionState: ISessionState = {\r\n    //Memberhsipno: \"\",\r\n    //FirstName: \"\",\r\n    //LastName: \"\",\r\n    //Address: \"\",\r\n    //Suburb: \"\",\r\n    //State: \"\",\r\n    //Postcode: \"\",\r\n    Email: \"\",\r\n    //Phone: \"\",\r\n    //UserType: 0,\r\n    YanaCustomerID: \"\",\r\n    YanaCustomerNo: \"\",\r\n    NZYanaCustomerID: \"\",\r\n    NZYanaCustomerNo: \"\"\r\n};\r\nexport const sessionReducer = (\r\n    state: ISessionState | null = null,\r\n    action: SessionActions,\r\n): ISessionState | null => {\r\n    switch (action.type) {\r\n        case CLEAR_SESSION: {\r\n            return null;\r\n        }\r\n        case GOT_SESSION: {\r\n            return action.session;\r\n        }\r\n    }\r\n\r\n    return state;\r\n};\r\n\r\n\r\n//Country & State\r\nexport const GOT_COUNTRY_STATE = 'GotCountryState';\r\nexport const setCountryStateAction = (countryInfo: ISelectedCountryState | null) =>\r\n({\r\n    type: GOT_COUNTRY_STATE,\r\n    countryInfo,\r\n} as const);\r\nexport const CLEAR_COUNTRY_STATE = 'ClearSession';\r\nexport const clearCountryStateAction = () =>\r\n({\r\n    type: CLEAR_SESSION\r\n} as const);\r\ntype CountryStateActions = ReturnType<typeof setCountryStateAction>\r\n    | ReturnType<typeof clearCountryStateAction>;\r\n\r\n\r\nexport const initialCountryState: ISelectedCountryState = {\r\n    Country: {\r\n        name: \"\",\r\n        code: \"\"\r\n    },\r\n    State: {\r\n        name: \"\",\r\n        code: \"\"\r\n    },\r\n};\r\nexport const countryStateReducer = (\r\n    state: ISelectedCountryState | null = null,\r\n    action: CountryStateActions,\r\n): ISelectedCountryState | null => {\r\n    switch (action.type) {\r\n        case CLEAR_SESSION: {\r\n            return null;\r\n        }\r\n        case GOT_COUNTRY_STATE: {\r\n            return action.countryInfo;\r\n        }\r\n    }\r\n\r\n    return state;\r\n};","export const SET_CUSTOMER_TYPE = 'SET_CUSTOMER_TYPE';\r\nexport const setCustomerTypeAction = (customerType: any) =>\r\n({\r\n    type: SET_CUSTOMER_TYPE,\r\n    customerType,\r\n} as const);\r\n\r\ntype CustomerTypeActions =\r\n    | ReturnType<typeof setCustomerTypeAction>;\r\n\r\nexport const customerTypeReducer = (\r\n    state = <any>null,\r\n    action: CustomerTypeActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_CUSTOMER_TYPE: {\r\n            return action.customerType;\r\n        }\r\n    }\r\n\r\n    return state;\r\n};\r\n\r\n","import { IScrollPosition, IMainSection } from \"helpers/interface\";\r\n\r\nexport const SET_SCROLL_POSITION = 'SetScrollPosition';\r\nexport const setScrollPosition = (positionStatus: string) =>\r\n({\r\n    type: SET_SCROLL_POSITION,\r\n    positionStatus\r\n} as const);\r\n\r\nexport type ScrollPositionActions = ReturnType<typeof setScrollPosition>;\r\nexport const initScrollPositionState: IScrollPosition = {\r\n    positionStatus: 'global'\r\n}\r\n\r\nexport const scrollPositionReducer = (\r\n    state = initScrollPositionState,\r\n    action: ScrollPositionActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_SCROLL_POSITION: {\r\n            return {\r\n                ...state,\r\n                positionStatus: action.positionStatus,\r\n            };\r\n        }\r\n        default:\r\n        return state;\r\n    }\r\n};\r\n\r\nexport const SET_MAIN_SECTION = 'checkMainSection';\r\nexport const checkMainSection = (mainSection: string) =>\r\n({\r\n    type: SET_MAIN_SECTION,\r\n    mainSection\r\n} as const);\r\n\r\nexport type MainSectionActions = ReturnType<typeof checkMainSection>;\r\nexport const initMainSectionState: IMainSection = {\r\n    mainSection: 'global'\r\n}\r\n\r\nexport const mainSectionReducer = (\r\n    state = initMainSectionState,\r\n    action: MainSectionActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_MAIN_SECTION: {\r\n            return {\r\n                ...state,\r\n                mainSection: action.mainSection,\r\n            };\r\n        }\r\n        default:\r\n        return state;\r\n    }\r\n};","import { IMainRightPage } from \"helpers/interface\";\r\n\r\nexport const SET_MAIN_RIGHT_PAGE = 'showMainRightPage';\r\nexport const hideGlobalPage = (isHideGlobal: boolean) =>\r\n({\r\n    type: SET_MAIN_RIGHT_PAGE,\r\n    isHideGlobal\r\n} as const);\r\n\r\nexport type MainRightPageActions = ReturnType<typeof hideGlobalPage>;\r\nexport const initMainRightPageState: IMainRightPage = {\r\n    isHideGlobal: false\r\n}\r\n\r\nexport const mainRightPageReducer = (\r\n    state = initMainRightPageState,\r\n    action: MainRightPageActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_MAIN_RIGHT_PAGE: {\r\n            return {\r\n                ...state,\r\n                isHideGlobal: action.isHideGlobal,\r\n            };\r\n        }\r\n        default:\r\n        return state;\r\n    }\r\n};","import * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as deliveryModel from 'model/IDelivery';\r\nimport * as selectedDeliveryHelper from 'businessHelpers/SelectedDeliveryhelper';\r\nimport { ICodeName } from 'model/ICommon';\r\n\r\nexport const UPDATE_DELIVERY = 'UpdateDelivery';\r\nexport const updateDeliveryAction = (delivery: selectedConfigModel.ISelectedDelivery) =>\r\n({\r\n    type: UPDATE_DELIVERY,\r\n    delivery,\r\n} as const);\r\n\r\n//export const UPDATE_ESTDELIVERYDATE = 'updateEstDeliveryDate';\r\n//export const updateEstDeliveryDateAction = (estDeliveryDate: string | null) =>\r\n//({\r\n//    type: UPDATE_ESTDELIVERYDATE,\r\n//    estDeliveryDate,\r\n//} as const);\r\n\r\nexport const UPDATE_COUNTRYSTATE = 'updateCountryState';\r\nexport const updateCountryAndStateAction = (countryCode: ICodeName, stateCode: ICodeName) =>\r\n({\r\n    type: UPDATE_COUNTRYSTATE,\r\n    countryCode,\r\n    stateCode\r\n} as const);\r\n\r\nexport const UPDATE_POSTCODE = 'updatePostcode';\r\nexport const updatePostcodeAction = (postcode: string | null, suburb: string | null) =>\r\n({\r\n    type: UPDATE_POSTCODE,\r\n    postcode,\r\n    suburb\r\n} as const);\r\n\r\nexport const UPDATE_SELECTEDPICKUPLOCATION = 'updateSelectedPickupLocation';\r\nexport const updateSelectedPickupLocationAction = (location: deliveryModel.IPickupLocation) =>\r\n({\r\n    type: UPDATE_SELECTEDPICKUPLOCATION,\r\n    location,\r\n} as const);\r\n\r\nexport const UPDATE_SELECTEDHOMEDELIVERY = 'updateSelectedHomeDelivery';\r\nexport const updateSelectedHomeDeliveryAction = (homeDeliveryAddress: string,\r\n    homeAddressPostcode: string, homeAddressSuburb: string, homeAddressState: string) =>\r\n({\r\n    type: UPDATE_SELECTEDHOMEDELIVERY,\r\n    homeDeliveryAddress,\r\n    homeAddressPostcode,\r\n    homeAddressSuburb,\r\n    homeAddressState\r\n} as const);\r\n\r\nexport const UPDATE_DELIVERYOPTIONS = 'updateDeliveryOptions';\r\nexport const updateDeliveryOptionsAction = (deliveryOption: string) =>\r\n({\r\n    type: UPDATE_DELIVERYOPTIONS,\r\n    deliveryOption,\r\n} as const);\r\n\r\n\r\n//export const UPDATE_ESTDELIVERYMONTHYEAR = 'updateEstDeliveryMonthYear';\r\n//export const updateEstDeliveryMonthYearAction = (date: string | null) =>\r\n//({\r\n//    type: UPDATE_ESTDELIVERYMONTHYEAR,\r\n//    date,\r\n//} as const);\r\n\r\n//export const VALIDATE_DELIVERY = 'Validate_delivery';\r\n//export const validateDeliveryAction = (invalidOptions: boolean, invalidLocation: boolean) =>\r\n//({\r\n//    type: VALIDATE_DELIVERY,\r\n//    invalidOptions,\r\n//    invalidLocation\r\n//} as const);\r\n\r\n//export const VALIDATE_DELIVERY_ADDRESS = 'ValidateDeliveryAddress';\r\n//export const validateDeliveryAddressAction = (invalidLocation: boolean) =>\r\n//({\r\n//    type: VALIDATE_DELIVERY_ADDRESS,\r\n//    invalidLocation\r\n//} as const);\r\n\r\n//export const UPDATE_REGOADDRESS = 'updateRegoAddress';\r\n//export const updateRegoAddressAction = (\r\n//    regoAddress: string | null,\r\n//    regoSuburb: string | null,\r\n//    regoPostcode: string | null,\r\n//    regoState: string | null) =>\r\n//({\r\n//    type: UPDATE_REGOADDRESS,\r\n//    regoAddress,\r\n//    regoSuburb,\r\n//    regoPostcode,\r\n//    regoState\r\n//} as const);\r\n\r\nexport const CLEAR_DELIVERYOPTIONS = 'clearDeliveryOptions';\r\nexport const clearDeliveryOptionsAction = () =>\r\n({\r\n    type: CLEAR_DELIVERYOPTIONS,\r\n} as const);\r\n\r\n\r\nexport type SelectedDeliveryActions = ReturnType<typeof updateDeliveryAction>\r\n    //| ReturnType<typeof updateEstDeliveryDateAction>\r\n    | ReturnType<typeof updateCountryAndStateAction>\r\n    | ReturnType<typeof updatePostcodeAction>\r\n    | ReturnType<typeof updateSelectedPickupLocationAction>\r\n    | ReturnType<typeof updateSelectedHomeDeliveryAction>\r\n    | ReturnType<typeof updateDeliveryOptionsAction>\r\n    | ReturnType<typeof clearDeliveryOptionsAction>;\r\n\r\n//| ReturnType<typeof updateEstDeliveryMonthYearAction>\r\n//export const initSelectedLocation: selectedConfigModel.ISelectedDelivery = {\r\n//    Country: null,\r\n//    State: null,\r\n//    SelectedPickupLocation: null,\r\n//    SelectedDeliveryOption: null,\r\n//    SelectedDeliveryFullAddress: null,\r\n//    SelectedDeliveryPostcode: null,\r\n//    SelectedDeliveryState: null,\r\n//    SelectedDeliverySuburb: null,\r\n//    //EstDeliveryDate: null,\r\n//    //InvalidLocation: null,\r\n//    //InvalidDeliveryOption: null,\r\n//    PrimaryAddress: null,\r\n//    PrimaryPostcode: null,\r\n//    PrimarySuburb: null,\r\n//    PrimaryState: null,\r\n//    InvalidPrimaryAddress: null,\r\n//    DeliveryAvailable: null,\r\n//    DeliveryPrice: null,\r\n//    DeliveryPriceErrorCode: null,\r\n//    DeliveryDistance: null,\r\n//    PickupLocationName: null,\r\n//}\r\n\r\nexport const selectedDeliveryReducer = (\r\n    state = selectedDeliveryHelper.getInitSelectedDelivery(),\r\n    action: SelectedDeliveryActions,\r\n) => {\r\n    switch (action.type) {\r\n        case UPDATE_DELIVERY: {\r\n            return action.delivery;\r\n        }\r\n        //case UPDATE_ESTDELIVERYDATE: {\r\n        //    return {\r\n        //        ...state,\r\n        //        EstDeliveryDate: action.estDeliveryDate\r\n        //    };\r\n        //}\r\n        case UPDATE_COUNTRYSTATE: {\r\n            return {\r\n                ...state,\r\n                Country: action.countryCode,\r\n                State: action.stateCode,\r\n                PostCode: null,\r\n                Suburb: null,\r\n                SelectedPickupLocation: null,\r\n                SelectedDeliveryOption: null,\r\n                DeliveryPrice: null,\r\n            };\r\n        }\r\n        case UPDATE_POSTCODE: {\r\n            return {\r\n                ...state,\r\n                PostCode: action.postcode,\r\n                Suburb: action.suburb,\r\n                SelectedPickupLocation: null,\r\n                SelectedDeliveryOption: null,\r\n                DeliveryPrice: null,\r\n            };\r\n        }\r\n        case UPDATE_SELECTEDPICKUPLOCATION: {\r\n            return {\r\n                ...state,\r\n                SelectedPickupLocation: action.location,\r\n                //SelectedHomeDeliveryFullAddress: null,\r\n            };\r\n        }\r\n        case UPDATE_SELECTEDHOMEDELIVERY: {\r\n            return {\r\n                ...state,\r\n                //SelectedPickupLocation: null,\r\n                SelectedHomeDeliveryFullAddress: action.homeDeliveryAddress,\r\n                SelectedHomeDeliveryPostcode: action.homeAddressPostcode,\r\n                SelectedHomeDeliverySuburb: action.homeAddressSuburb,\r\n                SelectedHomeDeliveryState: action.homeAddressState,\r\n            };\r\n        }\r\n        case UPDATE_DELIVERYOPTIONS: {\r\n            return {\r\n                ...state,\r\n                SelectedDeliveryOption: action.deliveryOption,\r\n            };\r\n        }\r\n\r\n        //case UPDATE_ESTDELIVERYMONTHYEAR: {\r\n        //    return {\r\n        //        ...state,\r\n        //        EstDeliveryDate: action.date,\r\n        //    };\r\n        //}\r\n\r\n        //case UPDATE_REGOADDRESS: {\r\n        //    return {\r\n        //        ...state,\r\n        //        RegoAddress: action.regoAddress,\r\n        //        RegoPostcode: action.regoPostcode,\r\n        //        RegoSuburb: action.regoSuburb,\r\n        //        RegoState: action.regoState,\r\n        //    };\r\n        //}\r\n\r\n        case CLEAR_DELIVERYOPTIONS: {\r\n            return selectedDeliveryHelper.getInitSelectedDelivery();\r\n        }\r\n        default:\r\n            return state;\r\n    }\r\n};","import { ICodeName } from 'model/ICommon';\r\nimport * as bankInfoModel from 'model/IBankInfo';\r\n\r\nexport const enumProcessingStatus = {\r\n    Init: 0,\r\n    Processing: 1,\r\n    Processed: 2\r\n};\r\n\r\nexport const constModel = \"LYRIQ\";\r\n\r\n\r\nexport const enumOrdersTabName = {\r\n    Orders: 0,\r\n    Returns: 1,\r\n    // Refunds: 2,\r\n    Items: 2,\r\n    Return_Details: 11,\r\n    Item_Details: 22,\r\n    // Refund_Details: 22,\r\n};\r\n\r\n//////---------------------useCountryState hook to get data\r\n//export const constCountryList = [\r\n//    { name: 'Australia', code: 'AU' },\r\n//    { name: 'New Zealand', code: 'NZ' },\r\n//];\r\n\r\nexport const constStateList: ICodeName[] = [\r\n    { name: 'ACT', code: 'ACT' },\r\n    { name: 'NSW', code: 'NSW' },\r\n    { name: 'NT', code: 'NT' },\r\n    { name: 'QLD', code: 'QLD' },\r\n    { name: 'SA', code: 'SA' },\r\n    { name: 'TAS', code: 'TAS' },\r\n    { name: 'VIC', code: 'VIC' },\r\n    { name: 'WA', code: 'WA' },\r\n];\r\n\r\nexport const constGst: number = 0.1;\r\n\r\n\r\n\r\nexport const enumPaymentStatus = {\r\n    Success: \"Success\",\r\n    Fail: \"Fail\",\r\n    Incomplete: \"Incomplete\",\r\n    Cancel: \"Cancel\",\r\n    Unknow: \"Unknow\",\r\n};\r\n\r\n//delivery option's value\r\n//RD and Yana are sharing these value. Do not change them unless get Yana confirmed.\r\nexport const enumDeliveryOptions = {\r\n    Pickup: \"Pick Up\",\r\n    HomeDelivery: \"Regional Delivery\",\r\n}\r\n//delivery option's display name\r\n//These value are used to show label, and can be changed as scope request.\r\nexport const enumDeliveryOptionsDisplayName = {\r\n    Pickup: \"In-store Collection\",\r\n    HomeDelivery: \"Regional Delivery\",\r\n}\r\n\r\n//RD and Yana are sharing these value. Do not change them unless get Yana confirmed.\r\nexport const enumPaymentOptions = {\r\n    Cash: \"Cash\",\r\n    Finance: \"Finance\",\r\n}\r\n\r\n//RD and Yana are sharing these value. Do not change them unless get Yana confirmed.\r\nexport const enumCountryCode = {\r\n    Australia: \"AU\",\r\n    NewZealand: \"NZ\",\r\n}\r\n\r\nexport const enumCountryName = {\r\n    Australia: \"Australia\",\r\n    NewZealand: \"New Zealand\",\r\n}\r\n\r\n//RD and Yana are sharing the code value. Do not change the code unless get Yana confirmed.\r\nexport const enumClientTypes = {\r\n    Private: {\r\n        Code: \"Private Customer\",\r\n        Text: \"I'm a private customer\",\r\n    },\r\n    Business: {\r\n        Code: \"Business Customer\",\r\n        Text: \"I'm a business customer\",\r\n    },\r\n};\r\n\r\n\r\nexport const enumMonth = [\r\n    { name: 'JAN', code: '01' },\r\n    { name: 'FEB', code: '02' },\r\n    { name: 'MAR', code: '03' },\r\n    { name: 'APR', code: '04' },\r\n    { name: 'MAY', code: '05' },\r\n    { name: 'JUE', code: '06' },\r\n    { name: 'JUL', code: '07' },\r\n    { name: 'AUG', code: '08' },\r\n    { name: 'SEP', code: '09' },\r\n    { name: 'OCT', code: '10' },\r\n    { name: 'NOV', code: '11' },\r\n    { name: 'DEC', code: '12' },\r\n];\r\n\r\n//RD and Yana are sharing these value. Do not change them unless get Yana confirmed.\r\nexport const enumVehicleOptionType = {\r\n    Accessories: \"Accessories\",\r\n    Charge: \"Charge\"\r\n}\r\n\r\n\r\n//These value are used to show label, and can be changed as scope request.\r\nexport const enumVehicleOptionTypeName = {\r\n    Accessories: \"Accessories\",\r\n    Charge: \"Charging\"\r\n}\r\n\r\nexport const enumChargeType = {\r\n    Public: 1,\r\n    HomeWithoutPrice: 2,\r\n    HomeHasPrice: 3\r\n}\r\n\r\nexport const enumPage = {\r\n    CheckoutPayment: 1,\r\n    JoinWaitList: 2\r\n}\r\n\r\nexport const enumInterestType = {\r\n    Share: \"Share\",\r\n    Save: \"Save\",\r\n    Notify: \"Notify\",\r\n    WaitingList: \"Waitlist\"\r\n}\r\n\r\nexport const enumRDErrorCode = {\r\n    ExistedEmail: \"RD0001\",\r\n    NotSignIn: \"RD0002\",\r\n    MaxExtensionLimit: \"RD0003\",\r\n    UnauthorisedAccess: \"UnauthorisedAccess\",\r\n    OutOfStock: \"ECM0010\",\r\n    NoActivity: \"NoActivity\",\r\n}\r\n\r\nexport const enumRedirectPage = {\r\n    CheckoutPaymentPage: \"CheckoutPaymentPage\"\r\n}\r\n\r\nexport const enumOrderStatus = {\r\n    Ordered: \"Ordered\",\r\n    Confirmed: \"Ordered Confirmed\",\r\n    Cancelled: \"Cancelled\",\r\n    Delivered: \"Delivered\",\r\n    PreparingToShip: \"Preparing To Ship\"\r\n}\r\n\r\nexport const enumScrollSection = {\r\n    Variant: \"variant\",\r\n    Exterior: \"exterior\",\r\n    Interior: \"interior\",\r\n    Accessories: \"accessories\",\r\n    Charging: \"charging\",\r\n    Payment: \"payment\",\r\n    Delivery: \"delivery\",\r\n    Checkout: \"checkout\",\r\n    CheckoutForm: \"checkoutForm\",\r\n    Global: \"global\"\r\n}\r\n\r\nexport const enumInstockPipelineStep = {\r\n    OrderPlace: 1,\r\n    ProvideDetail: 2,\r\n    SignContract: 3,\r\n    OrderConfirmed: 4,\r\n    ScheduleDelivery: 5,\r\n    ArrangePayment: 6,\r\n    Delivered: 7\r\n}\r\n\r\nexport const enumPipelineStep = {\r\n    OrderPlace: 1,\r\n    ProvideDetail: 2,\r\n    SignContract: 3,\r\n    OrderConfirmed: 4,\r\n    VehicleInProduction: 5,\r\n    PrepareToShip: 6,\r\n    Shipped: 7,\r\n    ScheduleDelivery: 8,\r\n    ArrangePayment: 9,\r\n    Delivered: 10\r\n}\r\n\r\nexport const enumPipelineButtonID = {\r\n    RetryPayment: 1,\r\n    ProvideDetail: 2,\r\n    StartYourApplication: 3,\r\n    DownloadContract: 4,\r\n    ReviewSignYourContract: 5,\r\n    SchedulePickup: 6,\r\n    ArranagePayment: 7,\r\n    ViewAppointment: 8,\r\n    ViewDelivery: 9\r\n}\r\n\r\nexport const enumDocumentType = {\r\n    DriveLicenseFront: \"Drive License Front\",\r\n    DriveLicenseBack: \"Drive License Back\",\r\n    Contract: \"Contract\",\r\n    PaymentSummary: \"PaymentSummary\"\r\n}\r\n\r\nexport const enumInventorySort: ICodeName[] = [\r\n    { name: 'Lowest price', code: \"0\" },\r\n    { name: 'Highest price', code: \"1\" },\r\n];\r\n\r\n\r\nexport const enumTestDriveTransaction = {\r\n    Book: \"Book\",\r\n    Update: \"Update\",\r\n    Cancel: \"Cancel\"\r\n}\r\n\r\n\r\nexport const enumDeliveryPriceError = [\r\n    {\r\n        ErrorCode: \"1\",\r\n        ErrorMessage: \"We were unable to provide an accurate estimate for this delivery address. You can either try a different address or proceed with your order, and a member of our sales team will reach out to provide an estimate.\",\r\n    },\r\n    {\r\n        ErrorCode: \"2\",\r\n        ErrorMessage: \"We are unable to calculate your regional deliver cost estimate at this time.You can try again later or call our Cadillac Sales team on 1800***** for support through this step\",  //todo: phone no\r\n    }\r\n];\r\n\r\nexport const enumErrorMessage = {\r\n    AUReservationError: \"Your reservation has expired. Please contact our Cadillac Sales Team on 1800 223455\",\r\n    NZReservationError: \"Your reservation has expired. Please contact our Cadillac Sales Team on 0800 223455\",\r\n}\r\n\r\nexport const enumLinkSource = {\r\n    RegularInterestLink: \"Regular\",\r\n    PrivateInterestLink: \"Private\",\r\n};\r\n\r\nexport const enumCallBackRequest = {\r\n    CallBack: \"Call Back\",\r\n    CancelOrder: \"Cancel Order\",\r\n}\r\n\r\nexport const enumAuBank: bankInfoModel.IBankInfo = {\r\n    BankName: \"Bank of America, N.A.,\",\r\n    BankBranchName: \"Sydney Branch\",\r\n    AccountName: \"GENERAL MOTORS AUSTRALIA AND NEW ZEALAND PTY LTD\",\r\n    BSBNumber: \"232-001\",\r\n    AccountNumber: \"176 410 50\",\r\n    Phone: \"1800 223 455\"\r\n}\r\n\r\nexport const enumNZBank: bankInfoModel.IBankInfo = {\r\n    BankName: \"CITIbank NA (New Zealand)\",\r\n    BankBranchName: \"\",\r\n    AccountName: \"General Motors New Zealand Ltd\",\r\n    BSBNumber: \"31-2840\",\r\n    AccountNumber: \"0044304-06\",\r\n    Phone: \"0800 223 455\"\r\n}","import * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport { enumChargeType, enumVehicleOptionType } from '../helpers/enum';\r\n\r\nexport const SET_DEFAULTVEHICLE = 'setDefaultVehicle';\r\nexport const setDefaultVehicleAction = (defaultVehicle: selectedConfigModel.ISelectedVehicle ) =>\r\n({\r\n    type: SET_DEFAULTVEHICLE,\r\n    defaultVehicle,\r\n} as const);\r\n\r\nexport const UPDATE_VARIANT = 'updateVariant';\r\nexport const updateVariantAction = (variantID: string, variant: string, variantBasePrice: number) =>\r\n({\r\n    type: UPDATE_VARIANT,\r\n    variantID,\r\n    variant,\r\n    variantBasePrice,\r\n} as const);\r\n\r\n\r\nexport const UPDATE_EXTERIOR = 'updateExterior';\r\nexport const updateExteriorAction = (exteriorID: string, exterior: string, exteriorPrice: number) =>\r\n({\r\n    type: UPDATE_EXTERIOR,\r\n    exteriorID,\r\n    exterior,\r\n    exteriorPrice,\r\n} as const);\r\n\r\nexport const UPDATE_INTERIOR = 'updateInterior';\r\nexport const updateInteriorAction = (interiorID: string, interior: string, interiorPrice: number, hasStock: boolean) =>\r\n({\r\n    type: UPDATE_INTERIOR,\r\n    interiorID,\r\n    interior,\r\n    interiorPrice,\r\n    hasStock\r\n} as const);\r\n\r\nexport const UPDATE_ALLOPTIONS = \"updateAllOptions\";\r\nexport const updateAllOptionsAction = (options: vehicleModel.IVehicleOptions[] | null) =>\r\n({\r\n    type: UPDATE_ALLOPTIONS,\r\n    options,\r\n} as const);\r\n\r\nexport const UPDATE_OPTION = \"updateOption\";\r\nexport const updateOptionAction = (option: vehicleModel.IVehicleOptions) =>\r\n({\r\n    type: UPDATE_OPTION,\r\n    option,\r\n} as const);\r\n\r\nexport const CLEAR_SELECTEDCONFIG = \"clearSelectedConfig\";\r\nexport const clearSelectedConfigAction = () =>\r\n({\r\n    type: CLEAR_SELECTEDCONFIG,\r\n} as const);\r\n\r\nexport type SelectedVehicleActions = ReturnType<typeof setDefaultVehicleAction>\r\n    | ReturnType<typeof updateVariantAction>\r\n    | ReturnType<typeof updateAllOptionsAction>\r\n    | ReturnType<typeof updateOptionAction>\r\n    | ReturnType<typeof updateExteriorAction> | ReturnType<typeof updateInteriorAction>\r\n    | ReturnType<typeof clearSelectedConfigAction>;\r\nexport const initSelectedVehicle: selectedConfigModel.ISelectedVehicle = {\r\n    VariantID: null,\r\n    VariantName: null,\r\n    VariantBasePrice: 0,\r\n    ExteriorID: null,\r\n    Exterior: null,\r\n    ExteriorPrice: null,\r\n    InteriorID: null,\r\n    Interior: null,\r\n    InteriorPrice: null,\r\n    Options: null,\r\n    Subtotal: 0,\r\n    HasStock: null,\r\n}\r\n\r\nexport const selectedVehicleReducer = (\r\n    state = initSelectedVehicle,\r\n    action: SelectedVehicleActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_DEFAULTVEHICLE: {\r\n            return action.defaultVehicle;\r\n        }\r\n        case UPDATE_VARIANT: {\r\n            \r\n            let newState: selectedConfigModel.ISelectedVehicle = {\r\n                ...initSelectedVehicle,\r\n                VariantID: action.variantID,\r\n                VariantName: action.variant,\r\n                VariantBasePrice: action.variantBasePrice,\r\n            };\r\n            newState = calculateSubtotal(newState || initSelectedVehicle);\r\n            return newState;\r\n        }\r\n        case UPDATE_EXTERIOR: {\r\n            let newState: selectedConfigModel.ISelectedVehicle = {\r\n                ...state,\r\n                ExteriorID: action.exteriorID,\r\n                Exterior: action.exterior,\r\n                ExteriorPrice: action.exteriorPrice,\r\n            };\r\n            newState = calculateSubtotal(newState || initSelectedVehicle);\r\n            return newState;\r\n        }\r\n        case UPDATE_INTERIOR: {\r\n            let newState: selectedConfigModel.ISelectedVehicle = {\r\n                ...state,\r\n                InteriorID: action.interiorID,\r\n                Interior: action.interior,\r\n                InteriorPrice: action.interiorPrice,\r\n                HasStock: action.hasStock\r\n            };\r\n            newState = calculateSubtotal(newState || initSelectedVehicle);\r\n            return newState;\r\n        }\r\n        case UPDATE_ALLOPTIONS: {\r\n            let newState: selectedConfigModel.ISelectedVehicle = {\r\n                ...state,\r\n                Options: action.options\r\n            };\r\n            newState = calculateSubtotal(newState || initSelectedVehicle);\r\n            return newState;\r\n        }\r\n        case UPDATE_OPTION: {\r\n            let options: vehicleModel.IVehicleOptions[] = state.Options || [];\r\n\r\n            const index = options.findIndex((value: vehicleModel.IVehicleOptions) => value.YanaOptionID === action.option.YanaOptionID);\r\n            if (index === -1) {\r\n                options = [...options, action.option];\r\n            }\r\n            else {\r\n                //if unselected public charge option, remove all charge options in the store\r\n                if (action.option.OptionType == enumVehicleOptionType.Charge && action.option.ChargeType == enumChargeType.Public) {\r\n                    options = options.filter((value: vehicleModel.IVehicleOptions) => value?.OptionType != enumVehicleOptionType.Charge);\r\n                }\r\n                else {\r\n                    options = options.filter((value: vehicleModel.IVehicleOptions) => value?.YanaOptionID !== action.option.YanaOptionID);\r\n                }\r\n            }\r\n\r\n            let newState: selectedConfigModel.ISelectedVehicle = {\r\n                ...state,\r\n                Options: options\r\n            };\r\n\r\n            newState = calculateSubtotal(newState || initSelectedVehicle);\r\n\r\n            return newState;\r\n        }\r\n        case CLEAR_SELECTEDCONFIG: {\r\n            return initSelectedVehicle;\r\n        }\r\n        default:\r\n            return state;\r\n    }\r\n};\r\n\r\nconst calculateSubtotal = (state: selectedConfigModel.ISelectedVehicle): selectedConfigModel.ISelectedVehicle => {\r\n    let subtotal = 0;\r\n    subtotal = (state.VariantBasePrice || 0) + (state.ExteriorPrice || 0) + (state.InteriorPrice || 0);\r\n    if (state.Options != null) {\r\n        state.Options.map((item: vehicleModel.IVehicleOptions) => {\r\n            subtotal = subtotal + (item.OptionPrice || 0);\r\n            //console.log(item);\r\n            //console.log(subtotal);\r\n        });\r\n    }\r\n    return { ...state, Subtotal: subtotal };\r\n    \r\n}","import * as paymentOptionsModel from 'model/IPaymentOptions';\r\nimport * as rdEnum from 'helpers/enum';\r\n\r\nexport const UPDATE_SELECTEDPAYMENTOPTION = 'UpdateSelectedPaymentOption';\r\nexport const updateSelectedPaymentOptionAction = (selectedPaymentOption:string) =>\r\n({\r\n    type: UPDATE_SELECTEDPAYMENTOPTION,\r\n    selectedPaymentOption,\r\n} as const);\r\n\r\nexport const UPDATE_DRIVEAWAYCOST = 'UpdateDriveawayCost';\r\nexport const updateDriveawayCostAction = (\r\n    driveAwayCost: paymentOptionsModel.IDriveAwayCost,\r\n    driveAwayCostRequest: paymentOptionsModel.IDriveAwayRequest) =>\r\n({\r\n    type: UPDATE_DRIVEAWAYCOST,\r\n    driveAwayCost,\r\n    driveAwayCostRequest\r\n} as const);\r\n\r\n\r\n\r\nexport const UPDATE_FINANCE = 'UpdateFinance';\r\nexport const updateFinanceAction = (finance: paymentOptionsModel.IFinance) =>\r\n({\r\n    type: UPDATE_FINANCE,\r\n    finance,\r\n} as const);\r\n\r\nexport const CLEAR_PAYMENTOPTIONS = 'ClearPaymentOptions';\r\nexport const clearPaymentOptionsAction = () =>\r\n({\r\n    type: CLEAR_PAYMENTOPTIONS,\r\n} as const);\r\n\r\nexport type PaymentOptionsActions = ReturnType<typeof updateDriveawayCostAction>\r\n    | ReturnType<typeof updateSelectedPaymentOptionAction>\r\n    | ReturnType<typeof updateFinanceAction>\r\n    | ReturnType<typeof clearPaymentOptionsAction>;\r\n\r\nexport const initPaymentOptions: paymentOptionsModel.IPaymentOptions = {\r\n    PaymentOption: rdEnum.enumPaymentOptions.Cash,\r\n    DriveAwayCost: null,\r\n    DriveAwayCostRequest: null,\r\n    Finance: null\r\n}\r\n\r\n\r\nexport const paymentOptionsReducer = (\r\n    state = initPaymentOptions,\r\n    action: PaymentOptionsActions,\r\n) => {\r\n    switch (action.type) {\r\n        case UPDATE_SELECTEDPAYMENTOPTION: {\r\n            return {\r\n                ...state,\r\n                PaymentOption: action.selectedPaymentOption\r\n            }\r\n        }\r\n        case UPDATE_DRIVEAWAYCOST: {\r\n            //console.log(\"UPDATE_DRIVEAWAYCOST\");\r\n            //console.log(action)\r\n            return {\r\n                ...state,\r\n                DriveAwayCost: action.driveAwayCost,\r\n                DriveAwayCostRequest: action.driveAwayCostRequest    //store request data to prevent multiple call\r\n            }\r\n        }\r\n        case UPDATE_FINANCE: {\r\n            //console.log(\"UPDATE_FINANCE\");\r\n            //console.log(action)\r\n            return {\r\n                ...state,\r\n                Finance: action.finance\r\n            }\r\n        }\r\n        case CLEAR_PAYMENTOPTIONS: {\r\n            //console.log(\"CLEAR_PAYMENTOPTIONS\");\r\n            return initPaymentOptions;\r\n        }\r\n        default:\r\n            return state;\r\n    }\r\n};","///Temporary save customer details  to store\r\n///Show data after login redirection\r\nimport * as checkoutViewModel from 'model/ICheckoutWaitlistViewModel';\r\n\r\n\r\nexport const SET_CHECKOUTCUSTOMERDETAILS = 'setCheckoutCustomerDetails';\r\nexport const setCheckoutCustomerDetailsAction = (customerDetails: checkoutViewModel.ICheckoutWaitlistProps | null) =>\r\n({\r\n    type: SET_CHECKOUTCUSTOMERDETAILS,\r\n    customerDetails,\r\n} as const);\r\n\r\nexport const CLEAR_CHECKOUTCUSTOMERDETAILS = 'clearCheckoutCustomerDetails';\r\nexport const clearCheckoutCustomerDetailsAction = () =>\r\n({\r\n    type: CLEAR_CHECKOUTCUSTOMERDETAILS\r\n} as const);\r\n\r\nexport type CheckoutCustomerDetailsActions =\r\n    ReturnType<typeof setCheckoutCustomerDetailsAction>\r\n    | ReturnType<typeof clearCheckoutCustomerDetailsAction>;\r\n\r\nexport const checkoutCustomerReducer = (\r\n    state: checkoutViewModel.ICheckoutWaitlistProps | null = null,\r\n    action: CheckoutCustomerDetailsActions\r\n): checkoutViewModel.ICheckoutWaitlistProps | null => {\r\n    switch (action.type) {\r\n        case CLEAR_CHECKOUTCUSTOMERDETAILS: {\r\n            return null;\r\n        }   \r\n        case SET_CHECKOUTCUSTOMERDETAILS: {\r\n            return action.customerDetails;\r\n        }\r\n    }\r\n    return state;\r\n};","///used in my order details, \"provide your details\" popup\r\n\r\nimport * as orderCustomerDetails from 'model/IOrderCustomerDetails';\r\n\r\nexport const SET_ORDERCUSTOMERDETAILS = 'setOrderCustomerDetails';\r\nexport const setOrderCustomerDetailsAction = (customerDetails: orderCustomerDetails.IOrderCustomerDetails | null) =>\r\n({\r\n    type: SET_ORDERCUSTOMERDETAILS,\r\n    customerDetails,\r\n} as const);\r\n\r\nexport const CLEAR_ORDERCUSTOMERDETAILS = 'clearOrderCustomerDetails';\r\nexport const clearOrderCustomerDetailsAction = () =>\r\n({\r\n    type: CLEAR_ORDERCUSTOMERDETAILS\r\n} as const);\r\n\r\nexport type OrderCustomerDetailsActions =\r\n    ReturnType<typeof setOrderCustomerDetailsAction>\r\n    | ReturnType<typeof clearOrderCustomerDetailsAction>;\r\n\r\nexport const orderCustomerDetailsReducer = (\r\n    state: orderCustomerDetails.IOrderCustomerDetails | null = null,\r\n    action: OrderCustomerDetailsActions\r\n): orderCustomerDetails.IOrderCustomerDetails | null => {\r\n    switch (action.type) {\r\n        case CLEAR_ORDERCUSTOMERDETAILS: {\r\n            return null;\r\n        }\r\n        case SET_ORDERCUSTOMERDETAILS: {\r\n            return action.customerDetails;\r\n        }\r\n    }\r\n    return state;\r\n};","//used by components in order details page\r\nimport * as orderModel from 'model/IOrder';\r\n\r\nexport const SET_ORDERDETAILS = 'SetOrderDetails';\r\nexport const setOrderDetailsAction = (orderDetails: orderModel.IOrderRequest | null) =>\r\n({\r\n    type: SET_ORDERDETAILS,\r\n    orderDetails,\r\n} as const);\r\n\r\nexport const CLEAR_ORDERDETAILS = 'clearOrderDetails';\r\nexport const clearOrderDetailsAction = () =>\r\n({\r\n    type: CLEAR_ORDERDETAILS\r\n} as const);\r\n\r\nexport type OrderDetailsActions =\r\n    ReturnType<typeof setOrderDetailsAction>\r\n    | ReturnType<typeof clearOrderDetailsAction>;\r\n\r\nexport const orderDetailsReducer = (\r\n    state: orderModel.IOrderRequest  | null = null,\r\n    action: OrderDetailsActions\r\n): orderModel.IOrderRequest | null => {\r\n    switch (action.type) {\r\n        case CLEAR_ORDERDETAILS: {\r\n            return null;\r\n        }\r\n        case SET_ORDERDETAILS: {\r\n            return action.orderDetails;\r\n        }\r\n    }\r\n    return state;\r\n};","//used by components in order schedule delivery page\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport * as scheduleDeliveryHelper from 'businessHelpers/OrderScheduleDeliveryHelper';\r\n\r\nexport const SET_ORDERSCHEDULEDELIVERY = 'SetOrderScheduleDelivery';\r\nexport const setOrderScheduleDeliveryAction = (scheduleDelivery: scheduleDeliveryModel.IOrderScheduleDelivery) =>\r\n({\r\n    type: SET_ORDERSCHEDULEDELIVERY,\r\n    scheduleDelivery,\r\n} as const);\r\n\r\nexport const SET_SCHEDULEDATE = 'SetScheduleDate';\r\nexport const setScheduleDateAction = (date: Date | undefined, formatDate: string | null) =>\r\n({\r\n    type: SET_SCHEDULEDATE,\r\n    date,\r\n    formatDate\r\n} as const);\r\n\r\n\r\nexport const SET_SCHEDULETIME = 'SetScheduleTime';\r\nexport const setScheduleTimeAction = (time: string | null) =>\r\n({\r\n    type: SET_SCHEDULETIME,\r\n    time\r\n} as const);\r\n\r\n\r\nexport const CLEAR_ORDERSCHEDULEDELIVERY = \"ClearOrderScheduleDelivery\";\r\nexport const clearOrderScheduleDelivery = () =>\r\n({\r\n    type: CLEAR_ORDERSCHEDULEDELIVERY\r\n} as const);\r\n\r\nexport type OrderScheduleDeliveryActions =\r\n    ReturnType<typeof setOrderScheduleDeliveryAction>\r\n    | ReturnType<typeof setScheduleDateAction>\r\n    | ReturnType<typeof setScheduleTimeAction>\r\n    | ReturnType<typeof clearOrderScheduleDelivery>;\r\n\r\nexport const orderScheduleDeliveryReducer = (\r\n    state: scheduleDeliveryModel.IOrderScheduleDelivery = scheduleDeliveryHelper.getInitScheduleDelivery(),\r\n    action: OrderScheduleDeliveryActions\r\n): scheduleDeliveryModel.IOrderScheduleDelivery => {\r\n    switch (action.type) {\r\n        case CLEAR_ORDERSCHEDULEDELIVERY: {\r\n            return scheduleDeliveryHelper.getInitScheduleDelivery();\r\n        }\r\n        case SET_ORDERSCHEDULEDELIVERY: {\r\n            return action.scheduleDelivery;\r\n        }\r\n        case SET_SCHEDULEDATE: {\r\n            return {\r\n                ...state,\r\n                DeliveryDate: action.date,\r\n                DeliveryFormatDate: action.formatDate,\r\n            };\r\n        }\r\n        case SET_SCHEDULETIME: {\r\n            return {\r\n                ...state,\r\n                DeliveryTime: action.time\r\n            };\r\n        }\r\n    }\r\n    return state;\r\n};","import * as vehicleModel from 'model/IVehicle';\r\nimport * as vehicleHelper from 'businessHelpers/VehicleHelper';\r\n\r\nexport const UPDATE_VARIANT = 'UpdateVariant';\r\nexport const updateVariantAction = (variantList: vehicleModel.IVariant[],\r\n    selectedVariant: vehicleModel.IVariant | null) =>\r\n({\r\n    type: UPDATE_VARIANT,\r\n    variantList,\r\n    selectedVariant\r\n} as const);\r\n\r\nexport const UPDATE_SELECTEDVARIANT = 'UpdateSelectedVariant';\r\nexport const updateSelectedVariantAction = (selectedVariant: vehicleModel.IVariant | null) =>\r\n({\r\n    type: UPDATE_SELECTEDVARIANT,\r\n    selectedVariant\r\n} as const);\r\n\r\n\r\nexport const UPDATE_EXTERIOR = 'UpdateExterior';\r\nexport const updateExteriorAction = (exteriorList: vehicleModel.IExterior[],\r\n    selectedExterior: vehicleModel.IExterior | null) =>\r\n({\r\n    type: UPDATE_EXTERIOR,\r\n    exteriorList,\r\n    selectedExterior\r\n} as const);\r\n\r\n\r\nexport const UPDATE_SELECTEDEXTERIOR = 'UpdateSelectedExterior';\r\nexport const updateSelectedExteriorAction = (selectedExterior: vehicleModel.IExterior | null) =>\r\n({\r\n    type: UPDATE_SELECTEDEXTERIOR,\r\n    selectedExterior\r\n} as const);\r\n\r\n\r\nexport const UPDATE_INTERIOR = 'UpdateInterior';\r\nexport const updateInteriorAction = (interiorList: vehicleModel.IInterior[],\r\n    selectedInterior: vehicleModel.IInterior | null) =>\r\n({\r\n    type: UPDATE_INTERIOR,\r\n    interiorList,\r\n    selectedInterior\r\n} as const);\r\nexport const UPDATE_SELECTEDINTERIOR = 'UpdateSelectedInterior';\r\nexport const updateSelectedInteriorAction = (selectedInterior: vehicleModel.IInterior | null) =>\r\n({\r\n    type: UPDATE_SELECTEDINTERIOR,\r\n    selectedInterior\r\n} as const);\r\n\r\n\r\nexport const UPDATE_OPTIONS = 'UpdateOptions';\r\nexport const updateOptionsAction = (\r\n    accessories: vehicleModel.IVehicleOptions[],\r\n    chargingList: vehicleModel.IVehicleOptions[],\r\n) =>\r\n({\r\n    type: UPDATE_OPTIONS,\r\n    accessories,\r\n    chargingList\r\n} as const);\r\n\r\n//export const SET_LOADING = 'Set_Loading';\r\n//export const setLoadingAction = (loading: boolean) =>\r\n//({\r\n//    type: SET_LOADING,\r\n//    loading\r\n//} as const);\r\n\r\nexport const CLEAR_VEHICLE = 'Clear_Vehicle';\r\nexport const clearVehicleAction = () =>\r\n({\r\n    type: CLEAR_VEHICLE,\r\n} as const);\r\n\r\nexport type VehicleActions = ReturnType<typeof updateVariantAction>\r\n    | ReturnType<typeof updateSelectedVariantAction>\r\n    | ReturnType<typeof updateExteriorAction>\r\n    | ReturnType<typeof updateSelectedExteriorAction>\r\n    | ReturnType<typeof updateInteriorAction>\r\n    | ReturnType<typeof updateSelectedInteriorAction>\r\n    | ReturnType<typeof updateOptionsAction>\r\n    | ReturnType<typeof clearVehicleAction>;\r\n\r\nexport const vehicleReducer = (\r\n    state = vehicleHelper.getInitVehicleStore(),\r\n    action: VehicleActions,\r\n) => {\r\n    switch (action.type) {\r\n        case UPDATE_VARIANT: {\r\n            return {\r\n                ...state,\r\n                VariantList: action.variantList,\r\n                SelectedVariant: action.selectedVariant,\r\n                //Loading: true,\r\n            }\r\n        }\r\n        case UPDATE_SELECTEDVARIANT: {\r\n            return {\r\n                ...state,\r\n                SelectedVariant: action.selectedVariant,\r\n            }\r\n        }\r\n\r\n        case UPDATE_EXTERIOR: {\r\n            return {\r\n                ...state,\r\n                ExteriorList: action.exteriorList,\r\n                SelectedExterior: action.selectedExterior,\r\n            }\r\n        }\r\n        case UPDATE_SELECTEDEXTERIOR: {\r\n            return {\r\n                ...state,\r\n                SelectedExterior: action.selectedExterior,\r\n            }\r\n        }\r\n\r\n        case UPDATE_INTERIOR: {\r\n            return {\r\n                ...state,\r\n                InteriorList: action.interiorList,\r\n                SelectedInterior: action.selectedInterior,\r\n            }\r\n        }\r\n        case UPDATE_SELECTEDINTERIOR: {\r\n            return {\r\n                ...state,\r\n                SelectedInterior: action.selectedInterior,\r\n            }\r\n        }\r\n\r\n        case UPDATE_OPTIONS: {\r\n            return {\r\n                ...state,\r\n                Accessories: action.accessories,\r\n                Charging: action.chargingList,\r\n                //Loading: false,\r\n            }\r\n        }\r\n\r\n        //case SET_LOADING: {\r\n        //    return {\r\n        //        ...state,\r\n        //        Loading: action.loading,\r\n        //    }\r\n        //}\r\n\r\n        case CLEAR_VEHICLE: {\r\n            return vehicleHelper.getInitVehicleStore();\r\n        }\r\n\r\n        default:\r\n            return state;\r\n    }\r\n};","//provide data to this store for below scenario\r\n//1. when user click \"Order\" button on Inventory page. The link is http://localhost:3000/cadillac/?selectedVariant=LYRIQ%20SPORT%20AWD&selectedExterior=Black&selectedInterior=White\r\n//2. when user is come from interest link in the email.\r\nimport * as defaultConfigModel from 'model/IDefaultConfig';\r\nimport * as defaultConfigHelper from 'businessHelpers/DefaultConfigHelper';\r\n\r\nexport const SET_DEFAULTCONFIG = 'setDefaultConfig';\r\nexport const setDefaultConfigAction = (defaultConfig: defaultConfigModel.IDefaultConfig) =>\r\n({\r\n    type: SET_DEFAULTCONFIG,\r\n    defaultConfig,\r\n} as const);\r\n\r\nexport const SET_DEFAULTCONFIGLOADED = 'setDefaultConfigLoaded';\r\nexport const setDefaultConfigLoadedAction = (loaded: boolean | null) =>\r\n({\r\n    type: SET_DEFAULTCONFIGLOADED,\r\n    loaded,\r\n} as const);\r\n\r\nexport type DefaultConfigActions = ReturnType<typeof setDefaultConfigAction>\r\n    | ReturnType<typeof setDefaultConfigLoadedAction>;\r\n\r\n\r\nexport const defaultConfigReducer = (\r\n    state = defaultConfigHelper.getInitDefaultConfig(),\r\n    action: DefaultConfigActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_DEFAULTCONFIG: {\r\n            return action.defaultConfig;\r\n        }\r\n\r\n        case SET_DEFAULTCONFIGLOADED: {\r\n            return {\r\n                ...state,\r\n                Loaded: action.loaded\r\n            }\r\n        }\r\n\r\n        default:\r\n            return state;\r\n    }\r\n};","import * as countryStateModel from \"model/ICountryStateList\";\r\n\r\nexport const SET_COUNTRYSTATES = 'SET_COUNTRYSTATES';\r\nexport const setCountryStatesAction = (countryStates: countryStateModel.ICountryStates[]) =>\r\n({\r\n    type: SET_COUNTRYSTATES,\r\n    countryStates,\r\n} as const);\r\n\r\n\r\ntype CountryStatesActions =\r\n    | ReturnType<typeof setCountryStatesAction>;\r\n\r\nexport const countryStatesReducer = (\r\n    state = <any>null,\r\n    action: CountryStatesActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_COUNTRYSTATES: {\r\n            return action.countryStates;\r\n        }\r\n    }\r\n\r\n    return state;\r\n};\r\n","export const SET_LINKSOURCE = 'SET_LINKSOURCE';\r\nexport const setLinkSourceAction = (source: any) =>\r\n({\r\n    type: SET_LINKSOURCE,\r\n    source,\r\n} as const);\r\n\r\n\r\ntype LinkSourceActions =\r\n    | ReturnType<typeof setLinkSourceAction>;\r\n\r\nexport const linkSourceReducer = (\r\n    state = <any>null,\r\n    action: LinkSourceActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_LINKSOURCE: {\r\n            return action.source;\r\n        }\r\n    }\r\n\r\n    return state;\r\n};\r\n","export const SET_ORDERDETAILPAGEDATAVERSION = 'Set_OrderDetailPageDataVersion';\r\nexport const setOrderDetailPageDataVersionAction = () =>\r\n({\r\n    type: SET_ORDERDETAILPAGEDATAVERSION,\r\n} as const);\r\n\r\nexport const Clear_ORDERDETAILPAGEDATAVERSION = 'Clear_OrderDetailPageDataVersion';\r\nexport const clearOrderDetailPageDataVersionAction = () =>\r\n({\r\n    type: Clear_ORDERDETAILPAGEDATAVERSION,\r\n} as const);\r\n\r\ntype OrderDetailPageVersionActions =\r\n    | ReturnType<typeof setOrderDetailPageDataVersionAction>\r\n    | ReturnType<typeof clearOrderDetailPageDataVersionAction>;\r\n\r\nexport const orderDetailPageDataVersionReducer = (\r\n    state = 0,\r\n    action: OrderDetailPageVersionActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_ORDERDETAILPAGEDATAVERSION: {\r\n            return state + 1;\r\n        }\r\n        case Clear_ORDERDETAILPAGEDATAVERSION: {\r\n            return 0;\r\n        }\r\n    }\r\n\r\n    return state;\r\n};\r\n","import * as docModel from 'model/IDocuments';\r\n\r\nexport const SET_ORDERDOCUMENTS = 'setOrderDocuments';\r\nexport const setOrderDocumentsAction = (docs: docModel.IDocumentItem[] | null) =>\r\n({\r\n    type: SET_ORDERDOCUMENTS,\r\n    docs,\r\n} as const);\r\n\r\nexport const CLEAR_ORDERDOCUMENTS = 'clearOrderDocuments';\r\nexport const clearOrderDocumentsAction = () =>\r\n({\r\n    type: CLEAR_ORDERDOCUMENTS\r\n} as const);\r\n\r\nexport type OrderDocumentsActions =\r\n    ReturnType<typeof setOrderDocumentsAction>\r\n    | ReturnType<typeof clearOrderDocumentsAction>;\r\n\r\nexport const orderDocuemntsReducer = (\r\n    state: docModel.IDocumentItem[] | null  = null,\r\n    action: OrderDocumentsActions\r\n): docModel.IDocumentItem[] | null => {\r\n    switch (action.type) {\r\n        case CLEAR_ORDERDOCUMENTS: {\r\n            return null;\r\n        }\r\n        case SET_ORDERDOCUMENTS: {\r\n            return action.docs;\r\n        }\r\n        //default:\r\n        //    return state;\r\n    }\r\n    return state;\r\n};","import { includes, isNil } from 'lodash';\r\n\r\nexport const getSessionStorageKey = (key: any) =>\r\n    `${key}`;\r\n\r\nexport const loadState = () => {\r\n    try {\r\n        const serializedState = localStorage.getItem(getSessionStorageKey('state'));\r\n        if (serializedState === null) {\r\n            return undefined;\r\n        }\r\n        return JSON.parse(serializedState);\r\n    } catch (err) {\r\n        return undefined;\r\n    }\r\n};\r\n\r\nexport const saveState = (state: any) => {\r\n    try {\r\n        const serializedState = JSON.stringify(state);\r\n        localStorage.setItem(getSessionStorageKey('state'), serializedState);\r\n    } catch (err) {\r\n        // ignore write error\r\n        //throw new Error(\"Can't save changes in local storage\");\r\n    }\r\n};\r\n\r\nexport const clearStorageOnDeployment = (\r\n    newVersion: number,\r\n) => {\r\n    let storeData = loadState();\r\n    console.log(storeData);\r\n\r\n    //let oldVersions = localStorage.getItem(getSessionStorageKey('storageVersion'));\r\n    //if (isNil(oldVersions)) {\r\n    //    localStorage.clear();\r\n    //    localStorage.setItem(getSessionStorageKey('storageVersion'), newVersion.toString());\r\n    //}\r\n    //else {\r\n    //    let numOlderVersion = parseInt(oldVersions) || 0;\r\n    //    if (numOlderVersion < newVersion) {\r\n    //        localStorage.clear();\r\n    //        localStorage.setItem(getSessionStorageKey('storageVersion'), newVersion.toString());\r\n    //    }\r\n    //    else {\r\n    //        let storeData = loadState();\r\n    //        console.log(storeData);\r\n\r\n    //    }\r\n    //}\r\n};\r\n\r\n","import { IScrollBarDisplay } from \"helpers/interface\";\r\n\r\nexport const SET_SCROLLBAR_DISPLAY = 'SetScrollbarDisplay';\r\nexport const checkIsShowScrollBar = (isShowScrollBar: boolean) =>\r\n    ({\r\n        type: SET_SCROLLBAR_DISPLAY,\r\n        isShowScrollBar\r\n    } as const);\r\n    \r\n    export type IsShowScrollBarActions = ReturnType<typeof checkIsShowScrollBar>;\r\n    export const initIsShowScrollBarState: IScrollBarDisplay = {\r\n        isShowScrollBar: true\r\n    }\r\n    \r\n    export const isShowScrollBarReducer = (\r\n        state = initIsShowScrollBarState,\r\n        action: IsShowScrollBarActions,\r\n    ) => {\r\n        switch (action.type) {\r\n            case SET_SCROLLBAR_DISPLAY: {\r\n                return {\r\n                    ...state,\r\n                    isShowScrollBar: action.isShowScrollBar,\r\n                };\r\n            }\r\n            default:\r\n            return state;\r\n        }\r\n    };","//This stores Main Page's page number, page 1 is variant, exterior, interior etc. While page 2 is checkout pagement page\r\nimport { IMainPageNumber } from \"helpers/interface\";\r\n\r\nexport const SET_MAIN_PAGE_NUMBER = 'showMainPageNumber';\r\nexport const setMainPageNumber = (mainPageNumber: number) =>\r\n({\r\n    type: SET_MAIN_PAGE_NUMBER,\r\n    mainPageNumber\r\n} as const);\r\n\r\nexport type MainPageNumberActions = ReturnType<typeof setMainPageNumber>;\r\nexport const initMMainPageNumberState: IMainPageNumber = {\r\n    mainPageNumber: 0\r\n}\r\n\r\nexport const mainPageNumberReducer = (\r\n    state = initMMainPageNumberState,\r\n    action: MainPageNumberActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_MAIN_PAGE_NUMBER: {\r\n            return {\r\n                ...state,\r\n                mainPageNumber: action.mainPageNumber,\r\n            };\r\n        }\r\n        default:\r\n        return state;\r\n    }\r\n};\r\n","import { IGlobalDropdown } from \"helpers/interface\";\r\n\r\nexport const SET_GLOBAL_DROPDOWN = 'setGlobalDropdown';\r\nexport const setGlobalDropdown = (vehicles: boolean, shop: boolean) =>\r\n({\r\n    type: SET_GLOBAL_DROPDOWN,\r\n    vehicles,\r\n    shop,\r\n} as const);\r\n\r\nexport type GlobalDropdownActions = ReturnType<typeof setGlobalDropdown>;\r\nexport const initGlobalDropdownState: IGlobalDropdown = {\r\n    vehicles: false,\r\n    shop: false\r\n}\r\n\r\nexport const globalDropdownReducer = (\r\n    state = initGlobalDropdownState,\r\n    action: GlobalDropdownActions,\r\n) => {\r\n    switch (action.type) {\r\n        case SET_GLOBAL_DROPDOWN: {\r\n            return {\r\n                ...state,\r\n                vehicles: action.vehicles,\r\n                shop: action.shop\r\n            };\r\n        }\r\n        default:\r\n        return state;\r\n    }\r\n};","import { Store, createStore, combineReducers, applyMiddleware, compose, AnyAction } from 'redux';\r\nimport { sessionReducer, countryStateReducer } from \"stores/Session\";\r\nimport { customerTypeReducer } from \"stores/CustomerType\";\r\nimport { scrollPositionReducer } from 'stores/ScrollPosition';\r\nimport { mainSectionReducer } from 'stores/ScrollPosition';\r\nimport { mainRightPageReducer } from 'stores/MainRightPage'\r\nimport { selectedDeliveryReducer } from 'stores/UserSelectedDelivery';\r\nimport { selectedVehicleReducer } from 'stores/UserSelectedVehicleConfig';\r\nimport { paymentOptionsReducer } from 'stores/PaymentOptions';\r\nimport { checkoutCustomerReducer } from 'stores/CheckoutCustomer';\r\nimport { orderCustomerDetailsReducer } from 'stores/OrderCustomerDetails';\r\nimport { orderDetailsReducer } from 'stores/OrderDetails';\r\nimport { orderScheduleDeliveryReducer } from 'stores/OrderScheduleDelivery';\r\nimport { vehicleReducer } from 'stores/Vehicle';\r\nimport { defaultConfigReducer } from 'stores/DefaultConfig';\r\nimport { countryStatesReducer } from 'stores/CountryStateList';\r\nimport { linkSourceReducer } from 'stores/LinkSource';\r\nimport { orderDetailPageDataVersionReducer } from 'stores/OrderDetailPageDataVersion';\r\nimport { orderDocuemntsReducer } from 'stores/OrderDocuments';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as docModel from 'model/IDocuments';\r\n\r\nimport {\r\n    loadState,\r\n    saveState,\r\n    clearStorageOnDeployment,\r\n} from 'services/localStorage';\r\n\r\n\r\nimport _ from 'lodash';\r\nimport { isShowScrollBarReducer } from './ScrollBarDisplay';\r\nimport { mainPageNumberReducer } from './MainPageNumber';\r\nimport { globalDropdownReducer } from './GlobalDropdown';\r\n\r\n\r\n//store interface\r\nconst appReducer = combineReducers<IAppState>({\r\n    session: sessionReducer,\r\n    countryInfo: countryStateReducer,\r\n    scrollPosition: scrollPositionReducer,\r\n    isShowScrollBar: isShowScrollBarReducer,\r\n    mainSection: mainSectionReducer,\r\n    mainPageNumber: mainPageNumberReducer,\r\n    customerType: customerTypeReducer,\r\n    mainRightPage: mainRightPageReducer,\r\n    globalDropdown: globalDropdownReducer,\r\n    selectedDelivery: selectedDeliveryReducer,\r\n    selectedVehicle: selectedVehicleReducer,\r\n    paymentOptions: paymentOptionsReducer,\r\n    checkoutCustomer: checkoutCustomerReducer,\r\n    orderCustomerDetails: orderCustomerDetailsReducer,\r\n    orderDetails: orderDetailsReducer,\r\n    orderScheduleDelivery: orderScheduleDeliveryReducer,\r\n    orderDocuments: orderDocuemntsReducer,\r\n    vehicle: vehicleReducer,\r\n    defautConfig: defaultConfigReducer,\r\n    countryStateList: countryStatesReducer,\r\n    linkSource: linkSourceReducer,\r\n    orderDetailDataVersion: orderDetailPageDataVersionReducer,\r\n});\r\n\r\nexport const LOGOUT_CLEAR = 'logout_clear';\r\nexport const logoutClearAction = (updatedState: IAppState) =>\r\n({\r\n    type: LOGOUT_CLEAR,\r\n    updatedState\r\n} as const);\r\ntype ClearActions = ReturnType<typeof logoutClearAction>;\r\nexport const rootReducer = (\r\n    state: any,\r\n    action: AnyAction | ClearActions\r\n) => {\r\n    if (action.type === LOGOUT_CLEAR) {\r\n        return appReducer(action.updatedState, { type: undefined });\r\n    }\r\n\r\n    return appReducer(state, action);\r\n};\r\n\r\nexport function configureStore(): Store<IAppState> {\r\n    // if no localStorage\r\n    //console.log(\"store\")\r\n    //clearStorageOnDeployment(5);\r\n\r\n    const url = window.location.href;\r\n    if (url.includes(\"/inventory\") || url.includes(\"/test-drive\")\r\n        || url.includes(\"/my-orders\") || url.includes(\"/profile\") || url.includes(\"/privacy\") || url.includes(\"/auth\")) {\r\n        clearStorageOnDeployment(6);\r\n\r\n        localStorage.setItem(\"paymentID\", \"\");\r\n        localStorage.setItem(\"order\", \"\");\r\n        localStorage.setItem(\"billing\", \"\");\r\n    }\r\n    else {\r\n        localStorage.clear();\r\n    }\r\n\r\n    \r\n\r\n    const persistedState = loadState();\r\n    const store = createStore(rootReducer,\r\n        persistedState,\r\n        (window as any).__REDUX_DEVTOOLS_EXTENSION__ && (window as any).__REDUX_DEVTOOLS_EXTENSION__());\r\n\r\n    store.subscribe(\r\n        _.throttle(() => {\r\n            saveState(store.getState());\r\n        }, 100),\r\n    );\r\n\r\n    return store;\r\n}\r\n","import * as selectedConfigModel from 'model/IUserSelectedConfig';\r\n\r\nexport const getInitSelectedDelivery = (): selectedConfigModel.ISelectedDelivery => {\r\n    let initSelectedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n        Country: null,\r\n        State: null,\r\n        SelectedPickupLocation: null,\r\n        SelectedDeliveryOption: null,\r\n        SelectedDeliveryFullAddress: null,\r\n        SelectedDeliveryPostcode: null,\r\n        SelectedDeliveryState: null,\r\n        SelectedDeliverySuburb: null,\r\n        PrimaryAddress: null,\r\n        PrimaryPostcode: null,\r\n        PrimarySuburb: null,\r\n        PrimaryState: null,\r\n        InvalidPrimaryAddress: null,\r\n        DeliveryAvailable: null,\r\n        DeliveryPrice: null,\r\n        DeliveryPriceErrorCode: null,\r\n        DeliveryDistance: null,\r\n        PickupLocationName: null,\r\n    };\r\n\r\n    return initSelectedDelivery;\r\n}\r\n\r\n","import * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nexport const getInitScheduleDelivery = (): scheduleDeliveryModel.IOrderScheduleDelivery => {\r\n    let init: scheduleDeliveryModel.IOrderScheduleDelivery = {\r\n        YanaOrderID: null,\r\n        YanaOrderNo: null,\r\n        YanaCustomerID: null,\r\n        YanaCustomerNo: null,\r\n        DeliveryLocationState: null,\r\n        DeliveryLocationSuburb: null,\r\n        DeliveryLocationPostcode: null,\r\n        DeliveryLocationAddress: null,\r\n        DeliveryOption: null,\r\n        DeliveryDate: undefined,\r\n        DeliveryFormatDate: null,\r\n        DeliveryTime: null,\r\n        Country: null,\r\n        PickupLocationName: null,\r\n        Available: null\r\n    };\r\n\r\n    return init;\r\n}","import * as variantModel from 'model/IVehicle';\r\n\r\n\r\nexport const getInitVehicleStore = (): variantModel.IVehicleStore => {\r\n    let init: variantModel.IVehicleStore = {\r\n        //Loading: false,\r\n        VariantList: [],\r\n        SelectedVariant: null,\r\n        ExteriorList: [],\r\n        SelectedExterior: null,\r\n        InteriorList: null,\r\n        SelectedInterior: null,\r\n        Accessories: [],\r\n        Charging: [],\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\n\r\nexport const getInitExterior = (): variantModel.IExterior => {\r\n    let init: variantModel.IExterior = {\r\n        Country: null,\r\n        VariantID: null,\r\n        VariantName: null,\r\n        ExteriorID: null,\r\n        ExteriorColorName: null,\r\n        ExteriorColorDescTitle: null,\r\n        ExteriorColorDesc: null,\r\n        ExteriorPrice: null,\r\n        ExteriorPicture: [],\r\n        ExteriorPictureMobile: [],\r\n        ExteriorFilterImage: null,\r\n        ExteriorFilterMobile: null,\r\n        IsDefault: null,\r\n        HasStock: null,\r\n        ExteriorOrderingNo: 0,\r\n    };\r\n\r\n    return init;\r\n}","import * as defaultConfigModel from 'model/IDefaultConfig';\r\n\r\nexport const getInitDefaultConfig = (): defaultConfigModel.IDefaultConfig => {\r\n    let init: defaultConfigModel.IDefaultConfig = {\r\n        Country: null,\r\n        State: null,\r\n        VariantName: null,\r\n        ExteriorName: null,\r\n        InteriorName: null,\r\n        Options: [],\r\n        Loaded: false,\r\n        LinkKey: null,\r\n        ExpiryDateText: null,\r\n    };\r\n    return init;\r\n}","import moment from 'moment';\r\nimport { isNil } from 'lodash';\r\nimport { ICodeName } from 'model/ICommon';\r\nimport { enumCountryCode, enumRDErrorCode } from 'helpers/enum';\r\n\r\nexport const getBackendOrigin = () => {\r\n    return `${process.env.REACT_APP_BACKEND_ORIGIN}`;\r\n};\r\n\r\nexport const getBackendVirtualDir = () => {\r\n    return process.env.REACT_APP_VIRTUAL_DIR_BACKEND;\r\n};\r\n\r\nexport const getBackendPath = () => {\r\n    return `${process.env.REACT_APP_BACKEND_ORIGIN}/${process.env.REACT_APP_VIRTUAL_DIR_BACKEND}`;\r\n};\r\n\r\nexport const getFrontendOrigin = () => {\r\n    return `${process.env.REACT_APP_FRONTEND_ORIGIN}`;\r\n};\r\n\r\nexport const getFrontendUrl = () => {\r\n    let virtualDir = process.env.REACT_APP_VIRTUAL_DIR_FRONTEND;\r\n    if (virtualDir != \"\") {\r\n        return `/${process.env.REACT_APP_VIRTUAL_DIR_FRONTEND}`;\r\n        //return `${process.env.REACT_APP_FRONTEND_ORIGIN}/${process.env.REACT_APP_CMS_VIRTUAL_DIR}`;\r\n    }\r\n    else {\r\n        return ``;\r\n    }\r\n};\r\n\r\n\r\nexport const getFrontendUrlWithSlash = () => {\r\n    let virtualDir = process.env.REACT_APP_VIRTUAL_DIR_FRONTEND;\r\n    if (virtualDir != \"\") {\r\n        return `/${process.env.REACT_APP_VIRTUAL_DIR_FRONTEND}`;\r\n    }\r\n    else {\r\n        return `/`;\r\n    }\r\n};\r\n\r\n\r\n\r\n\r\nexport const getCMSAssets = () => {\r\n    let virtualDir = process.env.REACT_APP_CMS_VIRTUAL_DIR;\r\n    if (virtualDir != \"\") {\r\n        return `${process.env.REACT_APP_FRONTEND_ORIGIN}/${process.env.REACT_APP_CMS_VIRTUAL_DIR}/cms`;\r\n    }\r\n    else {\r\n        return `${process.env.REACT_APP_FRONTEND_ORIGIN}/cms`;\r\n    }\r\n};\r\n\r\n//export const getOnlineCatalogueName = () => {\r\n//    return `${process.env.REACT_APP_ONLINE_CATALOGUE_NAME}`;\r\n//};\r\n\r\n//export const getImgURL = () => {\r\n//    return `${process.env.REACT_APP_IMAGE_URL}`;\r\n//};\r\n\r\n\r\n//export const getPMPURL = () => {\r\n//    return `${process.env.REACT_APP_PMP_URL}`;\r\n//};\r\n\r\n//export const getPublicURL = () => {\r\n//    return `${process.env.PUBLIC_URL}`;\r\n//};\r\n\r\n//export const getLanguageBackendPath = () => {\r\n//    return `${process.env.REACT_APP_LANGUAGE_API}`;\r\n//};\r\n\r\n//export const getLanguage = () => {\r\n//    return `${process.env.REACT_APP_LANGUAGE}`;\r\n//};\r\n\r\n\r\nexport const getCountry = () => {\r\n    return `${process.env.REACT_APP_COUNTRY}`;\r\n};\r\n\r\n\r\nexport const getGoogleMapAPIKey = () => {\r\n    return `${process.env.REACT_APP_GOOGLEMAP_APIKEY}`;\r\n};\r\n\r\nexport const getRDGoogleAnalyticsMeasureID = () => {\r\n    return `${process.env.REACT_APP_RD_GOOGLE_ANALYTICS}`;\r\n};\r\n\r\n\r\nexport const getAdyenEnv = (country: any) => {\r\n    let env = `${process.env.REACT_APP_AdyenEnv}`;\r\n    if (env == \"test\") {\r\n        return env;\r\n    }\r\n    if (country == \"NZ\") {\r\n        return \"live-au\";\r\n    }\r\n    return \"live-au\";\r\n};\r\n\r\nexport const getAdyenKey = (country: string) => {\r\n    if (country == enumCountryCode.Australia) {\r\n        return `${process.env.REACT_APP_Adyen}`;\r\n    }\r\n    else if (country == enumCountryCode.NewZealand) {\r\n        return `${process.env.REACT_APP_AdyenNZ}`;\r\n    }\r\n};\r\n\r\nexport const getShareLink = (webUniqueKey: string) => {\r\n    return `${process.env.REACT_APP_ShareLink}${webUniqueKey}`;\r\n};\r\n\r\nexport const checkBookingTimeout = (bookingStoreLastUpdateTime: Date | null) => {\r\n    if (!isNil(bookingStoreLastUpdateTime) && moment(bookingStoreLastUpdateTime).add(30, \"minutes\") < moment(new Date())) {\r\n        return true;\r\n    }\r\n    return false;\r\n}\r\n\r\nexport const getImageFileNameByID2 = (imageList: any, id2: string) => {\r\n    if (!isNil(imageList)) {\r\n        let findImage = imageList.find((m: any) => m.id2 == id2);\r\n        if (!isNil(findImage)) {\r\n            return findImage.fileName\r\n        }\r\n    }\r\n    return null;\r\n}\r\n\r\nexport const getImageLinkByID2 = (screenName: string, imageList: any, id2: string) => {\r\n\r\n    return `${getCMSAssets()}/${screenName}/${getImageFileNameByID2(imageList, id2)}`;\r\n}\r\n\r\nexport const getMobileImageLinkByID2 = (screenName: string, imageList: any, id2: string) => {\r\n    return `${getCMSAssets()}/${screenName}/${\"m-\" + getImageFileNameByID2(imageList, id2)}`;\r\n}\r\n\r\nexport const getServiceUrlPara = (id2: string, index: number, value: string) => {\r\n    let urlPara = id2.replace(\"-\" + value, \"\");\r\n    return urlPara;\r\n}\r\n\r\n\r\nexport const getSelectState = (stateList: ICodeName[], selectedStateCode: string): ICodeName | null => {\r\n    let findState = stateList.find(m => m.code == selectedStateCode);\r\n    if (isNil(findState)) {\r\n        return null;\r\n    }\r\n    return findState;\r\n}\r\n\r\nexport interface IPageLanguageState {\r\n    LanguageScreenName: string;\r\n    LanguageResourceLoad: boolean | null;\r\n}\r\n\r\nexport interface IImagesState {\r\n    imageLoaded: boolean,\r\n    imageList: any\r\n}\r\n\r\nexport interface IPDFState {\r\n    pageName: string,\r\n    pdfList: Array<object>\r\n}\r\n\r\nexport const currencyFormat = (value: number | null) => {\r\n    let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n\r\n    if (isNil(value))\r\n        return \"\";\r\n    if (value == 0)\r\n        return \"included\"\r\n    return \"+ \" + currencyFormatter.format(value);\r\n}\r\n\r\nexport const currencyFormatCharging = (value: number | null, name: string | null, checked: boolean) => {\r\n    let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n    if (isNil(value))\r\n        return \"\";\r\n    if (value == 0 \r\n        // && name?.includes('Home Charger') \r\n        && checked)\r\n        return \"Included\"\r\n    if (value == 0)\r\n        return \"Available to select\"\r\n    return \"+ \" + currencyFormatter.format(value);\r\n}\r\n\r\nexport const currencyPlainFormat = (value: number | null) => {\r\n    let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n    if (isNil(value))\r\n        return \"0\";\r\n\r\n    return currencyFormatter.format(value);\r\n}\r\n\r\n\r\nexport const currencyFormatWithIncluded = (value: number | null) => {\r\n    let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n\r\n    if (isNil(value) || value == 0)\r\n        return \"included\"\r\n    return currencyFormatter.format(value);\r\n}\r\n\r\n\r\n\r\nexport const currencyFormatWithBlank = (value: number | null) => {\r\n    let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n\r\n    if (isNil(value))\r\n        return \"\";\r\n    return currencyFormatter.format(value);\r\n}\r\n\r\n\r\nexport const currencyFormatWithZeroBlank = (value: number | null) => {\r\n    let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n\r\n    if (isNil(value) || value == 0)\r\n        return \"\";\r\n    return currencyFormatter.format(value);\r\n}\r\n\r\n\r\nexport const validateEmail = (email: string) => {\r\n    const regex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\r\n    return regex.test(email);\r\n};\r\n\r\nexport const getFullAddress = (address: any, suburb: any, state: any, postcode: any) => {\r\n    return address + \", \" + suburb + \" \" + state + \" \" + postcode;\r\n}\r\n\r\n\r\nexport const noActivityRedirectHomePage = (resposne: any) => {\r\n    if (resposne.errorCode == enumRDErrorCode.NoActivity) {\r\n        let url = getFrontendOrigin();\r\n        window.location.href = url;\r\n    }\r\n}\r\n\r\n//declare global {\r\n//    interface Window {\r\n//        dataLayer: any[];\r\n//    }\r\n//}\r\n//export const pushToDataLayer = (data: object): void => {\r\n//    // Check if the dataLayer exists on the window object\r\n//    if (window.dataLayer) {\r\n//        window.dataLayer.push(data);\r\n//    } else {\r\n//        // If dataLayer doesn't exist, initialize it and push the event\r\n//        window.dataLayer = [data];\r\n//    }\r\n//};","import { getBackendPath } from 'helpers/Uri';\r\nimport * as paymentOptionsModel from 'model/IPaymentOptions';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const getDriveAwayCost = async (\r\n    request: paymentOptionsModel.IDriveAwayRequest,\r\n    abortSignal?: any,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(request),\r\n        credentials: 'include',\r\n        signal: abortSignal,\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/PaymentOptions/get-driveaway-cost`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getFinanceFilter = async (\r\n    request: paymentOptionsModel.IFinanceFilterRequest,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(request),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/PaymentOptions/get-finance-filters`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getFinanceTermOptions = async (\r\n    country: string\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            Country: country\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/PaymentOptions/get-finance-terms`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getFinanceBallonOptions = async (\r\n    country: string,\r\n    termOptionID: number\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            Country: country,\r\n            TermOptionID: termOptionID\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/PaymentOptions/get-finance-balloonoptions`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getFrequency = async (\r\n    country: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            Country: country,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/PaymentOptions/get-frequency`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const calculateFinance = async (\r\n    request: paymentOptionsModel.IFinanceRequest,\r\n    abortSignal?: any,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(request),\r\n        credentials: 'include',\r\n        signal: abortSignal,\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/PaymentOptions/calculate-finance`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import { getBackendPath } from 'helpers/Uri';\r\n\r\nexport const getCountryAndState = async (): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({}),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/CountryState/get-country-and-state`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n","import { useDispatch, useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { ICodeName } from 'model/ICommon';\r\nimport * as countryStateModel from \"model/ICountryStateList\";\r\nimport { isNil } from 'lodash';\r\nimport { getCountryAndState } from 'services/CountryState';\r\nimport * as countryStateStore from 'stores/CountryStateList';\r\nimport { useEffect, useState } from \"react\";\r\nimport * as rdEnum from 'helpers/enum';\r\n\r\nexport const useCountryState = () => {\r\n    const dispatch = useDispatch();\r\n\r\n    const countryAndStates = useSelector((state: IAppState) => {\r\n        return state.countryStateList;\r\n    });\r\n\r\n    const doGetCountryAndState = async (): Promise<countryStateModel.ICountryStates[]> => {\r\n        let dataInStore: countryStateModel.ICountryStates[] = [];\r\n        let response = await getCountryAndState();\r\n        if (response.status) {\r\n           \r\n            let countryListState: ICodeName[] = [];\r\n            if (!isNil(response.data) && response.data.length > 0) {\r\n                response.data.map((itemData: any) => {\r\n                    let states: ICodeName[] = [];\r\n                    if (!isNil(itemData.state) && itemData.state.length > 0) {\r\n                        itemData.state.map((stateData: any) => {\r\n                            states.push({\r\n                                name: stateData,\r\n                                code: stateData,\r\n                            });\r\n                        });\r\n                    }\r\n                    else {\r\n                        states = rdEnum.constStateList;   //if api does not return any states, use hardcode states\r\n                    }\r\n                    let countryName = itemData.country == \"AU\" ? \"Australia\" : \"New Zealand\";\r\n                    dataInStore.push({\r\n                        Country: {\r\n                            name: countryName,\r\n                            code: itemData.country\r\n                        },\r\n                        State: states,\r\n                    });\r\n\r\n                    countryListState.push({\r\n                        name: countryName,\r\n                        code: itemData.country\r\n                    });\r\n                });\r\n\r\n            }\r\n            //setCountry(countryListState);\r\n            dispatch(countryStateStore.setCountryStatesAction(dataInStore));\r\n        }\r\n        return dataInStore;\r\n\r\n    }\r\n\r\n\r\n    const getCountry = async() => {\r\n        let returnCountry: ICodeName[] = [];\r\n        if (isNil(countryAndStates) || countryAndStates.length == 0) {\r\n            let allCountryAndStates= await doGetCountryAndState();\r\n            if (!isNil(allCountryAndStates) && allCountryAndStates.length > 0) {\r\n                allCountryAndStates.map((item: countryStateModel.ICountryStates) => {\r\n                    returnCountry.push(item.Country);\r\n                });\r\n            }\r\n\r\n        }\r\n        else {\r\n            countryAndStates.map((item: countryStateModel.ICountryStates) => {\r\n                returnCountry.push(item.Country);\r\n            });\r\n        }\r\n        return returnCountry;\r\n    }\r\n\r\n    const getStates = async(countryCode: string) => {\r\n        let stateList: ICodeName[] = [];\r\n        if (!isNil(countryAndStates)) {\r\n            let findCountry = countryAndStates.find(m => m.Country.code == countryCode);\r\n\r\n            if (findCountry != null) {\r\n                return findCountry.State || [];\r\n            }\r\n        }\r\n        //else {\r\n        /// do not add below code back as it could be called multiple times\r\n        //    let allCountryAndStates = await doGetCountryAndState();\r\n        //    let findCountry = allCountryAndStates.find(m => m.Country.code == countryCode);\r\n\r\n        //    if (findCountry != null) {\r\n        //        return findCountry.State || [];\r\n        //    }\r\n        //}\r\n        return stateList;\r\n    }\r\n\r\n    return {\r\n        getCountry,\r\n        getStates\r\n    };\r\n}\r\n","import { Dialog } from 'primereact/dialog';\r\nimport { Dropdown, DropdownProps } from 'primereact/dropdown'\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { InputNumber } from 'primereact/inputnumber';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport React, { forwardRef, useEffect, useImperativeHandle, useState, useRef } from 'react'\r\nimport { Accordion, Button, Card, Col, Row, useAccordionButton } from 'react-bootstrap';\r\n\r\nimport { filter, includes, find, isNil } from 'lodash';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { ICodeName } from 'model/ICommon';\r\nimport { IAppState } from \"model/IAppState\";\r\nimport * as paymentOptionModel from 'model/IPaymentOptions';\r\nimport * as vehicleModel from 'model/IVehicle';\r\n//import * as selectConfigModel from 'model/IUserSelectedConfig';\r\nimport * as paymentOptionService from 'services/PaymentOptions';\r\nimport * as paymentOptionsStore from 'stores/PaymentOptions';\r\nimport * as financeHelper from 'businessHelpers/FinanceHelper';\r\nimport * as driveawayCostHelper from 'businessHelpers/DriveawayCostHelper';\r\nimport * as rdHelper from 'helpers/Uri';\r\nimport * as paymentOptionStore from 'stores/PaymentOptions';\r\nimport { getFrontendUrl, getCMSAssets } from 'helpers/Uri'\r\n\r\nimport { useCountryState } from 'helpers/useCountryState';\r\nimport { PaymentOptionsComponentProps } from 'model/IPaymentOptions';\r\n\r\n\r\nexport type ChildRef = {\r\n    openDialog: () => void;\r\n};\r\n\r\n\r\n\r\n//1. if this popup is showed on landing page, subtotal, est delivery date, variant should be from landing page api result\r\n//2. if this popup is showed on configuration page, subtotal, est delivery date, variant should be from store\r\nconst PaymentOptions = forwardRef<ChildRef, PaymentOptionsComponentProps>((props, ref) => {\r\n    //let isMounted = useRef<boolean>();\r\n    const dispatch = useDispatch();\r\n    const countryState = useCountryState();\r\n\r\n    const { isFromLandingPage, subTotal, estDeliveryDate,\r\n        variantName, variantID, variantPrice,\r\n        exteriorID, exteriorName, exteriorPrice,\r\n        interiorID, interiorName, interiorPrice,\r\n        options\r\n    } = props;\r\n\r\n\r\n\r\n    //store variables\r\n    const selectedLocationFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectVehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.selectedVehicle;\r\n    });\r\n    const vehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.vehicle;\r\n    });\r\n    const customerTypeFromStore = useSelector((appState: IAppState) => {\r\n        return appState.customerType;\r\n    });\r\n    const driveAwayCostFromStore = useSelector((appState: IAppState) => {\r\n        return appState.paymentOptions?.DriveAwayCost;\r\n    });\r\n    const paymentOptionsFromStore = useSelector((appState: IAppState) => {\r\n        return appState.paymentOptions;\r\n    });\r\n\r\n    //page states\r\n    const [isOpen, setIsOpen] = useState(false);\r\n    const [paymentOption, setPaymentOption] = useState('');\r\n    const [selectedState, setSelectedState] = useState<ICodeName | null>(null);\r\n    const [postCode, setPostcode] = useState<string | null>(null);\r\n    const [suburb, setSuburb] = useState<string | null>(null);\r\n    const [registrationType, setRegistrationType] = useState(rdEnum.enumClientTypes.Private);\r\n    //const [downPayment, setDownPayment] = useState('0');\r\n\r\n    const [driveawayCostRequest, setDriveawayCostRequest] = useState<paymentOptionModel.IDriveAwayRequest>(driveawayCostHelper.getInitDriveawayCostRequest());\r\n    const [driveAwayCost, setDriveAwayCost] = useState<paymentOptionModel.IDriveAwayCost>(driveawayCostHelper.getInitDriveawayCost());\r\n\r\n    const [states, setStates] = useState<ICodeName[]>([]);   //state dropdown list items\r\n\r\n    const abortControllerInitialValue: any = new (\r\n        window as any\r\n    ).AbortController();\r\n    const [costAbortController, setCostAbortController] = useState(\r\n        abortControllerInitialValue,\r\n    );\r\n\r\n    //finance states\r\n    const [financePageState, setFinancePageState] = useState<paymentOptionModel.IFinancePageState>(financeHelper.getInitFinancePageState());\r\n    const [financeRequest, setFinanceRequest] = useState<paymentOptionModel.IFinanceRequest>(financeHelper.getInitFinanceRequest());\r\n\r\n\r\n    const [termOptions, setTermOptions] = useState<paymentOptionModel.IFinanceFilter[]>();\r\n    const [selectedTermOptions, setSelectedTermOptions] = useState<paymentOptionModel.IFinanceFilter | null>();\r\n    const [balloonPaymentOptions, setBalloonPaymentOptions] = useState<paymentOptionModel.IFinanceFilter[]>();\r\n    const [selectedBalloonPaymentOptions, setSelectedBalloonPaymentOptions] = useState<paymentOptionModel.IFinanceFilter | null>();\r\n    const [frequencyOptions, setFrequencyOptions] = useState<paymentOptionModel.IFinanceFilter[]>();\r\n    const [selectedFrequencyOption, setSelectedFrequencyOptions] = useState<paymentOptionModel.IFinanceFilter | null>();\r\n\r\n\r\n    const initAbortCalculateFinanceValue: any = new (window as any).AbortController();\r\n    const [financeAbortController, setFinanceAbortController] = useState(initAbortCalculateFinanceValue);\r\n\r\n    const [cashActiveEventKey, setCashActiveKey] = useState(null);\r\n    const [financeActiveEventKey, setFinanceActiveKey] = useState(null);\r\n\r\n    const handleCashSelect = (eventKey: any) => {\r\n        setCashActiveKey(cashActiveEventKey === eventKey ? null : eventKey);\r\n    };\r\n\r\n    const handleFinanceSelect = (eventKey: any) => {\r\n        setFinanceActiveKey(financeActiveEventKey === eventKey ? null : eventKey);\r\n    };\r\n\r\n    useImperativeHandle(ref, () => ({\r\n        openDialog: () => {\r\n            setIsOpen(true);\r\n            document.body.style.overflowY = 'hidden';\r\n            document.body.style.paddingRight = '15px';\r\n        },\r\n    }));\r\n\r\n    const onHide = () => {\r\n        setIsOpen(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    };\r\n\r\n    const onStateChange = (e: any) => {\r\n        setSelectedState(e.value);\r\n        setPostcode(\"\");\r\n        setSuburb(\"\");\r\n    }\r\n\r\n    const toPrivacy = () => {\r\n        window.open('https://www.mtf.co.nz/privacy-statement/')\r\n    }\r\n\r\n    const toRatesFees = () => {\r\n        window.open('https://www.mtf.co.nz/resources/interest-rates-and-fees/')\r\n    }\r\n\r\n    //useEffect(() => {\r\n    //    setPaymentOption(paymentType);\r\n\r\n    //}, [paymentType]);\r\n\r\n    useEffect(() => {\r\n        if (isFromLandingPage) {\r\n            setPaymentOption(rdEnum.enumPaymentOptions.Finance);\r\n        }\r\n        else {\r\n            setPaymentOption(paymentOptionsFromStore?.PaymentOption || rdEnum.enumPaymentOptions.Cash);\r\n        }\r\n    }, [paymentOptionsFromStore.PaymentOption, isFromLandingPage, isOpen]);\r\n\r\n    useEffect(() => {\r\n        // console.log(\"isOpen:\" + isOpen);\r\n        //call drive away cost and calculate finance when open popup\r\n        if (isOpen) {\r\n            //doGetFinanceFilter();\r\n            buildDriveawayCostRequest();\r\n\r\n            buildFinanceRequest();\r\n        }\r\n    }, [isOpen,\r\n        selectedLocationFromStore.Country?.code,\r\n        selectedState,\r\n        variantID, exteriorID, ,\r\n        interiorID, options,\r\n        registrationType, customerTypeFromStore]);\r\n\r\n    useEffect(() => {\r\n        doGetDriveAwayCost();\r\n    }, [JSON.stringify(driveawayCostRequest)]);\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        if (customerTypeFromStore == rdEnum.enumClientTypes.Private.Code) {\r\n            setRegistrationType(rdEnum.enumClientTypes.Private);\r\n        }\r\n        else {\r\n            setRegistrationType(rdEnum.enumClientTypes.Business);\r\n        }\r\n    }, [customerTypeFromStore]);\r\n\r\n\r\n    useEffect(() => {\r\n        //set default state/postcode/suburb value\r\n        //if has not enter primary address, use the selected state on the 1st popup\r\n        //if has primary address, use primary address's state/suburb/postcode\r\n        let state = \"\";\r\n        let postcode = \"\";\r\n        let suburb = \"\";\r\n        if (!isNil(selectedLocationFromStore?.PrimaryAddress) && selectedLocationFromStore?.PrimaryAddress != \"\") {\r\n            state = selectedLocationFromStore.PrimaryState || \"\";\r\n            postcode = selectedLocationFromStore.PrimaryPostcode || \"\";\r\n            suburb = selectedLocationFromStore.PrimarySuburb || \"\";\r\n        }\r\n        else {\r\n            state = selectedLocationFromStore?.State?.code || \"\";\r\n        }\r\n        setSelectedState({ code: state, name: state });\r\n        setPostcode(postcode);\r\n        setSuburb(suburb);\r\n\r\n    }, [selectedLocationFromStore?.State, selectedLocationFromStore?.PrimaryAddress]);\r\n\r\n\r\n\r\n\r\n    //set states dropdown list\r\n    const doGetStates = async () => {\r\n        let states = await countryState.getStates(selectedLocationFromStore?.Country?.code || \"\");\r\n        setStates(states);\r\n    }\r\n    useEffect(() => {\r\n        doGetStates()\r\n    }, [selectedLocationFromStore?.Country?.code]);\r\n\r\n\r\n\r\n    const getRegistrationTypes = () => {\r\n        let types = [];\r\n        types.push(rdEnum.enumClientTypes.Private);\r\n        types.push(rdEnum.enumClientTypes.Business);\r\n        return types;\r\n    }\r\n\r\n\r\n    //const build\r\n    const buildDriveawayCostRequest = () => {\r\n        //if is pickup, distance is from pickup location\r\n        //if is delivery, distance is from DeliveryDistance\r\n        let distance = 0;\r\n        if (selectedLocationFromStore?.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            distance = selectedLocationFromStore?.SelectedPickupLocation?.Distance || 0;\r\n        }\r\n        else {\r\n            distance = selectedLocationFromStore?.DeliveryDistance || 0;\r\n        }\r\n\r\n        let pickupOption = selectedLocationFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup;\r\n        let requestData: paymentOptionModel.IDriveAwayRequest = {\r\n            Country: selectedLocationFromStore.Country?.code || \"\",\r\n            State: selectedState?.code || \"\",\r\n            VariantName: variantName,  //selectVehFromStore.VariableName || \"\",\r\n            VariantID: variantID,\r\n            VariantPrice: variantPrice,\r\n            ExteriorID: exteriorID,\r\n            ExteriorName: exteriorName,\r\n            ExteriorPrice: exteriorPrice,\r\n            InteriorID: interiorID,\r\n            InteriorName: interiorName,\r\n            InteriorPrice: interiorPrice,\r\n            Options: options,\r\n            SubTotal: subTotal,   //selectVehFromStore.Subtotal || 0,\r\n            DeliveryOption: selectedLocationFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup,\r\n            RegistrationType: registrationType.Code,\r\n            Distance: distance,\r\n            PostCode: postCode || \"\",\r\n            Suburb: suburb || \"\",\r\n            CallSource: \"PaymentOptions\",\r\n            IfCalculateFinance: false,\r\n            DeliveryPrice: (pickupOption == rdEnum.enumDeliveryOptions.HomeDelivery) ? selectedLocationFromStore?.DeliveryPrice : 0,\r\n        };\r\n\r\n        //from landing page\r\n        if (isFromLandingPage) {\r\n            requestData.DeliveryOption = rdEnum.enumDeliveryOptions.Pickup;\r\n            requestData.Distance = 0;\r\n            requestData.PostCode = \"\";\r\n            requestData.Suburb = \"\";\r\n        }\r\n        setDriveawayCostRequest(requestData);\r\n\r\n    }\r\n\r\n\r\n    const doGetDriveAwayCost = async () => {\r\n        const abortController = new (window as any).AbortController();\r\n        await setCostAbortController(abortController);\r\n\r\n        if (driveawayCostRequest.Country == \"\"\r\n            || (driveawayCostRequest.Country == rdEnum.enumCountryCode.Australia && driveawayCostRequest.State == \"\")\r\n            || isNil(driveawayCostRequest.VariantID) || driveawayCostRequest.VariantID == \"\"\r\n            || isNil(driveawayCostRequest.ExteriorID) || driveawayCostRequest.ExteriorID == \"\"\r\n            || isNil(driveawayCostRequest.InteriorID) || driveawayCostRequest.InteriorID == \"\"\r\n            || driveawayCostRequest.SubTotal == 0) return;\r\n\r\n        try {\r\n            let request = await paymentOptionService.getDriveAwayCost(driveawayCostRequest, abortController.signal);\r\n            if (request.status) {\r\n\r\n                let driveAwayCostDataFromBackend = request.data.driveawayCostData;\r\n                let driveAwayCostData: paymentOptionModel.IDriveAwayCost = {\r\n                    LuxuryCarTax: driveAwayCostDataFromBackend.luxuryCarTax,\r\n                    LocalStampDuty: driveAwayCostDataFromBackend.localStampDuty,\r\n                    LocalRegistrationCost: driveAwayCostDataFromBackend.localRegistrationCost,\r\n                    LocalCTP: driveAwayCostDataFromBackend.localCTP,\r\n                    LocalPlateFee: driveAwayCostDataFromBackend.localPlateFee,\r\n                    HomeDelivery: driveAwayCostDataFromBackend.homeDelivery,\r\n                    OnRoadFee: driveAwayCostDataFromBackend.onRoadFeeSubtotal,\r\n                    SubTotal: driveAwayCostDataFromBackend.subTotal,\r\n                    DriveawayPrice: driveAwayCostDataFromBackend.driveawayPrice,\r\n                    VariantName: driveAwayCostDataFromBackend.variantName,\r\n                    VariantID: driveAwayCostDataFromBackend.variantID,\r\n                    VariantPrice: driveAwayCostDataFromBackend.variantPrice,\r\n                    ExteriorID: driveAwayCostDataFromBackend.exteriorID,\r\n                    ExteriorName: driveAwayCostDataFromBackend.exteriorName,\r\n                    ExteriorPrice: driveAwayCostDataFromBackend.exteriorColourPrice,\r\n                    InteriorID: driveAwayCostDataFromBackend.interiorID,\r\n                    InteriorName: driveAwayCostDataFromBackend.interiorName,\r\n                    InteriorPrice: driveAwayCostDataFromBackend.interiorColourPrice,\r\n                    GST: driveAwayCostDataFromBackend.gst,\r\n                    RoadUserChargers: driveAwayCostDataFromBackend.roadUserChargers,\r\n                    TyreStewardshipFee: driveAwayCostDataFromBackend.tyreStewardshipFee,\r\n                    Options: getOptions(driveAwayCostDataFromBackend?.options),\r\n                    \r\n                }\r\n                setDriveAwayCost(driveAwayCostData);\r\n            }\r\n        } catch (error: any) {\r\n            if (error.name === 'AbortError') console.log('Request aborted!');\r\n        } finally {\r\n            //if (abortController.signal?.aborted)\r\n        }\r\n\r\n    }\r\n\r\n    const getOptions = (optionData: any): vehicleModel.IVehicleOptions[] | [] => {\r\n        let configs: vehicleModel.IVehicleOptions[] = [];\r\n        optionData.map((item: any) => {\r\n            configs.push({\r\n                YanaOptionID: \"\",\r\n                OptionType: item.optionType,\r\n                OptionName: item.optionName,\r\n                OptionPrice: item.optionPrice,\r\n                OptionPicture: [],\r\n                OptionPictureMobile: [],\r\n                OptionDesc: item.optionDesc,\r\n                ChargeType: item.chargeType,\r\n                Disable: false,\r\n                TermsDescription: null,\r\n            });\r\n        });\r\n        return configs;\r\n    }\r\n\r\n    //finance\r\n    const doGetTermOptions = async () => {\r\n        let country = selectedLocationFromStore.Country?.code || \"\";\r\n\r\n        let response = await paymentOptionService.getFinanceTermOptions(country);\r\n        if (response.status) {\r\n            let responseData = response.data;\r\n\r\n            let defaultTerm: paymentOptionModel.IFinanceFilter | null = null;\r\n            let tempTermOptions: paymentOptionModel.IFinanceFilter[] = responseData.map((item: any) => {\r\n                let termItem: paymentOptionModel.IFinanceFilter = {\r\n                    ID: item.filterID,\r\n                    Name: item.filterName,\r\n                    IsDefault: item.isDefault\r\n                };\r\n                if (item.isDefault) {\r\n                    defaultTerm = termItem;\r\n                }\r\n                return termItem;\r\n            });\r\n            setTermOptions(tempTermOptions);\r\n            setSelectedTermOptions(defaultTerm);\r\n\r\n\r\n            //setFinancePageState({\r\n            //    ...financePageState,\r\n            //    SelectedTermOptions: defaultTerm,\r\n            //})\r\n        }\r\n\r\n    }\r\n\r\n    const doGetBallonOptions = async () => {\r\n        let country = selectedLocationFromStore.Country?.code || \"\";\r\n\r\n        let ballonOptionResponse = await paymentOptionService.getFinanceBallonOptions(\r\n            country, selectedTermOptions?.ID || 0);\r\n        if (ballonOptionResponse.status) {\r\n            let defaultFinalBalloonPayments: paymentOptionModel.IFinanceFilter | null = null;\r\n            let tempfinalBalloonPayments: paymentOptionModel.IFinanceFilter[] = ballonOptionResponse.data.map((item: any) => {\r\n                let finalBalloonPaymentsItem: paymentOptionModel.IFinanceFilter = {\r\n                    ID: item.filterID,\r\n                    Name: item.filterName,\r\n                    IsDefault: item.isDefault\r\n                };\r\n                if (item.isDefault) {\r\n                    defaultFinalBalloonPayments = finalBalloonPaymentsItem;\r\n                }\r\n                return finalBalloonPaymentsItem;\r\n            });\r\n            setBalloonPaymentOptions(tempfinalBalloonPayments);\r\n            setSelectedBalloonPaymentOptions(defaultFinalBalloonPayments);\r\n            //setFinancePageState({\r\n            //    ...financePageState,\r\n            //    SelectedBalloonPaymentOptions: defaultFinalBalloonPayments,\r\n            //})\r\n        }\r\n    }\r\n\r\n    const doGetFrequencyOptions = async () => {\r\n        let country = selectedLocationFromStore.Country?.code || \"\";\r\n\r\n        let frequencyResponse = await paymentOptionService.getFrequency(country);\r\n        if (frequencyResponse.status) {\r\n            let defaultFrequencyPayments: paymentOptionModel.IFinanceFilter | null = null;\r\n            let tempFrequencyPayments: paymentOptionModel.IFinanceFilter[] = frequencyResponse.data.map((item: any) => {\r\n                let frequencyItem: paymentOptionModel.IFinanceFilter = {\r\n                    ID: item.filterID,\r\n                    Name: item.filterName,\r\n                    IsDefault: item.isDefault\r\n                };\r\n                if (item.isDefault) {\r\n                    defaultFrequencyPayments = frequencyItem;\r\n                }\r\n                return frequencyItem;\r\n            });\r\n            setFrequencyOptions(tempFrequencyPayments);\r\n            setSelectedFrequencyOptions(defaultFrequencyPayments);\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n    const buildFinanceRequest = () => {\r\n        let requestData: paymentOptionModel.IFinanceRequest = {\r\n            Country: selectedLocationFromStore.Country?.code || \"\",\r\n            Deposit: financePageState.Deposit,\r\n            SelectedTermOptions: selectedTermOptions !== undefined ? selectedTermOptions : null,\r\n            SelectedBalloonPaymentOptions: selectedBalloonPaymentOptions !== undefined ? selectedBalloonPaymentOptions : null,\r\n            SelectedPaymentFrequency: selectedFrequencyOption !== undefined ? selectedFrequencyOption : null,\r\n            DriveawayCost: driveAwayCost?.DriveawayPrice || 0,    //must be from state\r\n            Source: \"PaymentOptions\"\r\n        };\r\n        setFinanceRequest(requestData);\r\n    }\r\n\r\n\r\n    const doCalculateFinance = async () => {\r\n        //console.log(fromSource);\r\n        if (selectedLocationFromStore.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n            if (isNil(selectedBalloonPaymentOptions)\r\n                || isNil(selectedTermOptions)\r\n            ) {\r\n                return;\r\n            }\r\n        }\r\n        else {\r\n            if (isNil(selectedBalloonPaymentOptions)\r\n                || isNil(selectedFrequencyOption)\r\n            ) {\r\n                return;\r\n            }\r\n        }\r\n\r\n        const abortController = new (window as any).AbortController();\r\n        await setFinanceAbortController(abortController);\r\n\r\n\r\n\r\n        try {\r\n            let response = await paymentOptionService.calculateFinance(financeRequest, abortController.signal);\r\n            if (response.status) {\r\n                let responseData = response.data;\r\n\r\n                let updatedFinance = {\r\n                    ...financePageState,\r\n                    InterestRate: responseData.interestRateText,\r\n                    ComparisonRate: responseData.comparisonRateText,\r\n                    FinanceAmount: responseData.totalFinancedAmountText,\r\n                    BallonAmount: responseData.balloonpaymentText,\r\n                    LoanPayment: responseData.monthlyLoanPayment,\r\n                    LoanPaymentText: responseData.monthlyLoanPaymentText,\r\n                    CreditAssistanceFee: responseData.creditAssistanceFeeText,\r\n                    MonthlyAccountFee: responseData.monthlyAccountFeeText,\r\n                    FreqencyName: responseData.freqencyName,\r\n                    NoOfMonth: responseData.noOfMonth,\r\n                    InterestRateTo: responseData.interestRateTo,\r\n                    TotalLoanPayment: responseData.totalLoanPayment,\r\n                    PPSR: responseData.ppsr,\r\n                };\r\n\r\n                setFinancePageState(updatedFinance);\r\n            }\r\n        } catch (error: any) {\r\n            if (error.name === 'AbortError') console.log('doCalculateFinance Request aborted!');\r\n        } finally {\r\n            //if (abortController.signal?.aborted)\r\n        }\r\n    }\r\n\r\n\r\n    useEffect(() => {\r\n        if (isOpen && !isNil(selectedLocationFromStore.Country?.code)\r\n        ) {\r\n            doGetTermOptions();\r\n\r\n            if (selectedLocationFromStore.Country?.code == rdEnum.enumCountryCode.NewZealand) {\r\n                doGetFrequencyOptions();\r\n            }\r\n        }\r\n\r\n    }, [selectedLocationFromStore.Country?.code, isOpen]);\r\n\r\n    useEffect(() => {\r\n\r\n        if (isOpen && !isNil(selectedLocationFromStore.Country?.code) && selectedLocationFromStore.Country?.code != \"\"\r\n            && !isNil(selectedTermOptions?.ID)\r\n        ) {\r\n            doGetBallonOptions();\r\n        }\r\n\r\n    }, [selectedTermOptions, isOpen]);\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        //don't add financePageState.SelectedTermOptions to dependency \r\n        //because if SelectedTermOptions changed, SelectedBalloonPaymentOptions will be changed as well\r\n        if (isOpen\r\n            && !isNil(selectedTermOptions?.Name)\r\n            && !isNil(selectedBalloonPaymentOptions?.Name)\r\n        ) {\r\n            buildFinanceRequest();\r\n        }\r\n        //financeAbortController.abort();\r\n        //return () => {\r\n        //    financeAbortController.abort();\r\n        //};\r\n\r\n    }, [\r\n        selectedLocationFromStore.Country?.code,\r\n        driveAwayCost?.DriveawayPrice,\r\n        selectedTermOptions,\r\n        selectedBalloonPaymentOptions,\r\n        selectedFrequencyOption\r\n    ]);\r\n\r\n    useEffect(() => {\r\n        if (isNil(financeRequest.Country) || financeRequest.Country == \"\"\r\n            || isNil(financeRequest.SelectedTermOptions?.ID) || financeRequest.SelectedTermOptions?.ID == undefined\r\n            || isNil(financeRequest.SelectedBalloonPaymentOptions?.ID) || financeRequest.SelectedBalloonPaymentOptions?.ID == undefined\r\n            || financeRequest.DriveawayCost == 0) {\r\n            return;\r\n        }\r\n\r\n        doCalculateFinance();\r\n\r\n    }, [JSON.stringify(financeRequest)]);\r\n\r\n\r\n    //selectedLocationFromStore.Country?.code,\r\n    //financePageState.SelectedBalloonPaymentOptions,\r\n    //    financePageState.Deposit\r\n    const CustomFinanceToggle = ({ children, eventKey, financeActiveEventKey }: any) => {\r\n        const isActive = financeActiveEventKey === eventKey;\r\n        const decoratedOnClick = useAccordionButton(eventKey, () =>\r\n            console.log(`Accordion with eventKey ${eventKey} is ${isActive ? 'closing' : 'opening'}!`),\r\n        );\r\n\r\n        return (\r\n            <div className='driveaway-dropdown-panel'>\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={decoratedOnClick}\r\n                >\r\n                    {children}\r\n                </button>\r\n                <span>{rdHelper.currencyFormatWithIncluded(driveAwayCost?.DriveawayPrice)}</span>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    const showVehicleTemplate = () => {\r\n        return (\r\n            <div className='driveaway-price-panel'>\r\n                <div className='driveaway-price-card'>\r\n                    <span className='card-title'>Variant</span>\r\n                    <div className='details-desc'>\r\n                        <span>{driveAwayCost?.VariantName}</span>\r\n                        <span className='price'>{rdHelper.currencyFormatWithIncluded(driveAwayCost?.VariantPrice)}</span>\r\n                    </div>\r\n                </div>\r\n\r\n                <div className='driveaway-price-card'>\r\n                    <span className='card-title'>Exterior</span>\r\n                    <div className='details-desc'>\r\n                        <span>{driveAwayCost?.ExteriorName}</span>\r\n                        <span className='price'>{rdHelper.currencyFormatWithIncluded(driveAwayCost?.ExteriorPrice)}</span>\r\n                    </div>\r\n                </div>\r\n\r\n                <div className='driveaway-price-card'>\r\n                    <span className='card-title'>Interior</span>\r\n                    <div className='details-desc'>\r\n                        <span>{driveAwayCost?.InteriorName}</span>\r\n                        <span className='price'>{rdHelper.currencyFormatWithIncluded(driveAwayCost?.InteriorPrice)}</span>\r\n                    </div>\r\n                </div>\r\n\r\n                {optionsTemplate(driveAwayCost?.Options, rdEnum.enumVehicleOptionType.Accessories)}\r\n                {optionsTemplate(driveAwayCost?.Options, rdEnum.enumVehicleOptionType.Charge)}\r\n\r\n                <div className='driveaway-price-card'>\r\n                    <div className='driveaway-price-row-item bold'>\r\n                        <span className='special-title'>Vehicle Subtotal</span>\r\n                        <span className='total-price'>{rdHelper.currencyFormatWithBlank(driveAwayCost?.SubTotal)}</span>\r\n                    </div>\r\n                    <span className='card-title'>Includes {rdHelper.currencyFormatWithBlank(driveAwayCost?.GST)} GST</span>\r\n                </div>\r\n\r\n                <div className='driveaway-price-card' style={{  paddingBottom: '1rem' }}>\r\n                    <span className='card-title'>Delivery option</span>\r\n                    <div className='details-desc'>\r\n                        <span>{selectedLocationFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup}</span>\r\n                        {selectedLocationFromStore?.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery && (\r\n                            <span className='price'>{rdHelper.currencyFormatWithBlank(driveAwayCost?.HomeDelivery)}</span>\r\n                        )}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        )\r\n    }\r\n\r\n    const showTaxTemplate = () => {\r\n        if (selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n            return (\r\n                <div className='payment-display-panel'>\r\n                    <div className='payment-row-item'>\r\n                        <span>Luxury Car Tax</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.LuxuryCarTax)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item'>\r\n                        <span>Local Stamp Duty</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.LocalStampDuty)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item'>\r\n                        <span>Local Registration Costs</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.LocalRegistrationCost)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item'>\r\n                        <span>Local CTP</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.LocalCTP)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item'>\r\n                        <span>Local Plate Fee</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.LocalPlateFee)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item extra bold'>\r\n                        <span>On Road Fees Subtotal</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.OnRoadFee)}</span>\r\n                    </div>\r\n                </div>\r\n            );\r\n        }\r\n        else if (selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.NewZealand) {\r\n            return (\r\n                <div className='payment-display-panel'>\r\n                    <div className='payment-row-item'>\r\n                        <span>Local Registration Costs</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.LocalRegistrationCost)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item'>\r\n                        <span>Local Plate Fee</span>\r\n                        <span>{rdHelper.currencyFormatWithIncluded(driveAwayCost?.LocalPlateFee)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item'>\r\n                        <span>Tyre Stewardship Fee</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.TyreStewardshipFee)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item'>\r\n                        <span>Road User Charges</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.RoadUserChargers)}</span>\r\n                    </div>\r\n                    <div className='payment-row-item extra bold'>\r\n                        <span>On Road Fees Subtotal</span>\r\n                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.OnRoadFee)}</span>\r\n                    </div>\r\n                </div>\r\n            );\r\n        }\r\n\r\n        return (<></>);\r\n    }\r\n\r\n    const optionsTemplate = (options: vehicleModel.IVehicleOptions[] | null | undefined, optionType: string) => {\r\n        let optionItemsTemplate: any[] = [];\r\n        if (!isNil(options) && options != undefined && options.length > 0) {\r\n            let selectedOptions = options.filter(m => m.OptionType == optionType);\r\n            if (!isNil(selectedOptions) && selectedOptions.length > 0) {\r\n                selectedOptions.map((optionItem: vehicleModel.IVehicleOptions, index: any) => {\r\n                    optionItemsTemplate.push(\r\n                        <div className='details-desc' key={optionItem + \"_\" + index}>\r\n                            <p>{optionItem?.OptionName}</p>\r\n                            <span>{rdHelper.currencyFormatWithIncluded(optionItem?.OptionPrice)}</span>\r\n                        </div>\r\n                    );\r\n                })\r\n            }\r\n        }\r\n\r\n        let template: any[] = [];\r\n        if (optionItemsTemplate.length == 0) {\r\n            template.push(<></>);\r\n        }\r\n        else {\r\n            template.push(\r\n                <div className='driveaway-price-card'>\r\n                    <div className='details-subtitle'>{optionType == rdEnum.enumVehicleOptionType.Charge ? rdEnum.enumVehicleOptionTypeName.Charge : rdEnum.enumVehicleOptionTypeName.Accessories}</div>\r\n                    {optionItemsTemplate}\r\n                </div>\r\n            );\r\n        }\r\n        return template;\r\n    }\r\n\r\n    const toPlenti = () => {\r\n        window.open('https://www.plenti.com.au/compliance/');\r\n    }\r\n\r\n\r\n\r\n\r\n    setTimeout(() => {\r\n        let stateDropdown = document.getElementById(\"state-dropdown-list\");\r\n        if (stateDropdown) {\r\n            stateDropdown.setAttribute('data-dtm', 'modal:payment options');\r\n            stateDropdown.classList.add('stat-text-link');\r\n        }\r\n\r\n        let regoTypeDropdown = document.getElementById(\"registration-type-dropdown-list\");\r\n        if (regoTypeDropdown) {\r\n            regoTypeDropdown.setAttribute('data-dtm', 'modal:payment options');\r\n            regoTypeDropdown.classList.add('stat-text-link');\r\n        }\r\n\r\n        let termDropdown = document.getElementById(\"terms-dropdown-list\");\r\n        if (termDropdown) {\r\n            termDropdown.setAttribute('data-dtm', 'modal:payment options');\r\n            termDropdown.classList.add('stat-text-link');\r\n        }\r\n\r\n        let balloonDropdown = document.getElementById(\"balloon-dropdown-list\");\r\n        if (balloonDropdown) {\r\n            balloonDropdown.setAttribute('data-dtm', 'modal:payment options');\r\n            balloonDropdown.classList.add('stat-text-link');\r\n        }\r\n\r\n    }, 200);\r\n\r\n    const termsItemTemplate = (option: any) => {\r\n        return (\r\n            <div className=\"flex align-items-center stat-text-link\" data-dtm=\"modal:payment options\">\r\n                <div>{option.Name}</div>\r\n            </div>\r\n        );\r\n    };\r\n\r\n    const balloonItemTemplate = (option: any) => {\r\n        return (\r\n            <div className=\"flex align-items-center stat-text-link\" data-dtm=\"modal:payment options\">\r\n                <div>{option.Name}</div>\r\n            </div>\r\n        );\r\n    };\r\n\r\n    const stateItemTemplate = (option: any) => {\r\n        return (\r\n            <div className=\"flex align-items-center stat-text-link\" data-dtm=\"modal:payment options\">\r\n                <div>{option.name}</div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    const regTypeItemTemplate = (option: any) => {\r\n        return (\r\n            <div className=\"flex align-items-center stat-text-link\" data-dtm=\"modal:payment options\">\r\n                <div>{option.Text}</div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <Dialog className='payment-options-dialog' position='bottom' visible={isOpen} draggable={false} resizable={true} onHide={() => onHide()}>\r\n                <div className='payment-options-scrollbar-container'>\r\n                    <div className='title-panel'>\r\n                        <h1>Payment Options</h1>\r\n                        {\r\n                            paymentOption == rdEnum.enumPaymentOptions.Cash\r\n                                ?\r\n                                <></>\r\n                                :\r\n                                <p className='finance-desc'>Calculate estimated repayments on your favourite Cadillac using this tool. The final interest rate and additional product options will be confirmed with our Finance Partner after purchase.</p>\r\n                        }\r\n                    </div>\r\n                    <div className='payment-options-btn-panel'>\r\n                        <Button className={paymentOption == rdEnum.enumPaymentOptions.Cash ? 'stat-button-link payment-btn selected' : 'stat-button-link payment-btn'}\r\n                            data-dtm={\"modal:payment options\"}\r\n                            onClick={() => {\r\n                                setPaymentOption(rdEnum.enumPaymentOptions.Cash)\r\n                            }}\r\n                        >\r\n                            <span>{rdEnum.enumPaymentOptions.Cash}</span>\r\n                        </Button>\r\n                        <Button className={paymentOption == rdEnum.enumPaymentOptions.Finance ? 'stat-button-link payment-btn selected' : 'stat-button-link payment-btn'}\r\n                            data-dtm={\"modal:payment options\"}\r\n                            onClick={() => {\r\n                                setPaymentOption(rdEnum.enumPaymentOptions.Finance)\r\n                            }}\r\n                        >\r\n                            <span>{rdEnum.enumPaymentOptions.Finance}</span>\r\n                        </Button>\r\n                    </div>\r\n                    {\r\n                        paymentOption == rdEnum.enumPaymentOptions.Cash\r\n                            ?\r\n                            <div className='cash-container'>\r\n                                <Row className='dropdown-container'>\r\n                                    <Col lg={6} className='dropdown-panel' style={{ display: selectedLocationFromStore?.Country?.name == 'Australia' ? '' : 'none' }}>\r\n                                        {/* <span>Registration / Territory</span> */}\r\n                                        <Dropdown\r\n                                            inputId=\"state-dropdown-list\"\r\n                                            value={selectedState}\r\n                                            options={states}\r\n                                            onChange={(e) => onStateChange(e)}\r\n                                            className='global-location-dropdown'\r\n                                            optionLabel=\"code\"\r\n                                            placeholder=\"State*\"\r\n                                            disabled\r\n                                            itemTemplate={stateItemTemplate}\r\n                                        />\r\n                                        <label className={selectedState ? 'select-state-label selected' : 'select-state-label'}>State / Territory</label>\r\n                                    </Col>\r\n                                    <Col lg={selectedLocationFromStore?.Country?.name == 'Australia' ? 6 : 12} className='dropdown-panel'>\r\n                                        {/* <span>Registration Type</span> */}\r\n                                        <Dropdown\r\n                                            inputId=\"registration-type-dropdown-list\"\r\n                                            value={registrationType}\r\n                                            options={getRegistrationTypes()}\r\n                                            onChange={(e) => setRegistrationType(e.value)}\r\n                                            className='global-location-dropdown'\r\n                                            optionLabel=\"Text\"\r\n                                            placeholder=\"Registration Type*\"\r\n                                            itemTemplate={regTypeItemTemplate}\r\n                                        />\r\n                                        <label className={registrationType ? 'registration-type-label selected' : 'registration-type-label'}>Registration Type</label>\r\n                                    </Col>\r\n                                </Row>\r\n\r\n                                {showVehicleTemplate()}\r\n\r\n                                {showTaxTemplate()}\r\n\r\n                                {/*<div className='driveaway-price-card' style={{borderBottom: '1px solid #ddd', paddingBottom: '1rem'}}>*/}\r\n                                {/*    <span className='card-title'>Delivery option</span>*/}\r\n                                {/*    <div className='details-desc'>*/}\r\n                                {/*        <span>{selectedLocationFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup}</span>*/}\r\n                                {/*        {selectedLocationFromStore?.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery && (*/}\r\n                                {/*            <span className='price'>{rdHelper.currencyFormatWithBlank(driveAwayCost?.HomeDelivery)}</span>*/}\r\n                                {/*        )}*/}\r\n                                {/*    </div>*/}\r\n                                {/*</div>*/}\r\n\r\n                                <div className='payment-display-panel'>\r\n                                    <div className='payment-row-item bold'>\r\n                                        <span>Driveaway Price<sup>1</sup></span>\r\n                                        <span>{rdHelper.currencyFormatWithBlank(driveAwayCost?.DriveawayPrice)}</span>\r\n                                    </div>\r\n                                </div>\r\n                                <div className='payment-bottom-info'>\r\n                                    {/* <p>\r\n                                        <sup>1</sup>This is the drive away price for the selected country, state or territory. It is based on the owner being a 'rating one' driver aged 40 with a good driving record. Actual drive away price may differ depending on your individual circumstances. Price does not take into account any discount, rebate or promotion that may be available from time to time. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features.\r\n                                    </p>\r\n                                    <p>\r\n                                        Vehicle registration includes 12 months' registration fees, 12 months' CTP insurance and any other associated charges in accordance with country, state and/or territory legislation. Cadillac reserves the right to make changes to this website on any information and elements as time progresses, e.g. to final prices, taxes etc. The website may vary from market to market and is subject to change without notice.\r\n                                    </p> */}\r\n                                    {\r\n                                        selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                        ?\r\n                                        <p>\r\n                                            <sup>1</sup>This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), luxury car tax (LCT), stamp duty, compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                                        </p>\r\n                                        :\r\n                                        <p>\r\n                                            <sup>1</sup>This is the drive away price for the selected country, state or territory. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                                        </p>\r\n                                    }\r\n                                    {/* <p>\r\n                                        <sup>3</sup> Availability is an estimate only and subject to change without notice. More accurate timing will be provided upon order and closer to the time of delivery.\r\n                                    </p> */}\r\n                                </div>\r\n                            </div>\r\n                            :\r\n                            paymentOption == rdEnum.enumPaymentOptions.Finance\r\n                                ?\r\n                                <div className='finance-container'>\r\n                                    <Row className='dropdown-container'>\r\n                                        <Col lg={6} className='dropdown-panel'>\r\n                                            <div className='input-item' style={{ margin: '0' }}>\r\n                                                <div className=\"p-input-icon-left wrapper-box\">\r\n                                                    <i>$</i>\r\n                                                    <InputText\r\n                                                        value={financePageState.Deposit}\r\n                                                        onChange={(e) => {\r\n                                                            setFinancePageState({\r\n                                                                ...financePageState,\r\n                                                                Deposit: parseInt(e.target.value)\r\n                                                            });\r\n                                                        }}\r\n                                                        keyfilter={\"int\"}\r\n                                                        disabled={true}\r\n                                                    />\r\n                                                    <label>Deposit</label>\r\n                                                </div>\r\n                                            </div>\r\n                                        </Col>\r\n                                        <Col lg={6} className='dropdown-panel' >\r\n                                            <Dropdown\r\n                                                inputId=\"terms-dropdown-list\"\r\n                                                value={selectedTermOptions}\r\n                                                options={termOptions}\r\n                                                onChange={(e: any) => {\r\n                                                    setSelectedTermOptions(e.value);\r\n                                                }}\r\n                                                className='global-location-dropdown'\r\n                                                optionLabel=\"Name\"\r\n                                                itemTemplate={termsItemTemplate}\r\n                                            />\r\n                                            <label className={!isNil(selectedTermOptions) ? 'term-label selected' : 'term-label'}>Term</label>\r\n                                        </Col>\r\n                                    </Row>\r\n                                    {selectedLocationFromStore.Country?.code == rdEnum.enumCountryCode.Australia ? (\r\n                                        <Row className='dropdown-container'>\r\n                                            <Col lg={3} className='dropdown-panel'>\r\n                                                <div className='input-item'>\r\n                                                    <div className=\"wrapper-box disabled\">\r\n                                                        <InputText\r\n                                                            value={financePageState.InterestRate}\r\n                                                            disabled\r\n                                                        />\r\n                                                        <label>interest rate from</label>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </Col>\r\n                                            <Col lg={3} className='dropdown-panel'>\r\n                                                <div className='input-item'>\r\n                                                    <div className=\"wrapper-box disabled\">\r\n                                                        <InputText\r\n                                                            value={financePageState.ComparisonRate}\r\n                                                            disabled\r\n                                                        />\r\n                                                        <label style={{minWidth: '200px'}}>p.a comparison rate from<sup>2</sup></label>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </Col>\r\n                                            <Col lg={3} className='dropdown-panel'>\r\n                                                <div className='input-item' style={{ margin: '0' }}>\r\n                                                    <div className=\"wrapper-box disabled\">\r\n                                                        {/*<i>$</i>*/}\r\n                                                        <InputText\r\n                                                            value={financePageState.FinanceAmount}\r\n                                                            disabled={true}\r\n                                                            onChange={(e) => {\r\n                                                                // setDownPayment(e.target.value)\r\n                                                            }}\r\n                                                        />\r\n                                                        <label>Financed Amount</label>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </Col>\r\n                                            <Col lg={3} className='dropdown-panel'>\r\n                                                <Dropdown\r\n                                                    inputId=\"balloon-dropdown-list\"\r\n                                                    value={selectedBalloonPaymentOptions}\r\n                                                    options={balloonPaymentOptions}\r\n                                                    onChange={(e: any) => {\r\n                                                        setSelectedBalloonPaymentOptions(e.value);\r\n                                                        //setFinancePageState({\r\n                                                        //    ...financePageState,\r\n                                                        //    SelectedBalloonPaymentOptions: e.value\r\n                                                        //})\r\n                                                    }}\r\n                                                    className='global-location-dropdown'\r\n                                                    optionLabel=\"Name\"\r\n                                                    itemTemplate={balloonItemTemplate}\r\n                                                // placeholder=\"Final Balloon Payment*\"\r\n                                                />\r\n                                                <label className={!isNil(selectedBalloonPaymentOptions) ? 'balloon-payment-label selected' : 'balloon-payment-label'}>Final Balloon Payment</label>\r\n                                                <span>{financePageState.BallonAmount} balloon payment</span>\r\n                                            </Col>\r\n                                        </Row>\r\n                                    )\r\n                                        :\r\n                                        <React.Fragment>\r\n                                            <Row className='dropdown-container'>\r\n                                                <Col lg={6} className='dropdown-panel'>\r\n                                                    <Dropdown\r\n                                                        inputId=\"balloon-dropdown-list\"\r\n                                                        value={selectedBalloonPaymentOptions}\r\n                                                        options={balloonPaymentOptions}\r\n                                                        onChange={(e: any) => {\r\n                                                            setSelectedBalloonPaymentOptions(e.value);\r\n                                                        }}\r\n                                                        className='global-location-dropdown'\r\n                                                        optionLabel=\"Name\"\r\n                                                        itemTemplate={balloonItemTemplate}\r\n                                                    />\r\n                                                    <label className={!isNil(selectedBalloonPaymentOptions) ? 'balloon-payment-label selected' : 'balloon-payment-label'}>Final Balloon Payment</label>\r\n                                                </Col>\r\n                                                <Col lg={6} className='dropdown-panel'>\r\n                                                    <Dropdown\r\n                                                        value={selectedFrequencyOption}\r\n                                                        options={frequencyOptions}\r\n                                                        onChange={(e: any) => {\r\n                                                            setSelectedFrequencyOptions(e.value);\r\n                                                        }}\r\n                                                        className='global-location-dropdown'\r\n                                                        optionLabel=\"Name\"\r\n                                                    />\r\n                                                    <label className={!isNil(selectedFrequencyOption) ? 'payment-frequency-label selected' : 'payment-frequency-label'}>Payment Frequency</label>\r\n                                                </Col>\r\n                                            </Row>\r\n                                            <Row>\r\n                                                <Col lg={12} className=\"nz-note-wrapper financed-amount\">\r\n                                                    <div className='financed-amount-panel'>\r\n                                                        <div style={{ fontSize: \"12px\", width:'fit-content' }}>Financed Amount</div>\r\n                                                        <div style={{ width:'fit-content' }}>{financePageState.FinanceAmount}</div>\r\n                                                    </div>\r\n                                                    <div className='ballon-payment-panel'>\r\n                                                        <div style={{ fontSize: \"12px\", width:'fit-content' }}>Balloon Payment</div>\r\n                                                        <div className='balloon-payment'>{financePageState.BallonAmount}</div>\r\n                                                    </div>\r\n                                                </Col>\r\n                                            </Row>\r\n                                            <Row>\r\n                                                <Col lg={12} className=\"nz-note-wrapper\">\r\n                                                    <div>This is a representative example based on a {financePageState.SelectedTermOptions?.Name} term at an interest rate of {financePageState.InterestRate}.\r\n                                                    Payments are calculated and payable {financePageState.FreqencyName}ly under a Credit Agreement at {financePageState.LoanPaymentText} per {financePageState.FreqencyName} with a final balloon payment of {financePageState.BallonAmount}.\r\n                                                        Total amount repayable is {financePageState.TotalLoanPayment}. Payments include on road costs, an establishment fee of {financePageState.CreditAssistanceFee}, a monthly maintenance fee of {financePageState.MonthlyAccountFee} and a PPSR fee of {financePageState.PPSR}.</div>\r\n                                                    <br />\r\n                                                    <div>Interest rates vary from {financePageState.InterestRate} to {financePageState.InterestRateTo} and are subject to credit criteria and affordability assessment</div>\r\n                                                </Col>\r\n                                            </Row>\r\n                                        </React.Fragment>\r\n                                    }\r\n\r\n\r\n\r\n                                    <p>\r\n                                        Scroll down for important finance information\r\n                                        </p>\r\n\r\n                                    <div className='payment-display-panel'>\r\n                                        <div className='payment-row-item bold'>\r\n                                            {selectedLocationFromStore.Country?.code == rdEnum.enumCountryCode.Australia ?\r\n                                                <span>Credit Assistance Fee</span>\r\n                                                : <span>Loan Establishment Fee</span>\r\n                                            }\r\n                                            <span>{financePageState.CreditAssistanceFee}</span>\r\n                                        </div>\r\n                                        <Accordion defaultActiveKey=\"5\" activeKey={financeActiveEventKey} onSelect={handleFinanceSelect}>\r\n                                            <Card>\r\n                                                <Accordion.Collapse eventKey=\"5\">\r\n                                                    <Card.Body>\r\n                                                        {showVehicleTemplate()}\r\n                                                        {showTaxTemplate()}\r\n\r\n                                                        {/*<div className='driveaway-price-card' style={{borderBottom: '1px solid #ddd', paddingBottom: '1rem'}}>*/}\r\n                                                        {/*    <span className='card-title'>Delivery option</span>*/}\r\n                                                        {/*    <div className='details-desc'>*/}\r\n                                                        {/*        <span>{selectedLocationFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup}</span>*/}\r\n                                                        {/*        {selectedLocationFromStore?.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery && (*/}\r\n                                                        {/*            <span className='price'>{rdHelper.currencyFormatWithBlank(driveAwayCost?.HomeDelivery)}</span>*/}\r\n                                                        {/*        )}*/}\r\n                                                        {/*    </div>*/}\r\n                                                        {/*</div>*/}\r\n                                                    </Card.Body>\r\n                                                </Accordion.Collapse>\r\n                                                <Card.Header>\r\n                                                    <CustomFinanceToggle eventKey=\"5\" activeEventKey={financeActiveEventKey}>\r\n                                                        Driveaway Cost\r\n                                                            <img alt=''\r\n                                                            data-dtm={\"modal:payment options\"}\r\n                                                            className={financeActiveEventKey ? 'stat-expand-icon image' : 'stat-expand-icon image active'}\r\n                                                            src={`${getCMSAssets()}/checkout/right-black-arrow.svg`} />\r\n                                                    </CustomFinanceToggle>\r\n                                                </Card.Header>\r\n                                            </Card>\r\n                                        </Accordion>\r\n                                        <div className='payment-row-item bold'>\r\n                                            <span>Loan Payment (inc. Home Delivery)</span>\r\n                                            <span>{financePageState.LoanPaymentText} /{financePageState.FreqencyName}<sup>2</sup></span>\r\n                                        </div>\r\n                                        <div className='payment-row-item bold'>\r\n                                            <span>Estimated Delivery</span>\r\n                                            <span>{isFromLandingPage ? estDeliveryDate : vehFromStore.SelectedInterior?.Available}</span>\r\n                                        </div>\r\n                                    </div>\r\n\r\n                                    {/* {\r\n                                        selectedLocationFromStore?.Country?.name == 'Australia'\r\n                                            ?\r\n                                            <div className='payment-bottom-info'>\r\n                                                <p>\r\n                                                    <sup>1</sup> This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. Actual drive away price may differ depending on your individual circumstances. Price does not take into account any discount, rebate or promotion that may be available from time to time. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features.\r\n                                                    <br />\r\n                                                    Vehicle registration includes 12 months’ registration fees, 12 months’ CTP insurance and any other associated charges in accordance with country, state and/or territory legislation. Cadillac reserves the right to make changes to this website on any information and elements as time progresses, e.g. to final prices, taxes etc. The website may vary from market to market and is subject to change without notice\r\n                                                </p>\r\n                                                <p>\r\n                                                    Finance provided to approved applicants by Plenti Finance Pty Limited ABN 82 636 759 861.\r\n                                                </p>\r\n                                                <p>\r\n                                                    <sup>2</sup> The comparison rate is based on a secured car loan of $30,000 repaid over 60 months at an interest rate of 1.99% p.a.. WARNING: This comparison rate is true only for the examples given and may not include all fees and charges. Different terms, fees or other loan amounts might result in a different comparison rate. Finance provided to approved applicants by Plenti Finance Pty Limited ABN 82 636 759 861. <br />Terms, conditions and fees apply to any loan. Any calculations made by this calculator are dependent on the accuracy of the information provided, are intended to be used as a guide only, must not be relied on for any reason as conclusive, and do not constitute a quote. Your application will be subject to a credit approval process and lending criteria. Cadillac will not store the information provided in this calculator. Cadillac and their finance partner do not accept any responsibility for any loss, costs, or liability directly or indirectly incurred by persons who rely on any amount calculated by this calculator.\r\n                                                    <br />\r\n                                                    Order and apply for finance on an eligible Cadillac vehicle by <span style={{ color: 'red' }}>31 August 2024 and take delivery by 30 September 2024</span> to qualify. Valid only for eligible purchases of new Cadillac configurations for finance loan terms up to 5 years. Not eligible with balloon repayments. Credit subject to financier's approval. Terms, conditions, fees and charges apply Interest rates are subject to change. This information does not constitute financial advice and you should consider whether it is appropriate to your circumstances before you act in reliance on it. For detailed advice and to discuss finance options tailored to your needs to determine the best finance option for your circumstances, we recommend speaking with a licensed independent financial advisor.\r\n                                                </p>\r\n                                                <p>\r\n                                                    [Placeholder for Plenti Disclaimer – waiting on final version]\r\n                                                </p>\r\n                                                <p>\r\n                                                    <sup>3</sup> Availability is an estimate only and subject to change without notice. More accurate timing will be provided upon order and closer to the time of delivery.\r\n                                                </p>\r\n                                            </div>\r\n                                            :\r\n                                            <div className='payment-bottom-info'>\r\n                                                <p>\r\n                                                    <sup>1</sup> This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. Actual drive away price may differ depending on your individual circumstances. Price does not take into account any discount, rebate or promotion that may be available from time to time. \r\n                                                </p>\r\n                                                <p>\r\n                                                    Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. Vehicle registration includes 12 months’ registration fees, 12 months’ CTP insurance and any other associated charges in accordance with country, state and/or territory legislation. Cadillac reserves the right to make changes to this website on any information and elements as time progresses, e.g. to final prices, taxes etc. The website may vary from market to market and is subject to change without notice.\r\n                                                </p>\r\n                                                <p>\r\n                                                    Cadillac will not store the information provided in this calculator.\r\n                                                </p>\r\n                                                <p>\r\n                                                    Finance is provided by MTF subject to its approval process, lending criteria and checks. Terms, conditions and fees apply to any offer of finance. Any personal information we collect about you may be shared with MTF and will be treated in accordance with <a onClick={() => toPrivacy()}>MTF privacy statement</a>.\r\n                                                </p>\r\n                                                <p>\r\n                                                    Calculator information is for illustrative purposes only and must not be relied upon for any reason. The information on this page is not financial advice or an offer of finance. Interest rates are subject to change. Your interest rate may be lower or higher depending on your credit history and other factors. For more information see <a onClick={() => toRatesFees()}>rates, fees and charges</a> to understand what borrowing may cost you. We recommend that you seek independent financial advice for your unique circumstances. Cadillac and MTF do not accept any responsibility for any direct or indirect loss, cost, or liability incurred by persons who rely on any calculator information.\r\n                                                </p>\r\n                                                <p>\r\n                                                    <sup>3</sup> Availability is an estimate only and subject to change without notice. More accurate timing will be provided upon order and closer to the time of delivery.\r\n                                                </p>\r\n                                            </div>\r\n                                    } */}\r\n\r\n                                    <div className='payment-bottom-info'>\r\n                                        {\r\n                                            selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                            ?\r\n                                            <p>\r\n                                                <sup>1</sup>This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), luxury car tax (LCT), stamp duty, compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout. \r\n                                            </p>\r\n                                            :\r\n                                            <p>\r\n                                                <sup>1</sup>This is the drive away price for the selected country, state or territory. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout. \r\n                                            </p>\r\n                                        }\r\n                                    \r\n                                       \r\n                                        {/* <p>\r\n                                            <sup>2</sup>This monthly repayment has been estimated using a calculator developed by Cadillac in partnership with finance partners referenced below as a guide only. The repayment is indicative and intended for illustrative purposes only. Cadillac will not store the information provided in this calculator. This repayment estimate should not be considered a loan application or an offer of finance. This repayment estimate does not take into account your personal circumstances or any fees and charges or government taxes which may apply.\r\n\r\n                                        </p> */}\r\n                                        {\r\n                                            selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                            ?\r\n                                            <>\r\n                                                <p>\r\n                                                    <sup>2</sup>Comparison rate is based on a secured car loan of $30,000 repaid over 60 months, no balloon, and interest rate of 6.79%. Rates assume a customer with an excellent credit history. Rates shown are current as at today’s date. Terms, conditions, and credit criteria apply. Fees and charges apply. Interest rates are subject to change. <b>WARNING:</b> This comparison rate is true only for the examples given and may not include all fees and charges. Different terms, fees or other loan amounts might result in a different comparison rate. \r\n                                                </p>\r\n                                                <p>\r\n                                                    Terms, conditions and fees apply to any loan. Any calculations made by this calculator are dependent on the accuracy of the information provided, are intended to be used as a guide only, must not be relied on for any reason as conclusive, and do not constitute a quote or an offer of credit. Your application will be subject to a credit approval process and lending criteria. Cadillac will not store the information provided in this calculator.  Cadillac and their finance partner do not accept any responsibility for any loss, costs, or liability directly or indirectly incurred by persons who rely on any amount calculated by this calculator. \r\n                                                </p>\r\n                                                <p>\r\n                                                    Credit subject to financier's approval. Terms, conditions, fees and charges apply. Rates, repayments and fees are estimates and are subject to change at any time. Credit provided by Plenti Finance Pty Limited ACN 636 759 861 (supported by its servicer, Plenti RE Limited ACN 166 646 635). Plenti RE Limited holds Australian Financial Services Licence number 449176 and Australian Credit Licence number 449176.\r\n                                                </p>\r\n                                                <p>\r\n                                                    This information does not constitute financial advice and you should consider whether it is appropriate to your circumstances before you act in reliance on it. For detailed advice and to discuss finance options tailored to your needs to determine the best finance option for your circumstances, we recommend speaking with a licensed independent financial advisor. Plenti's Target Market Determination is available at <a style={{textDecoration: 'underline', cursor: 'pointer'}} onClick={() => toPlenti()}>www.plenti.com.au/compliance</a>.\r\n                                                </p>\r\n                                            </>\r\n                                            \r\n                                            :\r\n                                            <p>\r\n                                                <sup>2</sup>Finance is provided by MTF subject to its approval process, lending criteria and checks. Terms, conditions and fees apply to any offer of finance. Any personal information we collect about you may be shared with MTF and will be treated in accordance with MTF <a onClick={() => toPrivacy()}>privacy statement</a>. Calculator information is for illustrative purposes only and must not be relied upon for any reason. The information on this page is not financial advice or an offer of finance. Interest rates are subject to change. Your interest rate may be lower or higher depending on your credit history and other factors. For more information see <a onClick={() => toRatesFees()}>rates, fees and charges</a> to understand what borrowing may cost you. We recommend that you seek independent financial advice for your unique circumstances. Cadillac and MTF do not accept any responsibility for any direct or indirect loss, cost, or liability incurred by persons who rely on any calculator information.\r\n                                                {/* <sup>2</sup>Finance is provided by MTF subject to its approval process, lending criteria and checks. Terms, conditions and fees apply to any offer of finance. Any personal information we collect about you may be shared with MTF and will be treated in accordance with MTF privacy statement. Calculator information is for illustrative purposes only and must not be relied upon for any reason. The information on this page is not financial advice or an offer of finance. Interest rates are subject to change. Your interest rate may be lower or higher depending on your credit history and other factors. For more information see rates, fees and charges to understand what borrowing may cost you. We recommend that you seek independent financial advice for your unique circumstances. Cadillac and MTF do not accept any responsibility for any direct or indirect loss, cost, or liability incurred by persons who rely on any calculator information. */}\r\n                                            </p>\r\n                                            // <p>\r\n                                            //     [Placeholder for Plenti Disclaimer – waiting on final version]\r\n                                            // </p>\r\n                                            // :\r\n                                            // <p>\r\n                                            //     Finance is provided by MTF subject to its approval process, lending criteria and checks. Terms, conditions and fees apply to any offer of finance. Any personal information we collect about you may be shared with MTF and will be treated in accordance with <a onClick={() => toPrivacy()}>MTF privacy statement</a>. Calculator information is for illustrative purposes only and must not be relied upon for any reason. The information on this page is not financial advice or an offer of finance. Interest rates are subject to change. Your interest rate may be lower or higher depending on your credit history and other factors. For more information see <a onClick={() => toRatesFees()}>rates, fees and charges</a> to understand what borrowing may cost you. We recommend that you seek independent financial advice for your unique circumstances. Cadillac and MTF do not accept any responsibility for any direct or indirect loss, cost, or liability incurred by persons who rely on any calculator information.\r\n                                            // </p>\r\n                                        }\r\n                                        {/* <p>\r\n                                            <sup>3</sup>Availability and delivery dates are estimates only. Many factors impact vehicle delivery. Cadillac reserves the right to make changes to availability and delivery dates displayed throughout this configurator without notice.\r\n                                        </p>\r\n                                        <p>\r\n                                            `The information presented in this configurator is based on data available at the time. Cadillac reserves the right to make changes to this website on any information and elements as time progresses, e.g. to design, specifications, final prices, taxes, delivery dates etc. The website may vary from market to market and is subject to change without notice.\r\n                                        </p>\r\n                                        <p>\r\n                                            Vehicle shown on this page is a simulated overseas model. Actual production vehicles will vary. Vehicles shown here after are simulated local production vehicles intended for illustrative purposes. Cadillac has taken reasonable steps to ensure your digital configuration replicates the vehicle you receive in real life. Colours and other features may appear different in real life.\r\n                                        </p> */}\r\n                                    </div>\r\n\r\n                                </div>\r\n                                :\r\n                                <></>\r\n                    }\r\n                </div>\r\n            </Dialog>\r\n        </>\r\n    )\r\n})\r\n\r\nexport default PaymentOptions","import * as paymentOptionModel from 'model/IPaymentOptions';\r\nimport { IVehicleOptions } from 'model/IVehicle';\r\n\r\nexport const getInitDriveawayCostRequest = (): paymentOptionModel.IDriveAwayRequest => {\r\n    let init: paymentOptionModel.IDriveAwayRequest = {\r\n        Country: \"\",\r\n        State:  \"\",\r\n        VariantName:  \"\",\r\n        VariantID:  \"\",\r\n        VariantPrice:  0,\r\n        ExteriorID: \"\",\r\n        ExteriorName: \"\",\r\n        ExteriorPrice:  0,\r\n        InteriorID: \"\",\r\n        InteriorName: \"\",\r\n        InteriorPrice:  0,\r\n        Options: [],\r\n        SubTotal:  0,\r\n        DeliveryOption: \"\",\r\n        RegistrationType: \"\",\r\n        Distance: 0,\r\n        PostCode: \"\",\r\n        Suburb:  \"\",\r\n        CallSource: \"Main Page\",\r\n        IfCalculateFinance: true,\r\n        DeliveryPrice: 0,\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\nexport const getInitDriveawayCost = (): paymentOptionModel.IDriveAwayCost => {\r\n    let init: paymentOptionModel.IDriveAwayCost = {\r\n        LuxuryCarTax: 0,\r\n        LocalStampDuty: 0,\r\n        LocalRegistrationCost: 0,\r\n        LocalCTP: 0,\r\n        LocalPlateFee: 0,\r\n        HomeDelivery: 0,\r\n        DriveawayPrice: 0,\r\n        OnRoadFee: 0,\r\n        SubTotal: 0,\r\n        VariantName: \"\",\r\n        VariantID: \"\",\r\n        VariantPrice: 0,\r\n        ExteriorID: \"\",\r\n        ExteriorName: \"\",\r\n        ExteriorPrice: 0,\r\n        InteriorID: \"\",\r\n        InteriorName: \"\",\r\n        InteriorPrice: 0,\r\n        GST: 0,\r\n        RoadUserChargers: 0,\r\n        TyreStewardshipFee: 0,\r\n        Options: [],\r\n    };\r\n\r\n    return init;\r\n}","import * as paymentOptionModel from 'model/IPaymentOptions';\r\nimport * as financeStatusModel from 'model/IFinanceStatus';\r\n\r\nexport const getInitFinancePageState = (): paymentOptionModel.IFinancePageState => {\r\n    let init: paymentOptionModel.IFinancePageState = {\r\n        Country: null,\r\n        State: null,\r\n        RegistrationType: null,\r\n        SelectedTermOptions: null,\r\n        SelectedBalloonPaymentOptions: null,\r\n        SelectedPaymentFrequency: null,\r\n        Deposit: 1000,\r\n        DriveawayCost: 0,\r\n        InterestRate: \"\",\r\n        ComparisonRate: \"\",\r\n        FinanceAmount: \"\",\r\n        BallonAmount: \"\",\r\n        LoanPayment: 0,\r\n        LoanPaymentText: \"\",\r\n        CreditAssistanceFee: \"\",\r\n        MonthlyAccountFee: \"\",\r\n        FreqencyName: \"\",\r\n        NoOfMonth: \"\",\r\n        InterestRateTo: \"\",\r\n        TotalLoanPayment: \"\",\r\n        PPSR: \"\",\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\n\r\nexport const getInitFinanceRequest = (): paymentOptionModel.IFinanceRequest => {\r\n    let init: paymentOptionModel.IFinanceRequest = {\r\n        Country: null,\r\n        SelectedTermOptions: null,\r\n        SelectedBalloonPaymentOptions: null,\r\n        SelectedPaymentFrequency: null,\r\n        Deposit: 1000,\r\n        DriveawayCost: 0,\r\n        Source: null\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\nexport const getInitFinanceStatus = (): financeStatusModel.IFinanceStatus => {\r\n    let init: financeStatusModel.IFinanceStatus = {\r\n        Country: null,\r\n        YanaCustomerID: null,\r\n        YanaCustomerNo: null,\r\n        YanaOrderID: null,\r\n        YanaOrderNo: null,\r\n        FinanceApplicationStepName: null,\r\n        FinanceApplicationStepLink: null\r\n    };\r\n\r\n    return init;\r\n}","import { getBackendPath } from 'helpers/Uri';\r\nimport { ILandingPage, ILandingPageRequest } from 'model/ILandingPage';\r\nimport * as availableInventoryModel from 'model/IAvailableInventory';\r\nimport * as variantModel from 'model/IVehicle';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const getAvailableInventoryFilters = async (\r\n    country: string,\r\n    needDefaultValue: boolean,\r\n    variantRequest: variantModel.IVariantYanaRequest\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            Country: country,\r\n            NeedDefaultValue: needDefaultValue,\r\n            Variant: variantRequest\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Vehicle/get-available-inventory-filters`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getAvailableInventory = async (\r\n    availableInventory: availableInventoryModel.IAvailableInventoryRequest,\r\n    abortSignal?: any,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(availableInventory),\r\n        credentials: 'include',\r\n        signal: abortSignal,\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Vehicle/get-available-inventory-item`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getLandingPage = async (\r\n    landing: ILandingPageRequest\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(landing),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Vehicle/get-landing-page`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\nexport const getVariants = async (\r\n    requestData: variantModel.IVariantYanaRequest\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(requestData),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Vehicle/get-variants`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getExteriors = async (\r\n    requestData: variantModel.IExterior\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(requestData),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Vehicle/get-exterior`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getInteriors = async (\r\n    requestData: variantModel.IInterior\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(requestData),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Vehicle/get-interior`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getOptions = async (\r\n    requestData: variantModel.IVehicleOptionRequest\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(requestData),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Vehicle/get-vehicle-options`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import { ILandingPage } from 'model/ILandingPage';\r\nimport * as rdEnum from 'helpers/enum';\r\nexport const getInitLandingPage = (): ILandingPage => {\r\n    let init: ILandingPage = {\r\n        Country: \"\",\r\n        State: \"\",\r\n        Postcode: \"\",\r\n        Suburb: \"\",\r\n        CustomerType: rdEnum.enumClientTypes.Private.Code,\r\n        Model: rdEnum.constModel,\r\n        Subtotal: null,\r\n        DriveAwayCost: null,\r\n        Available: \"\",\r\n        YanaVariantID: \"\",\r\n        YanaVariantName: \"\",\r\n        VariantPrice: 0,\r\n        ExteriorID: \"\",\r\n        ExteriorPrice: 0,\r\n        InteriorID: \"\",\r\n        InteriorPrice: 0,\r\n        Options: [],\r\n        LoadPaymentText: \"\",\r\n        FrequentlyText: \"\",\r\n    };\r\n\r\n    return init;\r\n}","import { IChargingDialogProps } from 'model/IChargingDialogProps';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useState } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { currencyFormat } from 'helpers/Uri';\r\nimport { isNil } from 'lodash';\r\n\r\nconst ImportantInfoDialog = () => {\r\n    const dispatch = useDispatch();\r\n\r\n    const selectedLocationFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n    }\r\n\r\n    const handleDialogHide = () => {\r\n        setIsOpen(false);\r\n    }\r\n\r\n    const toPrivacy = () => {\r\n        window.open('https://www.mtf.co.nz/privacy-statement/')\r\n    }\r\n\r\n    const toRatesFees = () => {\r\n        window.open('https://www.mtf.co.nz/resources/interest-rates-and-fees/')\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className='important-info-box'>\r\n                <span className='important-info-link' onClick={() => {\r\n                    handleDialogOpen();\r\n                }}><sup>1,&nbsp;2</sup>Important Information</span>.\r\n                <span>&nbsp;Overseas model shown.</span>\r\n            </div>\r\n\r\n            <Dialog \r\n                header=\"\" className='important-info-dialog' visible={isOpen} position='bottom'\r\n                onHide={() => handleDialogHide()}\r\n                draggable={false} resizable={true}\r\n            >\r\n                <div className='title-panel'>\r\n                    <h1>IMPORTANT INFORMATION</h1>\r\n                </div>\r\n                <br/>\r\n                {/* <p className='info-paragraph'>\r\n                    <sup>1</sup>This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. Actual drive away price may differ depending on your individual circumstances. Price does not take into account any discount, rebate or promotion that may be available from time to time. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. Vehicle registration includes 12 months’ registration fees, 12 months’ CTP insurance and any other associated charges in accordance with country, state and/or territory legislation. Cadillac reserves the right to make changes to this website on any information and elements as time progresses, e.g. to final prices, taxes etc. The website may vary from market to market and is subject to change without notice.\r\n                </p>\r\n                <br/>\r\n                <p className='info-paragraph'>\r\n                    Finance provided to approved applicants by Plenti Finance Pty Limited ABN 82 636 759 861.\r\n                </p>\r\n                <br/>\r\n                <p className='info-paragraph'>\r\n                    <sup>2</sup>The comparison rate is based on a secured car loan of $30,000 repaid over 60 months at an interest rate of 1.99% p.a.. WARNING: This comparison rate is true only for the examples given and may not include all fees and charges. Different terms, fees or other loan amounts might result in a different comparison rate. Finance provided to approved applicants by Plenti Finance Pty Limited ABN 82 636 759 861.                \r\n                </p>\r\n                <p className='info-paragraph'>\r\n                    Terms, conditions and fees apply to any loan. Any calculations made by this calculator are dependent on the accuracy of the information provided, are intended to be used as a guide only, must not be relied on for any reason as conclusive, and do not constitute a quote. Your application will be subject to a credit approval process and lending criteria. Cadillac will not store the information provided in this calculator. Cadillac and their finance partner do not accept any responsibility for any loss, costs, or liability directly or indirectly incurred by persons who rely on any amount calculated by this calculator.\r\n                </p>\r\n                <p className='info-paragraph'>\r\n                    Order and apply for finance on an eligible Cadillac vehicle by 31 August 2024 and take delivery by 30 September 2024 to qualify. Valid only for eligible purchases of new Cadillac configurations for finance loan terms up to 5 years. Not eligible with balloon repayments. Credit subject to financier's approval. Terms, conditions, fees and charges apply Interest rates are subject to change.\r\n                </p>\r\n                <p className='info-paragraph'>\r\n                    This information does not constitute financial advice and you should consider whether it is appropriate to your circumstances before you act in reliance on it. For detailed advice and to discuss finance options tailored to your needs to determine the best finance option for your circumstances, we recommend speaking with a licensed independent financial advisor.\r\n                </p>\r\n                <br/>\r\n                <p className='info-paragraph'>\r\n                    <sup>3</sup>Availability is an estimate only and subject to change without notice. More accurate timing will be provided upon order and closer to the time of delivery.\r\n                </p> */}\r\n                 {/* <p className='info-paragraph'>\r\n                    <sup>1</sup>This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), luxury car tax (LCT), stamp duty, compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                </p> */}\r\n                {\r\n                    selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                    ?\r\n                    <p className='info-paragraph'>\r\n                        <sup>1</sup>This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), luxury car tax (LCT), stamp duty, compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                    </p>\r\n                    :\r\n                    <p className='info-paragraph'>\r\n                        <sup>1</sup>This is the drive away price for the selected country, state or territory. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                    </p>\r\n                }\r\n                {/* <p className='info-paragraph'>\r\n                    <sup>2</sup>This monthly repayment has been estimated using a calculator developed by Cadillac in partnership with finance partners referenced below as a guide only. The repayment is indicative and intended for illustrative purposes only. Cadillac will not store the information provided in this calculator. This repayment estimate should not be considered a loan application or an offer of finance. This repayment estimate does not take into account your personal circumstances or any fees and charges or government taxes which may apply.\r\n\r\n                </p>\r\n                {\r\n                    selectedLocationFromStore?.Country?.name == 'Australia'\r\n                    ?\r\n                    <p className='info-paragraph'>\r\n                        [Placeholder for Plenti Disclaimer – waiting on final version]\r\n                    </p>\r\n                    :\r\n                    <p className='info-paragraph'>\r\n                        Finance is provided by MTF subject to its approval process, lending criteria and checks. Terms, conditions and fees apply to any offer of finance. Any personal information we collect about you may be shared with MTF and will be treated in accordance with <a onClick={() => toPrivacy()}>MTF privacy statement</a>. Calculator information is for illustrative purposes only and must not be relied upon for any reason. The information on this page is not financial advice or an offer of finance. Interest rates are subject to change. Your interest rate may be lower or higher depending on your credit history and other factors. For more information see <a onClick={() => toRatesFees()}>rates, fees and charges</a> to understand what borrowing may cost you. We recommend that you seek independent financial advice for your unique circumstances. Cadillac and MTF do not accept any responsibility for any direct or indirect loss, cost, or liability incurred by persons who rely on any calculator information.\r\n                    </p>\r\n                } */}\r\n                <p className='info-paragraph'>\r\n                    {/* <sup>3</sup>Availability and delivery dates are estimates only. Many factors impact vehicle delivery. Cadillac reserves the right to make changes to availability and delivery dates displayed throughout this configurator without notice. */}\r\n                    <sup>2</sup>Availability and delivery dates are estimates only. Many factors impact vehicle delivery. Cadillac reserves the right to make changes to availability and delivery dates displayed throughout this configurator without notice.\r\n                </p>\r\n                <p className='info-paragraph'>\r\n                    The information presented in this configurator is based on data available at the time. Cadillac reserves the right to make changes to this website and any information and elements as time progresses (e.g. to design, specifications, prices, taxes, delivery dates etc). The website may vary from market to market and is subject to change.\r\n                </p>\r\n                {/* <p className='info-paragraph'>\r\n                    `The information presented in this configurator is based on data available at the time. Cadillac reserves the right to make changes to this website on any information and elements as time progresses, e.g. to design, specifications, final prices, taxes, delivery dates etc. The website may vary from market to market and is subject to change without notice.\r\n                </p> */}\r\n                <p className='info-paragraph'>\r\n                    {/* Vehicle shown on this page is a simulated overseas model. Actual production vehicles will vary. Vehicles shown here after are simulated local production vehicles intended for illustrative purposes. Cadillac has taken reasonable steps to ensure your digital configuration replicates the vehicle you receive in real life. Colours and other features may appear different in real life. */}\r\n                    The vehicle shown on this page is a simulated overseas model. Actual production vehicles will vary. Vehicles shown here after are simulated local production vehicles intended for illustrative purposes only. Cadillac has taken reasonable steps to ensure your digital configuration replicates the vehicle you receive in real life, however Cadillac cannot guarantee its accuracy. Colours and other features may appear different in real life.\r\n                </p>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ImportantInfoDialog","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useEffect, useRef, useState } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nconst DesignYourDialog = () => {\r\n    \r\n    const [isScrolled, setIsScrolled] = useState(false);\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n    }\r\n\r\n    const handleDialogHide = () => {\r\n        setIsOpen(false);\r\n    }\r\n\r\n   // console.log(isOpen);\r\n\r\n    const handleScroll = (event: any) => {\r\n        const scrollTop = event.target.scrollTop;\r\n        setIsScrolled(scrollTop > 50);\r\n      };\r\n\r\n   \r\n    const handleDialogShow = () => {\r\n        const dialogContents = document.querySelectorAll('.p-dialog-content');\r\n    \r\n        dialogContents.forEach((dialogContent) => {\r\n            dialogContent.addEventListener('scroll', handleScroll);\r\n        });\r\n    };\r\n    \r\n    //This useEffect used to detect the scrollTop distance and if it larger than 100, \r\n    //the 'Scroll to learn more' context will disappear\r\n    // Clean up event listeners when the dialog is hidden\r\n    useEffect(() => {\r\n        if (!isOpen) {\r\n        const dialogContents = document.querySelectorAll('.p-dialog-content');\r\n        dialogContents.forEach((dialogContent) => {\r\n            dialogContent.removeEventListener('scroll', handleScroll);\r\n        });\r\n        }\r\n    }, [isOpen]);\r\n\r\n    const crossIcon = (\r\n        <button className=\"p-dialog-titlebar-icon p-link\" onClick={() => handleDialogHide()}>\r\n            <img alt=\"\" className='close-icon' src={`${getCMSAssets()}/main/cross-white.svg`} />\r\n        </button>\r\n    )\r\n\r\n    return (\r\n        <>\r\n            <div className='design-your-box' onClick={() => {handleDialogOpen()}}>\r\n                <span>DESIGN YOUR</span>\r\n            </div>\r\n        </>\r\n    )\r\n  }\r\n\r\nexport default DesignYourDialog","// This component defines a global scroll function that provides every component which import to use 'useScroll' \r\n// can redirect to HomePage(with multiple sections) and then automatically scroll to the specific section.\r\n// The necessary for display the preLoader or landing country & state selection Dialog depend on requirements.\r\n// Notice 'd2c-container' div may lose its scrollbar, and need to handle to let it overflow-y: scroll again.\r\nimport React, { createContext, useRef, useContext } from 'react';\r\nimport * as rdEnum from 'helpers/enum';\r\n\r\ninterface ScrollContextType {\r\n    scrollToSection: (section: string) => void;\r\n    variantRef: React.RefObject<HTMLDivElement>;\r\n    exteriorRef: React.RefObject<HTMLDivElement>;\r\n    interiorRef: React.RefObject<HTMLDivElement>;\r\n    financeRef: React.RefObject<HTMLDivElement>;\r\n    chargingRef: React.RefObject<HTMLDivElement>;\r\n    paymentRef: React.RefObject<HTMLElement>;\r\n    deliveryComponentRef: React.RefObject<any>;\r\n    deliveryRef: React.RefObject<HTMLDivElement>;\r\n    checkoutRef: React.RefObject<HTMLDivElement>;\r\n    watchlistRef: React.RefObject<HTMLDivElement>;\r\n}\r\n\r\nconst ScrollToSection = createContext<ScrollContextType | undefined>(undefined);\r\n\r\nexport const ScrollProvider = ({ children }: any) => {\r\n    const variantRef = useRef<HTMLDivElement>(null);\r\n    const exteriorRef = useRef<HTMLDivElement>(null);\r\n    const interiorRef = useRef<HTMLDivElement>(null);\r\n    const financeRef = useRef<HTMLDivElement>(null);\r\n    const chargingRef = useRef<HTMLDivElement>(null);\r\n    const paymentRef = useRef<HTMLDivElement>(null);\r\n    const deliveryComponentRef = useRef<any>(null);\r\n    const deliveryRef = useRef<HTMLDivElement>(null);\r\n    const checkoutRef = useRef<HTMLDivElement>(null);\r\n    const watchlistRef = useRef<HTMLDivElement>(null);\r\n\r\n    const scrollToSection = (section: string) => {\r\n        switch (section) {\r\n            case rdEnum.enumScrollSection.Variant:\r\n                variantRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.Exterior:\r\n                exteriorRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.Interior:\r\n                interiorRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.Accessories:\r\n                financeRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.Charging:\r\n                chargingRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.Payment:\r\n                paymentRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.Delivery:\r\n                deliveryRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.Checkout:\r\n                checkoutRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            case rdEnum.enumScrollSection.CheckoutForm:\r\n                watchlistRef.current?.scrollIntoView({ behavior: 'smooth' });\r\n                break;\r\n            default:\r\n                break;\r\n        }\r\n    };\r\n\r\n    return (\r\n        <ScrollToSection.Provider value={{ scrollToSection, variantRef, exteriorRef, interiorRef, financeRef, chargingRef, paymentRef, deliveryComponentRef, deliveryRef, checkoutRef, watchlistRef }}>\r\n            {children}\r\n        </ScrollToSection.Provider>\r\n    );\r\n};\r\n\r\nexport const useScroll = (): ScrollContextType => {\r\n    const context = useContext(ScrollToSection);\r\n    if (!context) {\r\n        throw new Error('useScroll must be used within a ScrollProvider');\r\n    }\r\n    return context;\r\n};\r\n\r\n\r\n","import { useEffect } from 'react';\r\n\r\n// Define types for `_satellite` if not already defined\r\n//declare global {\r\n//    interface Window {\r\n//        _satellite: {\r\n//            track: (event: string, data?: Record<string, any>) => void;\r\n//            getVar: (name: string) => any;\r\n//            [key: string]: any; // Include any other methods you may use\r\n//        };\r\n//    }\r\n//}\r\n\r\nexport const useSatellite = () => {\r\n    const trackEvent = (event: string) => {\r\n        if (window._satellite) {\r\n            window._satellite.track(event);\r\n        } else {\r\n            console.warn('Satellite is not defined.');\r\n        }\r\n    };\r\n\r\n    const getVariable = (name: string) => {\r\n        if (window._satellite) {\r\n            return window._satellite.getVar(name);\r\n        }\r\n        return undefined;\r\n    };\r\n\r\n    return { trackEvent, getVariable };\r\n};\r\n","import { getCMSAssets, getFrontendUrl } from 'helpers/Uri'\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport { Button, Col, Row } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { isNil } from 'lodash';\r\n\r\nimport PaymentOptions, { ChildRef } from 'components/PaymentOptions';\r\nimport { setCountryStateAction } from 'stores/Session';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { ICodeName } from 'model/ICommon';\r\n\r\nimport * as paymentOptionStore from 'stores/PaymentOptions';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as rdHelper from 'helpers/Uri';\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport * as vehicleStore from 'stores/Vehicle';\r\nimport * as selectedDeliveryStore from \"stores/UserSelectedDelivery\";\r\nimport * as paymentOptionsStore from \"stores/PaymentOptions\";\r\nimport * as customerTypeStore from \"stores/CustomerType\";\r\nimport * as defaultConfigStore from 'stores/DefaultConfig';\r\nimport * as linkSourceStore from \"stores/LinkSource\";\r\n\r\nimport { ILandingPage, ILandingPageRequest } from 'model/ILandingPage';\r\nimport * as defaultConfigModel from 'model/IDefaultConfig';\r\nimport * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as availableInventoryModel from 'model/IAvailableInventory';\r\nimport * as paymentOptionsModel from 'model/IPaymentOptions';\r\nimport * as paymentOptionsService from 'services/PaymentOptions';\r\nimport * as vehicleService from 'services/Vehicle';\r\nimport * as landingPageHelper from 'businessHelpers/LandingPageHelper';\r\n\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\n\r\nimport { useCountryState } from 'helpers/useCountryState';\r\nimport ImportantInfoDialog from './landing/ImportantInfoDialog';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\nimport DesignYourDialog from './landing/DesignYourDialog';\r\nimport { setMainPageNumber } from 'stores/MainPageNumber';\r\nimport { useScroll } from 'pages/Main/ScrollToSection';\r\nimport { setGlobalDropdown } from 'stores/GlobalDropdown';\r\nimport LocationPopUp from 'components/LocationPopUp';\r\nimport { useSatellite } from 'helpers/useSatellite';\r\n\r\n\r\ninterface IDialogOpen {\r\n    isGlobalDialogOpen: boolean\r\n}\r\n\r\ninterface IPreLoaderOpenProps {\r\n    closePreLoader: boolean,\r\n    isFromOtherPage: boolean,\r\n}\r\n\r\nconst GlobalTheme = (props: IDialogOpen) => {\r\n\r\n    const { isGlobalDialogOpen } = props\r\n\r\n    const dispatch = useDispatch();\r\n    const countryState = useCountryState();\r\n\r\n    const navigate = useNavigate();\r\n    const satellite = useSatellite();\r\n    const paymentOpionsRef = useRef<ChildRef | null>(null);\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(true);\r\n\r\n    const [loaderVisible, setLoaderVisible] = useState(true);\r\n\r\n    const location = useLocation();\r\n    const preloader = location.state as IPreLoaderOpenProps || { closeLoader: false, isFromOtherPage: false };\r\n\r\n    const [initialLocation, setInitialLocation] = useState(location);\r\n\r\n    const [isHovered, setIsHovered] = useState(false);\r\n\r\n    const [loadPayment, setLoadPayment] = useState(0);\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const countryStateFromStore = useSelector((state: IAppState) => {\r\n        return state.countryStateList;\r\n    });\r\n    //const customerTypeFromStore = useSelector((state: IAppState) => {\r\n    //    return state.customerType;\r\n    //});\r\n    //const financeFromStore = useSelector((state: IAppState) => {\r\n    //    return state.paymentOptions.Finance;\r\n    //});\r\n\r\n    useEffect(() => {\r\n        setDialogVisible(isGlobalDialogOpen);\r\n        dispatch(checkIsShowScrollBar(false));\r\n    }, [isGlobalDialogOpen]);\r\n\r\n    const menuGlobalBtn = useSelector((state: IAppState) => {\r\n        return state.globalDropdown\r\n    })\r\n\r\n    //Crucial, next 2 useEffect manipulate the functions for display or hide the right scrollbar\r\n    //Frist one, when preloader displays, hide 2.3s, until country state dialog popup\r\n    useEffect(() => {\r\n\r\n        const sections = document.querySelectorAll('.d2c-container');\r\n        if (!preloader?.closePreLoader && !preloader?.isFromOtherPage) {\r\n            sections.forEach((section: any) => {\r\n                section.style.overflowY = 'hidden';\r\n                // section.style.paddingRight = '15px';\r\n            });\r\n\r\n            const timeout = setTimeout(() => {\r\n                sections.forEach((section: any) => {\r\n                    section.style.overflowY = 'scroll';\r\n                    // section.style.paddingRight = '0px';\r\n                });\r\n                setLoaderVisible(false);\r\n            }, 2300); // 2.3 seconds timeout\r\n\r\n            return () => clearTimeout(timeout); // Cleanup timeout on unmount or when loader becomes invisible\r\n        } else if (preloader?.isFromOtherPage) {\r\n            setLoaderVisible(false);\r\n            setDialogVisible(false);\r\n            sections.forEach((section: any) => {\r\n                section.style.overflowY = 'scroll';\r\n                // section.style.paddingRight = '0px';\r\n            });\r\n        } else {\r\n\r\n            setLoaderVisible(false);\r\n            setDialogVisible(false);\r\n        }\r\n\r\n    }, []);\r\n\r\n    // console.log('Global Button' + menuGlobalBtn.vehicles, menuGlobalBtn.shop, !preloader?.closePreLoader)\r\n\r\n    //Second one, when click global menu button and global dropdown panel collapse, hide until close the dropdown\r\n    useEffect(() => {\r\n        const sections = document.querySelectorAll('.d2c-container');\r\n\r\n        if (menuGlobalBtn.vehicles || menuGlobalBtn.shop || loaderVisible) {\r\n            sections.forEach((section: any) => {\r\n\r\n                section.style.overflowY = 'hidden';\r\n                // section.style.paddingRight = '0px';\r\n            });\r\n        } else {\r\n            sections.forEach((section: any) => {\r\n                section.style.overflowY = 'scroll';\r\n                // section.style.paddingRight = '15px';\r\n            });\r\n        }\r\n    }, [menuGlobalBtn]);\r\n\r\n    const [countries, setCountries] = useState<ICodeName[]>([]);\r\n    const [selectedCountry, setSelectedCountry] = useState<ICodeName>();\r\n\r\n    const [states, setStates] = useState<ICodeName[]>([]);\r\n    const [selectedState, setSelectedState] = useState<any>(null);\r\n\r\n    const doGetCountry = async () => {\r\n        let country = await countryState.getCountry();\r\n        setCountries(country);\r\n    }\r\n\r\n    const doGetStates = async () => {\r\n        let states = await countryState.getStates(rdEnum.enumCountryCode.Australia);\r\n        setStates(states);\r\n    }\r\n\r\n\r\n    useEffect(() => {\r\n        doGetCountry();\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        setSelectedCountry({ code: \"\", name: \"\" });\r\n        doGetStates();\r\n    }, [countryStateFromStore]);\r\n\r\n\r\n    const [landingPage, setLandingPage] = useState<ILandingPage>(landingPageHelper.getInitLandingPage());\r\n\r\n    const handleHover = () => {\r\n        setIsHovered((prevIsHovered) => !prevIsHovered);\r\n    };\r\n\r\n    const onCountryChange = (e: any) => {\r\n        setSelectedCountry(e.value);\r\n    }\r\n\r\n    const onStateChange = (e: any) => {\r\n        setSelectedState(e.value);\r\n    }\r\n\r\n    const onHide = () => {\r\n        if ((selectedCountry?.code == rdEnum.enumCountryCode.Australia && selectedState)\r\n            || selectedCountry?.code == rdEnum.enumCountryCode.NewZealand) {\r\n            // document.body.style.overflowY = 'scroll';\r\n            // document.body.style.paddingRight = '0px';\r\n            dispatch(checkIsShowScrollBar(true));\r\n            setDialogVisible(false);\r\n            dispatch(setCountryStateAction({ Country: selectedCountry, State: selectedState }));\r\n        }\r\n    }\r\n\r\n    const onSubmit = () => {\r\n        if ((selectedCountry?.code == rdEnum.enumCountryCode.Australia && selectedState)\r\n            || selectedCountry?.code == rdEnum.enumCountryCode.NewZealand) {\r\n            // document.body.style.overflowY = 'scroll';\r\n            // document.body.style.paddingRight = '0px';\r\n            dispatch(checkIsShowScrollBar(true));\r\n\r\n            //Invoke the onHide function for 1. dispatch Country & State to store, 2. close dialog\r\n            onHide();\r\n\r\n            //clear selected vehicle data\r\n            //dispatch(selectedConfigStore.clearSelectedConfigAction());\r\n\r\n            //update country/state store before call landing page api as this api is too slow to impact on getting variant/exterior/interior\r\n            let delivery: selectedConfigModel.ISelectedDelivery = {\r\n                Country: selectedCountry,\r\n                State: selectedCountry?.code == rdEnum.enumCountryCode.NewZealand ? null : selectedState,\r\n                SelectedPickupLocation: null,\r\n                SelectedDeliveryOption: null,\r\n                SelectedDeliveryFullAddress: null,\r\n                SelectedDeliveryPostcode: null,\r\n                SelectedDeliveryState: null,\r\n                SelectedDeliverySuburb: null,\r\n                //EstDeliveryDate: null,\r\n                PrimaryAddress: null,\r\n                PrimaryPostcode: null,\r\n                PrimarySuburb: null,\r\n                PrimaryState: null,\r\n                InvalidPrimaryAddress: null,\r\n                DeliveryPrice: null,\r\n                DeliveryAvailable: null,\r\n                DeliveryPriceErrorCode: null,\r\n                DeliveryDistance: null,\r\n                PickupLocationName: null,\r\n            };\r\n            dispatch(selectedDeliveryStore.updateDeliveryAction(delivery));\r\n\r\n            //default set payment options as cash\r\n            dispatch(paymentOptionsStore.updateSelectedPaymentOptionAction(rdEnum.enumPaymentOptions.Cash));\r\n\r\n            //default set customer type as private customer\r\n            dispatch(customerTypeStore.setCustomerTypeAction(rdEnum.enumClientTypes.Private.Code));\r\n\r\n            //Normal entry\r\n            //if the users are from interest link or from inventory page, wont show this popup\r\n            //so clear default config store for interest link and inventory\r\n            let defaultConfig: defaultConfigModel.IDefaultConfig = {\r\n                Country: null,\r\n                State: null,\r\n                VariantName: null,\r\n                ExteriorName: null,\r\n                InteriorName: null,\r\n                Options: [],\r\n                Loaded: false,\r\n                LinkKey: null,\r\n                ExpiryDateText: null\r\n            }\r\n            dispatch(defaultConfigStore.setDefaultConfigAction(defaultConfig));\r\n            dispatch(linkSourceStore.setLinkSourceAction(null));\r\n\r\n            satellite.trackEvent(\"config-start\");            \r\n            \r\n        }\r\n    }\r\n\r\n    useEffect(() => {\r\n\r\n        if ((!isNil(selectedDeliveryFromStore?.Country?.code) && selectedDeliveryFromStore?.Country?.code == \"AU\"\r\n            && !isNil(selectedDeliveryFromStore?.State?.code) && selectedDeliveryFromStore?.State?.code != \"\")\r\n            || (!isNil(selectedDeliveryFromStore?.Country?.code) && selectedDeliveryFromStore?.Country?.code == \"NZ\")\r\n        ) {\r\n            //console.log(\"call landing page\")\r\n            doGetLandingPage();\r\n        }\r\n    }, [selectedDeliveryFromStore?.Country?.code, selectedDeliveryFromStore?.State?.code]);\r\n\r\n\r\n\r\n    const doGetLandingPage = async () => {\r\n\r\n        //country and state must be from store as users could be from interest link\r\n        let request: ILandingPageRequest = {\r\n            //...landingPage,\r\n            Country: selectedDeliveryFromStore?.Country?.code || \"\",\r\n            State: selectedDeliveryFromStore?.State?.code || \"\",\r\n            Postcode: \"\",\r\n            Suburb: \"\",\r\n            CustomerType: rdEnum.enumClientTypes.Private.Code,\r\n            Model: rdEnum.constModel\r\n        };\r\n        let response = await vehicleService.getLandingPage(request);\r\n        if (response.status) {\r\n            let landingData: ILandingPage = {\r\n                Country: response.data.country,\r\n                State: response.data.state,\r\n                Postcode: response.data.postcode,\r\n                Suburb: response.data.suburb,\r\n                CustomerType: rdEnum.enumClientTypes.Private.Code,\r\n                Model: request.Model,\r\n                Subtotal: response.data.subTotal,\r\n                DriveAwayCost: response.data.driveawayCost,\r\n                Available: response.data.available,\r\n                YanaVariantID: response.data.yanaVariantId,\r\n                YanaVariantName: response.data.variantName,\r\n                VariantPrice: response.data.variantPrice,\r\n                ExteriorID: response.data.exteriorId,\r\n                ExteriorPrice: response.data.exteriorPrice,\r\n                InteriorID: response.data.interiorId,\r\n                InteriorPrice: response.data.interiorPrice,\r\n                LoadPaymentText: response.data.loanPaymentText,\r\n                FrequentlyText: response.data.frequentlyText,\r\n                Options: [{\r\n                    YanaOptionID: null,\r\n                    OptionType: response.data.optionType,\r\n                    OptionName: response.data.optionName,\r\n                    OptionPrice: response.data.optionPrice,\r\n                    OptionPicture: [],\r\n                    OptionPictureMobile: [],\r\n                    OptionDesc: null,\r\n                    ChargeType: null,\r\n                    Disable: false,\r\n                    TermsDescription: null\r\n                }]\r\n            }\r\n            setLandingPage(landingData);\r\n\r\n            ////update available\r\n            //dispatch(selectedDeliveryStore.updateEstDeliveryDateAction(response.data.available));\r\n\r\n\r\n            ////get loan payment\r\n            //doGetLoanPayment(response.data.driveawayCost);\r\n        }\r\n        else {\r\n            setLandingPage(landingPageHelper.getInitLandingPage());\r\n        }\r\n\r\n    }\r\n\r\n\r\n    const openCashFinanceDialog = () => {\r\n\r\n        if (paymentOpionsRef.current) {\r\n            paymentOpionsRef.current.openDialog();\r\n            //dispatch(paymentOptionStore.updateSelectedPaymentOptionAction(rdEnum.enumPaymentOptions.Finance));\r\n        }\r\n\r\n    };\r\n\r\n    const { scrollToSection } = useScroll();\r\n\r\n    const toVariant = () => {\r\n        setTimeout(() => {\r\n            scrollToSection('variant')\r\n        }, 200);\r\n        dispatch(setMainPageNumber(0));\r\n    }\r\n\r\n    const toTestDrive = () => {\r\n        // navigate(`${getFrontendUrl()}/test-drive`);\r\n        // dispatch(setGlobalDropdown(false, false));\r\n        // dispatch(checkIsShowScrollBar(true))\r\n        window.open('https://www.cadillacanz.com/au-en/register');\r\n    }\r\n\r\n    const isAndroid = /Android/i.test(navigator.userAgent);\r\n    const isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent);\r\n\r\n    const globalContentBox = document.querySelector('.global-content-box');\r\n\r\n    if (globalContentBox) {\r\n        if (isAndroid) {\r\n            globalContentBox.classList.add('android');\r\n        } else if (isIOS) {\r\n            globalContentBox.classList.add('ios');\r\n        }\r\n    }\r\n\r\n    const [videoKey, setVideoKey] = useState(0);\r\n\r\n    // useEffect(() => {\r\n    //     const handleResize = () => {\r\n    //         // Re-trigger the video by updating the key\r\n    //         setVideoKey((prevKey: any) => prevKey + 1);\r\n    //     };\r\n\r\n    //     // Add event listener to window resize\r\n    //     window.addEventListener('resize', handleResize);\r\n\r\n    //     // Cleanup the event listener on component unmount\r\n    //     return () => {\r\n    //         window.removeEventListener('resize', handleResize);\r\n    //     };\r\n    // }, []);\r\n\r\n\r\n    // const videoRef = useRef<HTMLVideoElement | null>(null);\r\n    const lastSecondBuffer = 0.1; // Small buffer to ensure we detect the last second\r\n\r\n    // useEffect(() => {\r\n    //     const handleResize = () => {\r\n    //         // Re-trigger the video by updating the key\r\n    //         setVideoKey((prevKey: any) => prevKey + 1);\r\n    //     };\r\n\r\n    //     // Add event listener to window resize\r\n    //     window.addEventListener(\"resize\", handleResize);\r\n\r\n    //     return () => {\r\n    //         window.removeEventListener(\"resize\", handleResize);\r\n    //     };\r\n    // }, []);\r\n\r\n\r\n    // useEffect(() => {\r\n    //     const ensureVideoReady = () => {\r\n    //         if (videoRef.current) {\r\n    //             videoRef.current.play().catch((err) => console.error(\"Video failed to play:\", err));\r\n    //         }\r\n    //     };\r\n    \r\n    //     if (videoRef.current) {\r\n    //         videoRef.current.addEventListener(\"loadeddata\", ensureVideoReady);\r\n    //     }\r\n    \r\n    //     return () => {\r\n    //         if (videoRef.current) {\r\n    //             videoRef.current.removeEventListener(\"loadeddata\", ensureVideoReady);\r\n    //         }\r\n    //     };\r\n    // }, []);\r\n\r\n    \r\n\r\n    const videoRef = useRef<any>(null);\r\n\r\n    useEffect(() => {\r\n        const handleVisibilityChange = () => {\r\n            if (!document.hidden && videoRef.current) {\r\n                // Safari-specific workaround: reload and play\r\n                if (videoRef.current.ended) {\r\n                    videoRef.current.pause();\r\n                    videoRef.current.currentTime = videoRef.current.duration;\r\n                }\r\n            }\r\n        };\r\n\r\n        document.addEventListener(\"visibilitychange\", handleVisibilityChange);\r\n        return () => {\r\n            document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\r\n        };\r\n    }, []);\r\n\r\n    return (\r\n        <>\r\n            {\r\n                dialogVisible && loaderVisible && (\r\n                    <div className='pre-loader'>\r\n                        <img className=\"img\" alt=\"Info icon\" src={`${getCMSAssets()}/home/brand-loader.gif`} />\r\n                    </div>\r\n                )\r\n            }\r\n\r\n            {/* *****Initial Location Popup, Very Important**** */}\r\n            <Dialog header={isNil(selectedCountry?.code) || !selectedCountry?.code || selectedCountry?.code == rdEnum.enumCountryCode.NewZealand ? \"SELECT YOUR COUNTRY\" : 'SELECT YOUR LOCATION'}\r\n                className='global-dialog' visible={dialogVisible && !loaderVisible} position='bottom' draggable={false} resizable={true}\r\n                onHide={() => onHide()}>\r\n                <div className='dropdown-container'>\r\n                    <Dropdown\r\n                        value={selectedCountry}\r\n                        options={countries.length > 0 ? countries : [{ name: \"Loading...\", value: \"\" }]}\r\n                        onChange={(e) => onCountryChange(e)}\r\n                        className='global-location-dropdown'\r\n                        optionLabel=\"name\"\r\n                        placeholder={ !isNil(countries) && countries.length > 0 ? \"Country\" : \"Loading...\"} \r\n                    />\r\n\r\n                    <Dropdown\r\n                        value={selectedState}\r\n                        options={states.length > 0 ? states : [{ name: \"Loading...\", value: \"\" }]}\r\n                        onChange={(e) => onStateChange(e)}\r\n                        className='global-location-dropdown'\r\n                        style={{ display: selectedCountry?.code == rdEnum.enumCountryCode.NewZealand ? 'none' : '' }}\r\n                        optionLabel=\"name\"\r\n                        placeholder={ !isNil(countries) && states.length > 0 ? \"State\" : \"Loading...\"} \r\n                        disabled={!selectedCountry?.code}\r\n                    />\r\n                </div>\r\n\r\n                <Button className='global-location-btn'\r\n                    onMouseEnter={handleHover}\r\n                    onMouseLeave={handleHover}\r\n                    onClick={() => onSubmit()}\r\n                >\r\n                    <span >SUBMIT</span>\r\n                </Button>\r\n            </Dialog> \r\n            {/* *****Initial Location Popup, Very Important**** */}\r\n\r\n \r\n\r\n            {\r\n                !dialogVisible && (\r\n                    <div className='global-content-page'>\r\n                        <div className='global-content-container'>\r\n                            <div className='global-content-box'>\r\n                                <DesignYourDialog />\r\n                                <div className='content-brand-name'>CADILLAC LYRIQ</div>\r\n                                <div className='content-desc'>\r\n                                    <p> Starting at {rdHelper.currencyFormatWithBlank(landingPage?.DriveAwayCost || 0)}<sup>1</sup> on-road.&nbsp; {/*&nbsp;or {landingPage.LoadPaymentText}/{landingPage.FrequentlyText}<sup>2</sup>*/}</p>\r\n\r\n                                    {/*{!isNil(landingPage?.Available) && landingPage?.Available != \"\" && (*/}\r\n                                    {/*    <p>*/}\r\n                                    {/*        Available {landingPage?.Available}*/}\r\n                                    {/*        <sup>2</sup>*/}\r\n                                    {/*    </p>*/}\r\n                                    {/*)}*/}\r\n                                </div>\r\n                                {/*{!isNil(landingPage?.Available) && landingPage?.Available != \"\" && (*/}\r\n                                {/*    <div className='estimate-time'>*/}\r\n                                {/*        Available {landingPage?.Available}*/}\r\n                                {/*        <sup>3</sup>*/}\r\n                                {/*    </div>*/}\r\n                                {/*)}*/}\r\n                                {/*<MoreInfo />*/}\r\n                                <div className='global-popup-container'\r\n\r\n                                >\r\n                                    <Button className='calculate-finance-btn' onClick={() => {\r\n                                        openCashFinanceDialog()\r\n                                    }}>\r\n                                        <h6>CALCULATE FINANCE</h6>\r\n                                    </Button>\r\n                                </div>\r\n\r\n                                {/*todo:*/}\r\n                                <PaymentOptions ref={paymentOpionsRef}\r\n                                    isFromLandingPage={true}\r\n                                    subTotal={landingPage?.Subtotal || 0}\r\n                                    estDeliveryDate={landingPage?.Available || \"\"}\r\n                                    variantID={landingPage?.YanaVariantID || \"\"}\r\n                                    variantName={landingPage?.YanaVariantName || \"\"}\r\n                                    variantPrice={landingPage?.VariantPrice || 0}\r\n                                    exteriorID={landingPage?.ExteriorID || \"\"}\r\n                                    exteriorName={\"\"}\r\n                                    exteriorPrice={landingPage?.ExteriorPrice || 0}\r\n                                    interiorID={landingPage?.InteriorID || \"\"}\r\n                                    interiorName={\"\"}\r\n                                    interiorPrice={landingPage?.InteriorPrice || 0}\r\n                                    options={landingPage?.Options || []}\r\n                                />\r\n                            </div>\r\n\r\n                            {/* <div className='video-panel'> */}\r\n                            <video ref={videoRef} key={videoKey} className=\"video\" preload=\"auto\" muted autoPlay playsInline>\r\n                                <source src={`${getCMSAssets()}/home/LyriqIntroAnimationVideo.mp4`} type=\"video/mp4\" />\r\n                                {/* <source src={'https://videos.pexels.com/video-files/4114797/4114797-uhd_2560_1440_25fps.mp4'} type=\"video/mp4\"/> */}\r\n                                {/* <source src={`${getCMSAssets()}/home/4114797-hd_1280_720_50fps.mp4`} type=\"video/mp4\" /> */}\r\n                                {/* <source src={'https://stagingholdendealers.com.au/gmsvinventory/4114797-hd_1280_720_50fps.mp4'} /> */}\r\n                            </video>\r\n\r\n            {/* <video\r\n                key={videoKey}\r\n                ref={videoRef}\r\n                className=\"video\"\r\n                preload=\"none\"\r\n                muted\r\n                autoPlay\r\n                playsInline\r\n\r\n            >\r\n                <source\r\n                    src={`${getCMSAssets()}/home/LyriqIntroAnimationVideo.mp4`}\r\n                    type=\"video/mp4\"\r\n                />\r\n            </video> */}\r\n                            {/* </div> */}\r\n\r\n                        </div>\r\n\r\n                        <div className='global-bottom-scroll'>\r\n                            {/* <div className='important-info-box'>\r\n                                <p>Important Information</p>\r\n                            </div> */}\r\n                            <ImportantInfoDialog />\r\n                            <img className=\"img\" alt=\"Info icon\" src={`${getCMSAssets()}/home/scroll_indicator.348068d6.gif`} />\r\n                            <div className='scroll-to-start' onClick={() => toVariant()}>Scroll to start</div>\r\n                        </div>\r\n\r\n                        <div className='global-bottom-panel'></div>\r\n                    </div>\r\n                )\r\n            }\r\n        </>\r\n    )\r\n}\r\n\r\nexport default GlobalTheme","import { MainLayoutPage } from 'LayoutPages';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport GlobalTheme from './Global/GlobalTheme';\r\nimport NewVehicleInventory from './Global/inventory/NewVehicleInventory';\r\n\r\ninterface IDialogOpen {\r\n    isGlobalDialogOpen: boolean\r\n}\r\n\r\nexport const GlobalPage = (props: IDialogOpen) => {\r\n\r\n    const {isGlobalDialogOpen} = props\r\n\r\n    return (\r\n        \r\n            <div className='global-container'>\r\n                \r\n                {/* <GlobalMenu activeBtn='configure' /> */}\r\n                \r\n                <GlobalTheme isGlobalDialogOpen={isGlobalDialogOpen}/>\r\n\r\n                {/* <PaymentOptions paymentType='Cadillac Finance' ref={childRef} /> */}\r\n            </div>\r\n       \r\n    );\r\n};\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport const useCheckMobileScreen = () => {\r\n    const [width, setWidth] = useState(window.innerWidth);\r\n    const handleWindowSizeChange = () => {\r\n        setWidth(window.innerWidth);\r\n    }\r\n\r\n    useEffect(() => {\r\n        window.addEventListener('resize', handleWindowSizeChange);\r\n        return () => {\r\n            window.removeEventListener('resize', handleWindowSizeChange);\r\n        }\r\n    }, []);\r\n\r\n    return (width <= 767.98);\r\n}\r\n","import { getBackendPath } from 'helpers/Uri';\r\nimport * as profileModel from 'model/IUserProfile';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const setSession = async (\r\n    email: string\r\n    //yanaCustomerID: string,\r\n    //yanaCustomerNo: string\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({\r\n            email: email,\r\n        }),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/set-session`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\nexport const getSession = async (): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({}),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/get-session`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\nexport const clearSession = async (): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({}),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/clear-session`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\nexport const getProfile = async (\r\n    yanaCustomerID: string,\r\n    yanaCustomerNo: string,\r\n    nzYanaCustomerID: string,\r\n    nzYanaCustomerNo: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({\r\n            yanaCustomerID: yanaCustomerID,\r\n            yanaCustomerNo: yanaCustomerNo,\r\n            nzYanaCustomerID: nzYanaCustomerID,\r\n            nzYanaCustomerNo: nzYanaCustomerNo\r\n        }),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/get-profile`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const saveProfile = async (\r\n    userProfile: profileModel.IUserProfile,\r\n    privacy: profileModel.IUserPrivacy,\r\n    isUpdateProfile: boolean,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({\r\n            userProfile: userProfile,\r\n            privacy: privacy,\r\n            isUpdateProfile: isUpdateProfile\r\n        }),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/save-profile`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\n\r\n//todo: delete below code\r\nexport const validateEmail = async (\r\n    token: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({\r\n            token: token,\r\n        }),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/validate-signup-email`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\nexport const logout = async (): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({}),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/log-out`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\nexport const sendForgotPasswordEmail = async (\r\n    email:string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({\r\n            email: email\r\n        }),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/reset-password`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\n\r\nexport const validateResetPasswordToken = async (\r\n    token: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({\r\n            token: token\r\n        }),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/validate-reset-token`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\n\r\nexport const updatePassword = async (\r\n    email: string,\r\n    oldPassword: string,\r\n    newPassword: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n        body: JSON.stringify({\r\n            email: email,\r\n            oldPassword: oldPassword,\r\n            newPassword: newPassword\r\n        }),\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/update-password`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\nexport const isShowMaintenance = async (): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'Get',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/User/is-show-maintenance`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\n","import React, { useRef, useEffect, useLayoutEffect, useState } from 'react';\r\nimport { useParams, useNavigate, Link } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { Row, Col, Navbar, Accordion } from 'react-bootstrap';\r\n\r\nimport {\r\n    getImageFileNameByID2,\r\n    IImagesState,\r\n    getImageLinkByID2,\r\n    getMobileImageLinkByID2,\r\n    getCMSAssets,\r\n    getServiceUrlPara\r\n} from 'helpers/Uri';\r\nimport { clearSessionAction } from \"stores/Session\";\r\nimport { IAppState } from 'model/IAppState';\r\nimport { enumOrdersTabName } from \"helpers/enum\";\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { isNil } from 'lodash';\r\nimport { AiOutlineSearch, AiOutlineLogin, AiOutlineUser  } from \"react-icons/ai\";\r\nimport { classNames } from 'primereact/utils';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { logout } from 'services/User';\r\n\r\n//import { useAnalyticsEventTracker } from 'helpers/useAnalyticsEventTracker';\r\nimport { Menu } from 'primereact/menu';\r\nimport { UserPopUp } from 'scene/Users/UserPopUp';\r\nimport { setScrollPosition } from 'stores/ScrollPosition';\r\nimport { setMainPageNumber } from 'stores/MainPageNumber';\r\nimport { useScroll } from 'pages/Main/ScrollToSection';\r\nimport { useSatellite } from 'helpers/useSatellite';\r\n// interface IMenuClickToScrollProps {\r\n//     scrollToSection: (section: string) => void;\r\n// }\r\n\r\nexport const MainMenu \r\n// : React.FC<IMenuClickToScrollProps> \r\n= () => {\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n    const satellite = useSatellite();\r\n    const {scrollToSection} = useScroll();\r\n\r\n    //const gaEventTracker = useAnalyticsEventTracker('Menu');\r\n\r\n    const loginSession = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    const scrollPosition = useSelector((state: IAppState) => {\r\n        return state.scrollPosition;\r\n    });\r\n\r\n    const checkMainSection = useSelector((state: IAppState) => {\r\n        return state.mainSection\r\n    })\r\n    const mainPageNumber = useSelector((state: IAppState) => {\r\n        return state.mainPageNumber.mainPageNumber\r\n    })\r\n\r\n\r\n    const [activeButton, setActiveButton] = useState('variant');\r\n\r\n    const [blackEffectMenu, setBlackEffectMenu] = useState<any>([]);\r\n\r\n    // if (activeButton == 'payment') {\r\n    //     setBlackEffectMenu(['variant', 'exterior', 'interior', 'accessories'])\r\n    // } else if (activeButton == 'accessories') {\r\n    //     setBlackEffectMenu(['variant', 'exterior', 'interior'])\r\n    // } else if (activeButton == 'interior') {\r\n    //     setBlackEffectMenu(['variant', 'exterior'])\r\n    // } else if (activeButton == 'exterior') {\r\n    //     setBlackEffectMenu(['variant'])\r\n    // } else if (activeButton == 'variant') {\r\n    //     setBlackEffectMenu([])\r\n    // }\r\n\r\n    useEffect(() => {\r\n        setActiveButton(checkMainSection.mainSection);\r\n        setScrollPosition('global');\r\n    }, [checkMainSection.mainSection]);\r\n\r\n\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const onGotoFavouritesPage = () => {\r\n        navigate(`/favourites`);\r\n    }\r\n    const onGotoOrdersManagementPage = (tab:number) => {\r\n        //buttonClickLog(\"Menu\", \"Orders\");\r\n        navigate(`/member-orders/${tab}`);\r\n    }\r\n    const onGotoAdminOrdersManagementPage = (tab: number) => {\r\n        navigate(`/manager-orders/${tab}`);\r\n    }\r\n    const onGotoUpdateProfilePage = () => {\r\n        navigate(`/update-member-details`);\r\n    }\r\n    const onGotoUpdatePasswordPage = () => {\r\n        navigate(`/update-password`);\r\n    }\r\n\r\n    const onLogOut = async () => {\r\n        const result = await logout();\r\n        // dispatch(clearSessionAction());\r\n        // onResetToAllVehicles();\r\n        showSignPage();\r\n    }\r\n\r\n    const showSignPage = () => {\r\n        navigate(`/sign-in`);\r\n    }\r\n\r\n\r\n    // console.log(`${getImageLinkByID2(languageState.LanguageScreenName, images.imageList, \"logo\")}`);\r\n\r\n    const element = document.getElementById('sectionBtn');\r\n    if (element) {\r\n        element.addEventListener('click', () => {\r\n            element.classList.add('clicked');\r\n        });\r\n    }\r\n\r\n    return (\r\n        <div className=\"main-menu-container\">\r\n           \r\n            <div className='main-menu-panel '>\r\n\r\n                <Row className=\"main-menu page-container-content \">\r\n                    <Col sm={12} className=\"menu-items\">\r\n                        <div className='logo-container'>\r\n                            <button className={\r\n                                `certainty-panel stat-text-link ${activeButton === 'variant' \r\n                                ? \r\n                                'active' \r\n                                : \r\n                                ['exterior', 'interior', 'accessories', 'charging', 'payment'].includes(activeButton)\r\n                                ?\r\n                                'black'\r\n                                :\r\n                                        ''}`} \r\n                                data-dtm=\"step nav\"\r\n                                style={{cursor: mainPageNumber == 1 ? 'auto' : 'pointer'}}\r\n                                disabled={mainPageNumber == 1 ? true: false}\r\n                                onClick={() => {\r\n                                    setTimeout(() => {\r\n                                        scrollToSection('variant')\r\n                                        setActiveButton('variant');\r\n                                    }, 200);\r\n                                    dispatch(setMainPageNumber(0));\r\n                                }\r\n                            }>VARIANT</button>\r\n                            <button className={\r\n                                `certainty-panel stat-text-link ${activeButton === 'exterior'\r\n                                ? \r\n                                'active' \r\n                                : \r\n                                ['interior', 'accessories', 'charging', 'payment'].includes(activeButton)\r\n                                ?\r\n                                'black'\r\n                                :\r\n                                        ''}`} \r\n                                data-dtm=\"step nav\"\r\n                                style={{cursor: mainPageNumber == 1 ? 'auto' : 'pointer'}}\r\n                                disabled={mainPageNumber == 1 ? true: false}\r\n                                onClick={() => {\r\n                                    setTimeout(() => {\r\n                                        scrollToSection('exterior');\r\n                                        setActiveButton('exterior');\r\n                                    }, 200);\r\n                                    dispatch(setMainPageNumber(0));\r\n                                }\r\n                            }>EXTERIOR</button>\r\n                            <button className={\r\n                                `certainty-panel stat-text-link ${activeButton === 'interior' \r\n                                ? \r\n                                'active' \r\n                                : \r\n                                ['accessories', 'charging', 'payment'].includes(activeButton)\r\n                                ?\r\n                                'black'\r\n                                :\r\n                                        ''}`} \r\n                                data-dtm=\"step nav\"\r\n                                style={{cursor: mainPageNumber == 1 ? 'auto' : 'pointer'}}\r\n                                disabled={mainPageNumber == 1 ? true: false}\r\n                                onClick={() => {\r\n                                    setTimeout(() => {\r\n                                        scrollToSection('interior');\r\n                                        setActiveButton('interior');\r\n                                    }, 200);\r\n                                    dispatch(setMainPageNumber(0));\r\n                                }\r\n                            }>INTERIOR</button>\r\n                            <button className={\r\n                                `certainty-panel stat-text-link ${activeButton === 'accessories' \r\n                                ? \r\n                                'active' \r\n                                : \r\n                                ['charging', 'payment'].includes(activeButton)\r\n                                ?\r\n                                'black'\r\n                                :\r\n                                        ''}`} \r\n                                data-dtm=\"step nav\"\r\n                                style={{cursor: mainPageNumber == 1 ? 'auto' : 'pointer'}}\r\n                                disabled={mainPageNumber == 1 ? true: false}\r\n                                onClick={() => {\r\n                                    setTimeout(() => {\r\n                                        scrollToSection('accessories');\r\n                                        setActiveButton('accessories');\r\n                                    }, 200);\r\n                                    dispatch(setMainPageNumber(0));\r\n                                }\r\n                            }>ACCESSORIES</button>\r\n                             <button className={\r\n                                `certainty-panel stat-text-link ${activeButton === 'charging' \r\n                                ? \r\n                                'active' \r\n                                : \r\n                                activeButton === 'payment'\r\n                                ?\r\n                                'black'\r\n                                :\r\n                                        ''}`} \r\n                                data-dtm=\"step nav\"\r\n                                style={{cursor: mainPageNumber == 1 ? 'auto' : 'pointer'}}\r\n                                disabled={mainPageNumber == 1 ? true: false}\r\n                                onClick={() => {\r\n                                    setTimeout(() => {\r\n                                        scrollToSection('charging');\r\n                                        setActiveButton('charging');\r\n                                    }, 200);\r\n                                    dispatch(setMainPageNumber(0));\r\n                                }\r\n                            }>CHARGING</button>\r\n                            <button className={`certainty-panel stat-text-link ${activeButton === 'payment' || activeButton === 'delivery' || activeButton === 'checkout' || activeButton === 'checkoutForm' ? 'active' : ''}`}\r\n                                data-dtm=\"step nav\"\r\n                                style={{ cursor: mainPageNumber == 1 ? 'auto' : 'pointer' }}\r\n                                disabled={mainPageNumber == 1 ? true: false}\r\n                                onClick={() => {\r\n                                    setTimeout(() => {\r\n                                        scrollToSection('payment');\r\n                                        setActiveButton('payment');\r\n                                    }, 200);\r\n                                    dispatch(setMainPageNumber(0));\r\n                                }\r\n                            }>CHECK OUT</button>\r\n                        </div>\r\n\r\n                        {/* <UserPopUp isClickable={true} /> */}\r\n                        \r\n                    </Col>\r\n                </Row>\r\n                \r\n\r\n                {/* <Row className=\"main-menu page-container-content\">\r\n                    <div className=\"menu-items\">\r\n                        <div className='left-panel'>\r\n                            <a className=\"menu-item\"\r\n                                onClick={() => {\r\n                                    // return showProducts();\r\n                                }}\r\n                            >\r\n                                RESERVE YOUR LYRIQ\r\n                            </a>\r\n                        </div>\r\n\r\n                        <div className='right-panel'>\r\n                            <a className='menu-item'\r\n                                onClick={() => {\r\n                                    // return showPartsFinderPage();\r\n                                    return showComingSoon();\r\n                                }}\r\n                            >\r\n                                TRIM\r\n                            </a>\r\n                            <a className=\"menu-item\"\r\n                                onClick={() => {\r\n                                    // return showDownloads();\r\n                                    return showComingSoon();\r\n                                }}\r\n                            >\r\n                                DETAILS\r\n                            </a>\r\n                            <a className=\"menu-item\"\r\n                                onClick={() => {\r\n                                    // return showWarranty();\r\n                                    return showComingSoon();\r\n                                }}\r\n                            >\r\n                                PAYMENT\r\n                            </a>\r\n                            <a className='menu-item'\r\n                                onClick={() => {\r\n                                    // return showTDs();\r\n                                    return showComingSoon();\r\n                                }}\r\n                            >\r\n                                CONFIRMATION\r\n                            </a>\r\n                        </div>\r\n                        \r\n                    </div>\r\n                </Row> */}\r\n            </div>\r\n          \r\n        </div>\r\n    );\r\n        \r\n};\r\n\r\n\r\n","\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport { useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nconst CarColorSelected = (props: any) => {\r\n\r\n    const { color, handleColor, colorList} = props;\r\n\r\n    const handleChangeColor = (carColor: any ) => {\r\n        handleColor(carColor);\r\n    }\r\n\r\n    const exteriorListFromStore = useSelector((appState: IAppState) => {\r\n        return appState?.vehicle?.ExteriorList;\r\n    });\r\n\r\n    if (!isNil(colorList)) {\r\n        return (\r\n            <>\r\n                {!isNil(colorList) && colorList != null &&\r\n                    colorList.length > 0 && (colorList as vehicleModel.IExterior[]).map((item: vehicleModel.IExterior, index: number) => {\r\n                        return (\r\n                            <div key={\"exterior_\" + index}\r\n                                className={classNames({\r\n                                    \"stat-image-link\": true,\r\n                                    \"color-options-item\": true,\r\n                                    \"active\": item.ExteriorColorName == color\r\n                                })}\r\n                                onClick={(e: any) => {\r\n                                    handleChangeColor(item.ExteriorColorName)\r\n                                }}\r\n                                data-dtm=\"modal:lyriq specifications\"\r\n                            >\r\n                                <div className='color-options-round'>\r\n                                    <img className=\"image\" src={item?.ExteriorFilterImage || undefined} alt={item.ExteriorColorName || \"\"}/>\r\n                                </div>\r\n                            </div>\r\n                        );\r\n\r\n                    })\r\n                }\r\n            </>\r\n        )\r\n    }\r\n    else {\r\n        return (\r\n            <>\r\n                {!isNil(exteriorListFromStore) && exteriorListFromStore != null &&\r\n                    exteriorListFromStore.length > 0 && (exteriorListFromStore as vehicleModel.IExterior[]).map((item: vehicleModel.IExterior, index: number) => {\r\n                        return (\r\n                            <div key={\"exterior_\" + index}\r\n                                className={classNames({\r\n                                    \"color-options-item\": true,\r\n                                    \"active\": item.ExteriorColorName == color\r\n                                })}\r\n                                onClick={(e: any) => {\r\n                                    handleChangeColor(item.ExteriorColorName)\r\n                                }}\r\n                            >\r\n                                <div className='color-options-round'>\r\n                                    <img className=\"image\" src={item?.ExteriorFilterImage || undefined} />\r\n                                </div>\r\n                            </div>\r\n                        );\r\n\r\n                    })\r\n                }\r\n            </>\r\n        )\r\n    }\r\n}\r\n\r\nexport default CarColorSelected","import { getCMSAssets } from 'helpers/Uri';\r\nimport React, { useEffect, useState } from 'react';\r\nimport CarColorVariantViewSwitch from '../../../components/CarColorVariantViewSwitch';\r\nimport CarColorSelected from 'pages/Main/exterior/CarColorSelected';\r\nimport { Button } from 'react-bootstrap';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { isNil } from 'lodash';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as vehicleService from 'services/Vehicle';\r\nimport * as vehicleHelper from 'businessHelpers/VehicleHelper';\r\n\r\nimport CarColorSelectedComparisonSport from '../exterior/CarColorSelectedComparisonSport';\r\nimport CarColorSelectedMobile from '../exterior/CarColorSelectedMobile';\r\n\r\n\r\ninterface CustomizeType {\r\n    variantLeft: string,\r\n    variantRight: string,\r\n    colorLeft: string,\r\n    colorRight: string,\r\n    leftImageUrlSet: string[],\r\n    rightImageUrlSet: string[],\r\n    totalPriceLeft: string,\r\n    totalPriceRight: string,\r\n    payByMonthLeft: string,\r\n    payByMonthRight: string,\r\n    viewPosition: string,\r\n}\r\n\r\nconst VariantComparison = () => {\r\n\r\n    const variantListFromStore = useSelector((appState: IAppState) => {\r\n        return appState?.vehicle?.VariantList;\r\n    });\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const exteriorListFromStore = useSelector((appState: IAppState) => {\r\n        return appState?.vehicle?.ExteriorList;\r\n    });\r\n\r\n\r\n    const [leftExteriorList, setLeftExteriorList] = useState<vehicleModel.IExterior[]>([]);\r\n    const [rightExteriorList, setRightExteriorList] = useState<vehicleModel.IExterior[]>([]);\r\n\r\n    const [selectedLeftExteriorList, setSelectedLeftExteriorList] = useState<vehicleModel.IExterior>(vehicleHelper.getInitExterior());\r\n    const [selectedRightExteriorList, setSelectedRightExteriorList] = useState<vehicleModel.IExterior>(vehicleHelper.getInitExterior());\r\n\r\n\r\n    const [leftVariantName, setLeftVariantName] = useState(\"\");\r\n    const [rightVariantName, setRightVariantName] = useState(\"\");\r\n    const [leftVariantDesc, setLeftVariantDesc] = useState(\"\");\r\n    const [rightVariantDesc, setRightVariantDesc] = useState(\"\");\r\n\r\n    const [customize, setCustomize] = useState<CustomizeType>({\r\n        variantLeft: 'Luxury',\r\n        variantRight: 'Sport',\r\n        colorLeft: 'Argent Silver Metallic',\r\n        colorRight: 'Argent Silver Metallic',\r\n        leftImageUrlSet: [], // vehicleFromStore.ExteriorList?.[0]?.ExteriorPicture || [],\r\n        rightImageUrlSet: [], //variantListFromStore?.[1].VariantPicture || [],\r\n        totalPriceLeft: '102990',\r\n        totalPriceRight: '102990',\r\n        payByMonthLeft: '1298',\r\n        payByMonthRight: '1298',\r\n        viewPosition: '',\r\n    });\r\n\r\n    const [initialImage, setInitialImage] = useState({\r\n        initLeftColor: 'Argent Silver Metallic',\r\n        initLeftImageUrlSet: [], //vehicleFromStore.ExteriorList?.[0]?.ExteriorPicture,\r\n        initLeftVariant: 'Luxury',\r\n        initRightColor: 'Argent Silver Metallic',\r\n        initRightImageUrlSet: [], //variantListFromStore?.[1].VariantPicture,\r\n        initRightVariant: 'Sport',\r\n    });\r\n\r\n\r\n    const [activeLeftImage, setActiveLeftImage] = useState(1);\r\n    const [activeRightImage, setActiveRightImage] = useState(1);\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    useEffect(() => {\r\n\r\n        if (!isNil(variantListFromStore) && variantListFromStore.length > 0) {\r\n            doGetExterior(variantListFromStore?.[0].VariantID || null, true);\r\n            doGetExterior(variantListFromStore?.[1].VariantID || null, false);\r\n\r\n            setLeftVariantName(variantListFromStore[0]?.VariantName || \"\");\r\n            setRightVariantName(variantListFromStore[1]?.VariantName || \"\");\r\n\r\n            setLeftVariantDesc(variantListFromStore[0]?.VariantDescription || \"\")\r\n            setRightVariantDesc(variantListFromStore[1]?.VariantDescription || \"\")\r\n        }\r\n\r\n    }, [variantListFromStore]);\r\n\r\n    const doGetExterior = async (variantID: any, isLeft: boolean) => {\r\n        let requestData: vehicleModel.IExterior = {\r\n            Country: selectedDeliveryFromStore?.Country?.code || null,\r\n            VariantID: variantID,\r\n            VariantName: null,\r\n            ExteriorID: null,\r\n            ExteriorColorName: null,\r\n            ExteriorColorDescTitle: null,\r\n            ExteriorColorDesc: null,\r\n            ExteriorPrice: null,\r\n            ExteriorPicture: null,\r\n            ExteriorPictureMobile: null,\r\n            ExteriorFilterImage: null,\r\n            ExteriorFilterMobile: null,\r\n            IsDefault: null,\r\n            HasStock: null,\r\n            ExteriorOrderingNo: 0,\r\n        };\r\n\r\n        let response = await vehicleService.getExteriors(requestData);\r\n        if (response.status) {\r\n            let exteriorList: vehicleModel.IExterior[] = [];\r\n            exteriorList = response.data.map((item: any) => {\r\n\r\n                let exteriorTempItem: vehicleModel.IExterior = {\r\n                    Country: item.country,\r\n                    VariantID: item.variantID,\r\n                    VariantName: null,\r\n                    ExteriorID: item.exteriorID,\r\n                    ExteriorColorName: item.exteriorColorName,\r\n                    ExteriorColorDescTitle: item.exteriorColorDescTitle,\r\n                    ExteriorColorDesc: item.exteriorColorDesc,\r\n                    ExteriorPrice: item.exteriorPrice,\r\n                    ExteriorPicture: item.exteriorPicture,\r\n                    ExteriorPictureMobile: item.exteriorPictureMobile,\r\n                    ExteriorFilterImage: item.exteriorFilter,\r\n                    ExteriorFilterMobile: item.exteriorFilterMobile,\r\n                    IsDefault: item.isDefault,\r\n                    HasStock: true,\r\n                    ExteriorOrderingNo: 0\r\n                }\r\n\r\n                if (item.isDefault) {\r\n                    if (isLeft) {\r\n                        setSelectedLeftExteriorList(exteriorTempItem);\r\n                    }\r\n                    else {\r\n                        setSelectedRightExteriorList(exteriorTempItem);\r\n                    }\r\n                }\r\n\r\n                return exteriorTempItem;\r\n            });\r\n\r\n            if (isLeft) {\r\n                setLeftExteriorList(exteriorList)\r\n            }\r\n            else {\r\n                setRightExteriorList(exteriorList)\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    const handleColorLeft = (color: any) => {\r\n        leftExteriorList.map((item: vehicleModel.IExterior) => {\r\n            if (item.ExteriorColorName === color) {\r\n                setSelectedLeftExteriorList(item);\r\n            }\r\n        });\r\n\r\n        setActiveLeftImage(2);\r\n\r\n        setTimeout(() => {\r\n            setActiveLeftImage(1)\r\n        }, 380);\r\n\r\n        //const index = leftExteriorList?.findIndex(\r\n        //    (item: any) => item.ExteriorColorName === color\r\n        //);\r\n        //setInitialImage({\r\n        //    ...initialImage,\r\n        //    initLeftColor: customize.colorLeft,\r\n        //    initLeftImageUrlSet: customize.leftImageUrlSet || []\r\n        //});\r\n        //setCustomize({\r\n        //    ...customize,\r\n        //    colorLeft: color,\r\n        //    leftImageUrlSet: leftExteriorList[index]?.ExteriorPicture || [],\r\n        //})\r\n        //setActiveLeftImage(2)\r\n        //setTimeout(() => {\r\n        //    setInitialImage({\r\n        //        ...initialImage,\r\n        //        initLeftColor: color,\r\n        //        initLeftImageUrlSet: leftExteriorList[index]?.ExteriorPicture || []\r\n        //    })\r\n        //    setActiveLeftImage(1)\r\n        //}, 380);\r\n    }\r\n\r\n    const handleColorRight = (color: any) => {\r\n        rightExteriorList.map((item: vehicleModel.IExterior) => {\r\n            if (item.ExteriorColorName === color) {\r\n                setSelectedRightExteriorList(item);\r\n            }\r\n        });\r\n\r\n        setActiveRightImage(2);\r\n\r\n        setTimeout(() => {\r\n            setActiveRightImage(1)\r\n        }, 380);\r\n\r\n\r\n        //const index = vehicleFromStore.ExteriorList?.findIndex(\r\n        //    (item: any) => item.ExteriorColorName === color\r\n        //);\r\n\r\n\r\n\r\n        //setInitialImage({\r\n        //    ...initialImage,\r\n        //    initRightColor: customize.colorRight,\r\n        //    initRightImageUrlSet: customize.rightImageUrlSet\r\n        //});\r\n        //setCustomize({\r\n        //    ...customize,\r\n        //    colorRight: color,\r\n        //    rightImageUrlSet: vehicleFromStore.ExteriorList?.[index]?.ExteriorPicture || [],\r\n        //});\r\n        //setActiveRightImage(2)\r\n        //setTimeout(() => {\r\n        //    setInitialImage({\r\n        //        ...initialImage,\r\n        //        initRightColor: color,\r\n        //        initRightImageUrlSet: vehicleFromStore.ExteriorList?.[index]?.ExteriorPicture || [],\r\n        //        // initRightImageUrlSet: sportExteriorList?.[index]?.exteriorPicture || []\r\n        //    })\r\n        //    setActiveRightImage(1)\r\n        //}, 550);\r\n    }\r\n\r\n    const [isWhichSide, setIsWhichSide] = useState('Left');\r\n\r\n    //const [ selectMobileVariant, setSelectMobileVariant ] = useState('Luxury');\r\n\r\n    useEffect(() => {\r\n        const initComparisons = () => {\r\n            const images = document.getElementsByClassName(\"img-comp-overlay\") as HTMLCollectionOf<HTMLElement>;\r\n\r\n            const compareImages = (img: HTMLElement) => {\r\n                let slider: HTMLDivElement, clicked = 0, w: number, h: number;\r\n\r\n                const updateWidth = () => {\r\n                    w = img.offsetWidth;\r\n                };\r\n\r\n                window.addEventListener(\"resize\", updateWidth);\r\n\r\n                updateWidth();\r\n\r\n                w = img.offsetWidth;\r\n                h = img.offsetHeight;\r\n                img.style.width = `${w / 2}px`;\r\n\r\n                // console.log(img.offsetWidth);\r\n\r\n                slider = document.createElement(\"div\");\r\n                slider.setAttribute(\"class\", \"img-comp-slider\");\r\n                img.parentElement!.insertBefore(slider, img);\r\n                slider.style.top = `${h / 2 - slider.offsetHeight / 2}px`;\r\n                slider.style.left = `${w / 2 - slider.offsetWidth / 2}px`;\r\n\r\n                const slideReady = (e: MouseEvent | TouchEvent) => {\r\n                    e.preventDefault();\r\n                    clicked = 1;\r\n                    window.addEventListener(\"mousemove\", slideMove);\r\n                    window.addEventListener(\"touchmove\", slideMove);\r\n                };\r\n\r\n                const slideFinish = () => {\r\n                    clicked = 0;\r\n                };\r\n\r\n                const slideMove = (e: MouseEvent | TouchEvent) => {\r\n                    let pos;\r\n                    if (clicked === 0) return false;\r\n                    pos = getCursorPos(e);\r\n                    if (pos < 0) pos = 0;\r\n                    if (pos > w) pos = w;\r\n                    slide(pos);\r\n                };\r\n\r\n                slider.addEventListener(\"mousedown\", slideReady);\r\n                window.addEventListener(\"mouseup\", slideFinish);\r\n                slider.addEventListener(\"touchstart\", slideReady);\r\n                window.addEventListener(\"touchend\", slideFinish);\r\n\r\n                const getCursorPos = (e: MouseEvent | TouchEvent) => {\r\n                    let a, x = 0;\r\n\r\n                    if ('changedTouches' in e) {\r\n                        // TouchEvent\r\n                        const touch = e.changedTouches[0];\r\n                        a = img.getBoundingClientRect();\r\n                        x = touch.pageX - a.left;\r\n                        x = x - window.pageXOffset;\r\n                    } else {\r\n                        // MouseEvent\r\n                        a = img.getBoundingClientRect();\r\n                        x = (e as MouseEvent).pageX - a.left;\r\n                        x = x - window.pageXOffset;\r\n                    }\r\n\r\n                    if (x > 300) {\r\n                        setIsWhichSide('Right')\r\n                    } else {\r\n                        setIsWhichSide('Left')\r\n                    }\r\n\r\n                    return x;\r\n                };\r\n\r\n                const slide = (x: number) => {\r\n                    img.style.width = `${x}px`;\r\n                    slider.style.left = `${img.offsetWidth - slider.offsetWidth / 2}px`;\r\n                };\r\n            };\r\n\r\n            for (let i = 0; i < images.length; i++) {\r\n                compareImages(images[i]);\r\n            }\r\n        }\r\n        initComparisons();\r\n    }, []);\r\n\r\n    const options = { maximumFractionDigits: 2 }\r\n\r\n\r\n\r\n\r\n    return (\r\n        <>\r\n            {\r\n                // !isMobile\r\n                // ?\r\n                <div className='comparison-img-container'>\r\n                    <div className='comparison-detail-container'>\r\n                        <div className='variant-name-price-section'>\r\n                            <div className='left-container'>\r\n                                <div className={`img-left ${activeLeftImage === 2 ? 'active' : ''} `}>\r\n                                    <img alt=\"\" className='image' src={selectedLeftExteriorList.ExteriorPicture?.[0]} />\r\n                                    <img alt=\"\" className='image' src={selectedLeftExteriorList.ExteriorPicture?.[0]} />\r\n                                </div>\r\n                                {\r\n                                    !isMobile\r\n                                        ?\r\n                                        <div className='exterior-options-panel'>\r\n                                            <CarColorSelected color={selectedLeftExteriorList?.ExteriorColorName}\r\n                                                handleColor={handleColorLeft}\r\n                                                colorList={leftExteriorList} />\r\n                                        </div>\r\n                                        :\r\n                                        <></>\r\n                                        // <div className='exterior-options-panel'>\r\n                                        //     <CarColorSelectedMobile color={selectedLeftExteriorList?.ExteriorColorName}\r\n                                        //         handleColor={handleColorLeft}\r\n                                        //         colorList={leftExteriorList} />\r\n                                        // </div>\r\n                                }\r\n                                <div className='left-detail-name-price-section'>\r\n                                    <h4>{leftVariantName}</h4>\r\n                                    <p>Colour</p>\r\n                                    <h5>{selectedLeftExteriorList?.ExteriorColorName}</h5>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='right-container'>\r\n                                <div className={`img-right ${activeRightImage === 2 ? 'active' : ''}`}>\r\n                                    <img alt=\"\" className='image' src={selectedRightExteriorList.ExteriorPicture?.[0]} />\r\n                                    <img alt=\"\" className='image' src={selectedRightExteriorList.ExteriorPicture?.[0]} />\r\n                                </div>\r\n                                {\r\n                                    !isMobile\r\n                                        ?\r\n                                        <div className='exterior-options-panel'>\r\n                                            <CarColorSelected color={selectedRightExteriorList?.ExteriorColorName}\r\n                                                handleColor={handleColorRight}\r\n                                                colorList={rightExteriorList} />\r\n                                        </div>\r\n                                        :\r\n                                        <></>\r\n                                        // <div className='exterior-options-panel'>\r\n                                        //     <CarColorSelectedMobile color={selectedRightExteriorList?.ExteriorColorName}\r\n                                        //         handleColor={handleColorRight}\r\n                                        //         colorList={rightExteriorList} />\r\n                                        // </div>\r\n                                }\r\n                                <div className='right-detail-name-price-section'>\r\n                                    <h4>{rightVariantName}</h4>\r\n                                    <p>Colour</p>\r\n                                    <h5>{selectedRightExteriorList?.ExteriorColorName}</h5>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        <div className='variant-desc-section'>\r\n                            <div className='variant-left-desc'>\r\n                                <h6>{leftVariantName}</h6>\r\n                                <p>{leftVariantDesc}</p>\r\n                            </div>\r\n                            <div className='variant-right-desc'>\r\n                                <h6>{rightVariantName}</h6>\r\n                                <p>{rightVariantDesc}</p>\r\n                            </div>\r\n                        </div>\r\n                        <div className='exterior-front-section'>\r\n                            <div className='exterior-front-left-panel'>\r\n                                <div className={`img-left ${activeLeftImage === 2 ? 'active' : ''} `}>\r\n                                    <img alt=\"\" className='image' src={selectedLeftExteriorList.ExteriorPicture?.[1]} />\r\n                                    <img alt=\"\" className='image' src={selectedLeftExteriorList.ExteriorPicture?.[1]} />\r\n                                </div>\r\n                                <h6>Grille design</h6>\r\n                                <p>Angled linear 3D etched crystal shield </p>\r\n                            </div>\r\n                            <div className='exterior-front-right-panel'>\r\n                                <div className={`img-right ${activeRightImage === 2 ? 'active' : ''}`}>\r\n                                    <img alt=\"\" className='image' src={selectedRightExteriorList.ExteriorPicture?.[1]} />\r\n                                    <img alt=\"\" className='image' src={selectedRightExteriorList.ExteriorPicture?.[1]} />\r\n                                </div>\r\n                                <h6>Grille design</h6>\r\n                                <p>Interlocking triangular 3D etched crystal shield </p>\r\n                            </div>\r\n                        </div>\r\n                        <div className='wheel-section'>\r\n                            <div className='wheel-left-panel'>\r\n                                <div className='img-left'>\r\n                                    <img alt=\"\" className='image' src={`${getCMSAssets()}/variants/wheel-luxury.svg`} />\r\n                                </div>\r\n                                <h6>Rims</h6>\r\n                                {/* <p>Sport</p> */}\r\n                                <p>21\" multi-spoke aluminium wheels with diamond cut Manoogian Silver finish.</p>\r\n                            </div>\r\n                            <div className='wheel-right-panel'>\r\n                                <div className='img-right'>\r\n                                    <img alt=\"\" className='image' src={`${getCMSAssets()}/variants/wheel-sports.svg`} />\r\n                                </div>\r\n                                <h6>Rims</h6>\r\n                                <p>21\" multi-spoke aluminum wheels, polished and with Satin Dark Android finish</p>\r\n                            </div>\r\n                        </div>\r\n                        <div className='exterior-side-section'>\r\n                            <div className='exterior-side-left-panel'>\r\n                                <div className={`img-left ${activeLeftImage === 2 ? 'active' : ''} `}>\r\n                                    <img alt=\"\" className='image' src={selectedLeftExteriorList.ExteriorPicture?.[3]} />\r\n                                    <img alt=\"\" className='image' src={selectedLeftExteriorList.ExteriorPicture?.[3]} />\r\n                                </div>\r\n                                <h6>Exterior accents</h6>\r\n                                <p>Luxury Silver Chrome </p>\r\n                            </div>\r\n                            <div className='exterior-side-right-panel'>\r\n                                <div className={`img-right ${activeRightImage === 2 ? 'active' : ''}`}>\r\n                                    <img alt=\"\" className='image' src={selectedRightExteriorList.ExteriorPicture?.[3]} />\r\n                                    <img alt=\"\" className='image' src={selectedRightExteriorList.ExteriorPicture?.[3]} />\r\n                                </div>\r\n                                <h6>Exterior accents</h6>\r\n                                <p>Obsidian Chrome & dark accents</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n            }\r\n        </>\r\n    )\r\n};\r\n\r\nexport default VariantComparison;\r\n","import ImageComparison from 'pages/Main/variant/ImageComparison'\r\nimport { getCMSAssets } from 'helpers/Uri'\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { useState } from 'react'\r\nimport { Accordion, Col, Row } from 'react-bootstrap'\r\nimport VariantComparison from './VariantComparison'\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen'\r\n\r\nconst ComparisonDialog = (props: any) => {\r\n\r\n    const {pageName} = props\r\n\r\n    const [openLearnMoreDialog, setOpenLearnMoreDialog] = useState(false);\r\n \r\n    const onVisible = () => {\r\n        setOpenLearnMoreDialog(true);\r\n    }\r\n\r\n    const onHide = () => {\r\n        setOpenLearnMoreDialog(false);\r\n    }\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    setTimeout(() => {\r\n        let accordionButton = document.getElementsByClassName(\"accordion-button\");\r\n        for (let i = 0; i < accordionButton.length; i++) {\r\n            accordionButton[i].setAttribute('data-dtm', 'modal:lyriq specifications');\r\n            accordionButton[i].classList.add('stat-expand-icon');\r\n        }\r\n    }, 200);\r\n\r\n    return (\r\n        <div className='comparison-dialog-container'>\r\n            {\r\n                pageName == 'Configure'\r\n                ?\r\n                <span>\r\n                    <a className='compare-variants stat-text-link'\r\n                        data-dtm=\"variant\"\r\n                        onClick={() => onVisible()}>\r\n                        <img alt=\"\" src={`${getCMSAssets()}/main/text-icon-2.svg`} />\r\n                        <span>Compare Variants</span>\r\n                    </a>\r\n                </span>\r\n                :\r\n                <div className='specifications-box' onClick={() => onVisible()}>\r\n                    <span>Compare Variants</span>\r\n                    <img alt=\"\" src={`${getCMSAssets()}/inventory/info.svg`} />\r\n                </div>\r\n            }\r\n            \r\n\r\n            <Dialog className='comparison-dialog' visible={openLearnMoreDialog} style={{ width: '85%' }} onHide={() => onHide()} draggable={false} resizable={true}>\r\n                {/* <div className='comaprison-scroll-container'> */}\r\n                    <div className='comparison-container'>\r\n                        <div className='comparison-title-box'>\r\n                            <h5>SPECIFICATIONS</h5>\r\n                            <div className='comparison-title'>\r\n                                <h1>LYRIQ</h1>\r\n                                <p>Model Year 2025</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div className='standard-equipment-container'>\r\n                        <div >\r\n                            <Accordion className='equipments-accordion' defaultActiveKey={['0', '1']} alwaysOpen >\r\n                                <Accordion.Item eventKey=\"0\">\r\n                                    <div className='accordion-title'>Variant differences</div>\r\n                                    <Accordion.Body>\r\n                                        <p className='differences-title'>Learn what makes LYRIQ Luxury and Sport variants uniquely iconic</p>\r\n                                        <VariantComparison />\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"1\">\r\n                                    {/* <Accordion.Header>Standard features</Accordion.Header> */}\r\n                                    <div className='accordion-title'>Standard features</div>\r\n                                    <Accordion.Body>\r\n                                        <p className='differences-title'>Explore the impressive features that come standard with LYRIQ Luxury and Sport variants</p>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"2\">\r\n                                    <Accordion.Header>Infotainment</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='infotainment-section'>\r\n                                            <div className='infotainment-left-panel'>\r\n                                                <p>Curved 33\" diagonal advanced colour LED display<sup>1</sup></p>\r\n                                                <p>Wireless Apple CarPlay® phone projection<sup>2</sup></p>\r\n                                                <p>AKG 19-speaker premium audio system with noise cancellation and built in front-row head rest speakers</p>\r\n                                                <p>Wireless phone charging<sup>5</sup></p>\r\n                                            </div>\r\n                                            <div className='infotainment-right-panel'>\r\n                                                <p>Rotary controller with jog functionality</p>\r\n                                                <p>Wireless Android Auto™ phone projection<sup>3</sup></p>\r\n                                                <p>USB ports<sup>4</sup>, type-C full-function (3 ports) and charge-only (2 ports)</p>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"3\">\r\n                                    <Accordion.Header>Safety & Driver Assistance<sup>7</sup></Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='safety-driver-section'>\r\n                                            <div className='safety-driver-left-panel'>\r\n                                                <p>Airbags<sup>6</sup>, Dual-stage frontal, seat-mounted side-impact for driver and front passenger; knee for driver and front passenger; head-curtain for all outboard seating positions with rollover protection</p>\r\n                                                <p>Adaptive Cruise Control</p>\r\n                                                <p>Buckle to Drive</p>\r\n                                                <p>Front and Rear Park Assist</p>\r\n                                                <p>Front Pedestrian and Cyclist Braking</p>\r\n                                                <p>HD Surround Vision</p>\r\n                                                <p>Lane Keep Assist with Lane Departure Warning</p>\r\n                                                <p>Rear Camera Mirror (with washer)</p>\r\n                                                <p>Side Bicyclist Alert</p>\r\n                                                <p>Second Row Seatbelt Indicator</p>\r\n                                            </div>\r\n                                            <div className='safety-driver-right-panel'>\r\n                                                <p>Adaptive Headlight System</p>\r\n                                                <p>Blind Zone Steering Assist</p>\r\n                                                <p>Enhanced Automatic Parking Assist</p>\r\n                                                <p>Forward Collision Alert</p>\r\n                                                <p>HD Rear Vision Camera</p>\r\n                                                <p>Intersection Automatic Emergency Braking</p>\r\n                                                <p>LED Reflective Windshield Collision Alert</p>\r\n                                                <p>Rear Pedestrian Alert</p>\r\n                                                <p>Theft Deterrent Alarm System</p>\r\n                                                <p>Tyre Pressure Monitoring System</p>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"4\">\r\n                                    <Accordion.Header>Interior & Comfort</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='interior-section'>\r\n                                            <div className='interior-left-panel'>\r\n                                                <p>Heated Steering Wheel</p>\r\n                                                <p>Remote Keyless Entry</p>\r\n                                                <p>126-colour interior ambient lighting with dual-zone customisation</p>\r\n                                                <p>4-way power lumbar adjustment for driver and front passenger seats</p>\r\n                                                <p>Heated and ventilated driver and front passenger seats</p>\r\n                                                <p>Seatback recline position second row seating</p>\r\n                                                <p>Illuminated front door sill plates</p>\r\n                                                <p>Driver and front passenger visors with illuminated vanity mirrors</p>\r\n                                                <p>Power windows with Express-up/down on all</p>\r\n                                                <p>Tri-zone climate control with dedicated digital rear control panel</p>\r\n                                            </div>\r\n                                            <div className='interior-right-panel'>\r\n                                                <p>Push Button Start</p>\r\n                                                <p>Power tilting and telescoping steering column</p>\r\n                                                <p>8-way power adjustable driver and front passenger seats</p>\r\n                                                <p>Power massage driver and front passenger seats</p>\r\n                                                <p>Heated outboard second row passenger seats</p>\r\n                                                <p>60/40 one-touch, flat-folding second row</p>\r\n                                                <p>Power sliding dual panel sunroof with power sunshade</p>\r\n                                                <p>Front floor mats</p>\r\n                                                <p>Rear cargo area cover</p>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"5\">\r\n                                    <Accordion.Header>Exterior Design</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='exterior-section'>\r\n                                            <div className='exterior-left-panel'>\r\n                                                <p>Daytime Running Lamps (DRLs) and Adaptive LED Headlamp System housed in advanced vertical slimline design</p>\r\n                                                <p>Laminated front side glass with solar glazing</p>\r\n                                                <p>Automatic headlamp leveling system</p>\r\n                                                <p>Cornering lamps</p>\r\n                                                <p>Wheel lugs, locking</p>\r\n                                                <p>LED tail lamps and rear turn signal indicators</p>\r\n                                                <p>Self-sealing tyres (275/45R21)</p>\r\n                                            </div>\r\n                                            <div className='exterior-right-panel'>\r\n                                                <p>Front and rear lighting choreography for approach and walk-away</p>\r\n                                                <p>Rear privacy glass</p>\r\n                                                <p>Innovative 3D Etched Black Crystal Shield (front grille)</p>\r\n                                                <p>Hands-free liftgate (open and close) with programmable memory height and Cadillac crest projection light</p>\r\n                                                <p>Exterior mirrors with heating, power adjustability, power-folding and driver-side auto dimming and integrated turn signal indicators</p>\r\n                                                <p>Acoustic laminated windshield with heated glass, in wiper part position</p>\r\n                                                <p>Obsidian/dark (Sport) or Luxury/silver (Luxury) chrome accents</p>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"6\">\r\n                                    <Accordion.Header>Electric Performance</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='electric-drive-section'>\r\n                                            <div className='electric-drive-left-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>System</h6>\r\n                                                    <p>Dual-motor All Wheel Drive (AWD)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Motor</h6>\r\n                                                    <p>Permanent magnet, bar wound</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Near-instant Torque</h6>\r\n                                                    <p>610 nM<sup>8</sup></p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>Max Speed</h6>\r\n                                                    <p>210 km/h<sup>8</sup></p>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='electric-drive-right-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Braking Efficiency</h6>\r\n                                                    <p>Regenerative braking, featuring Regen on Demand® and One Pedal Driving® </p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Power</h6>\r\n                                                    <p>388 kW<sup>8</sup></p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Final Drive Ratio</h6>\r\n                                                    <p>2109.87:1  (front)</p>\r\n                                                    <p>10.49:1 (rear km/h)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>0-100 km/h</h6>\r\n                                                    <p>5.3 seconds<sup>8</sup></p>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"7\">\r\n                                    <Accordion.Header>Battery & Charging</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='battery-charging-section'>\r\n                                            <div className='battery-charging-left-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Battery Rated Energy</h6>\r\n                                                    <p>102 kWh</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Type</h6>\r\n                                                    <p>Rechargeable energy storage system comprising multiple linked modules</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Range & Efficiency</h6>\r\n                                                    <p>530 kilometers in combined electric range (WLTP)<sup>9</sup></p>\r\n                                                </div>\r\n                                               \r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>190 kW DC Fast Charge</h6>\r\n                                                    <p>Charge up to 80% in 30 minutes<sup>10 11</sup></p>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='battery-charging-right-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Battery Chemistry</h6>\r\n                                                    <p>Lithium-ion NCMA cathode, blended graphite anode</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Combined Electric Energy Consumption</h6>\r\n                                                    <p>22.5 kWh / 100 km</p>\r\n                                                </div>\r\n                                               \r\n                                                {/* <div className='parameter-item'>\r\n                                                    <h6>X.X kW Included Home Charging Cable</h6>\r\n                                                    <p>Up to X kilometers range per hour of charge time<sup>10</sup></p>\r\n                                                </div> */}\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>7.4 kW Single Phase AC Charger</h6>\r\n                                                    <p>Up to 43 kilometers of range per hour of charge time<sup>10 11</sup></p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>22 kW Three Phase AC Charger</h6>\r\n                                                    <p>Up to 94 kilometers of range per hour of charge time<sup>10 11</sup></p>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n                              \r\n                                <Accordion.Item eventKey=\"8\">\r\n                                    <Accordion.Header>Exterior dimensions</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='exterior-dimensions-section'>\r\n                                            <div className='exterior-dimensions-left-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Wheelbase</h6>\r\n                                                    <p>3094 mm</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Overall Length</h6>\r\n                                                    <p>4996 mm (front)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Ground Clearance</h6>\r\n                                                    <p>117 mm</p>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='exterior-dimensions-right-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Overall Width</h6>\r\n                                                    <p>2207 mm (with mirrors)</p>\r\n                                                </div>\r\n                                               \r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Overall Height</h6>\r\n                                                    <p>1623 mm</p>\r\n                                                </div>\r\n                                            </div>\r\n                                            {\r\n                                                !isMobile\r\n                                                ?\r\n                                                <img alt=\"\" className='image' src={`${getCMSAssets()}/exterior/exterior-dimensions.svg`} />\r\n                                                :\r\n                                                <img alt=\"\" className='image' src={`${getCMSAssets()}/exterior/m-exterior-dimensions.svg`} />\r\n                                            }\r\n                                            \r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n                                <Accordion.Item eventKey=\"9\">\r\n                                    <Accordion.Header>Interior dimensions</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='interior-dimensions-section'>\r\n                                            <div className='interior-dimensions-left-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Headroom</h6>\r\n                                                    <p>980 mm (front)</p>\r\n                                                    <p>957 mm (rear)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>Shoulder Room</h6>\r\n                                                    <p>1497 mm (front)</p>\r\n                                                    <p>1488 mm (rear)</p>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='interior-dimensions-right-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Legroom</h6>\r\n                                                    <p>1124 mm (front - max)</p>\r\n                                                    <p>1006 mm (rear)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>Hip Room</h6>\r\n                                                    <p>1436 mm (front)</p>\r\n                                                    <p>1372 mm (rear)</p>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n\r\n                                <Accordion.Item eventKey=\"10\">\r\n                                    <Accordion.Header>Chassis & Suspension</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='chassis-suspension-section'>\r\n                                            <div className='chassis-suspension-left-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Front & Rear Suspension</h6>\r\n                                                    <p>5-link independent suspension with Passive-Plus Premium Dampers</p>\r\n                                                </div>\r\n                                               \r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Brake Type</h6>\r\n                                                    <p>Brembo® performance front brakes</p>\r\n                                                </div>\r\n                                                <div className='parameter-item '>\r\n                                                    <h6>Turning Circle</h6>\r\n                                                    <p>12.1 m (curb-to-curb)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>Driving Modes</h6>\r\n                                                    <p>Tour, Snow/Ice, Sport & My Mode (selectable on demand)</p>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='chassis-suspension-right-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Vehicle Control</h6>\r\n                                                    <p>Traction control and Automatic Vehicle Hold</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Brake Rotor Size</h6>\r\n                                                    <p style={{margin: '0'}}>390 mm (front) FRT Fixed Caliper Disc</p>\r\n                                                    <p>345 mm (rear) RR Sliding Caliper Disc</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Steering</h6>\r\n                                                    <p>Continuously Variable Electric Power Steering (EPS)</p>\r\n                                                </div>\r\n                                               \r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n                                <Accordion.Item eventKey=\"11\">\r\n                                    <Accordion.Header>Weights & capacities<sup>12</sup></Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='weights-capacities-section'>\r\n                                            <div className='weights-capacities-left-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                <h6>Tare Weight</h6>\r\n                                                <p>2,687 kg</p>\r\n                                                </div>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Gross Vehicle Weight</h6>\r\n                                                    <p>3200 kg</p>\r\n                                                </div>\r\n                                               \r\n                                            </div>\r\n                                            <div className='weights-capacities-right-panel'>\r\n                                               \r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Passenger Volume</h6>\r\n                                                    {/* <h6>Passenger Volume (L)</h6> */}\r\n                                                    <p>793 L (behind rear seat)</p>\r\n                                                    <p>1722 L (rear seatbacks folded)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>Passenger Volume</h6>\r\n                                                    <p>2976 L</p>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n                                <Accordion.Item eventKey=\"12\">\r\n                                    <Accordion.Header>Warranty & Service</Accordion.Header>\r\n                                    <Accordion.Body>\r\n                                        <div className='warranty-section'>\r\n                                            <div className='warranty-left-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Vehicle</h6>\r\n                                                    <p>5 Years, unlimited kilometers<sup>13</sup></p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>Service Intervals</h6>\r\n                                                    <p>12 months / 12,000 km (whichever comes first)</p>\r\n                                                    <p>5 years, standard service included<sup>14</sup></p>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='warranty-right-panel'>\r\n                                                <div className='parameter-item'>\r\n                                                    <h6>Battery</h6>\r\n                                                    <p>8 Years, 160,000 kilometer (whichever comes first)</p>\r\n                                                </div>\r\n                                                <div className='parameter-item last-line'>\r\n                                                    <h6>Premium Roadside Assistance</h6>\r\n                                                    <p>5 years, complimentary premium roadside assistance<sup>15</sup></p>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n                            </Accordion>\r\n\r\n                            <div className='disclaimer-container'>\r\n                                <p>Vehicles shown throughout this experience are simulated local production vehicles intended for illustrative purposes. Cadillac has taken reasonable steps to ensure your digital configuration replicates the vehicle you receive in real life. Colours and other features may appear different in real life.</p>\r\n\r\n                                <p><sup>1</sup> Full functionality requires compatible Bluetooth® and smartphone, and USB connectivity for some devices.</p>\r\n\r\n                                <p><sup>2</sup> Vehicle user interface is a product of Apple® and its terms of use and privacy policies apply. Requires compatible iPhone® and data plan rates apply. Apple CarPlay, Siri, iPhone and Apple Music are trademarks of Apple, Inc., registered in the U.S. and other countries. Use of Apple products requires acceptance of any applicable terms and conditions. Data plan rates apply.</p>\r\n\r\n                                <p><sup>3</sup> Vehicle user interface is a product of Google and its terms of use and privacy policies apply. To use Android Auto on your car display, you’ll need an Android phone running Android 6 or higher, an active data plan, and the Android Auto app. Google, Android and Android Auto are trademarks of Google LLC. Use of Google products requires acceptance of any applicable terms and conditions. Data plan rates apply.</p>\r\n\r\n                                <p><sup>4</sup> Not compatible with all devices.</p>\r\n\r\n                                <p><sup>5</sup> The system wirelessly charges one compatible mobile device. Some phones have built-in wireless charging technology and others require a special adaptor/back cover. To check for phone or other device compatibility consult your carrier.</p>\r\n\r\n                                <p><sup>6</sup> Always use seat belts and child restraints. Children are safer when properly secured in a rear seat in the appropriate child restraint. See your vehicle Owner’s Manual for more information.</p>\r\n\r\n                                <p><sup>7</sup> Safety or driver assistance features are no substitute for the driver’s responsibility to operate the vehicle in a safe manner. The driver should remain attentive to traffic, surroundings and road conditions at all times. Visibility, weather and road conditions may affect feature performance. Read the vehicle’s owner’s manual for more important safety limitations and information.</p>\r\n\r\n                                <p><sup>8</sup> Figures based on GM testing in the United States in controlled environments. Actual figures may vary and are subject to environmental conditions.</p>\r\n\r\n                                <p><sup>9</sup> The range of electric vehicles is determined using a uniform measurement procedure (WLTP). These results are not guaranteed. Range and energy consumption may vary under real-world conditions depending on driving style and various external factors. It is therefore not always possible to achieve the range according to WLTP.</p>\r\n\r\n                                <p><sup>10</sup> Actual charge times will vary based on battery condition, output of charger, vehicle settings and outside temperature. See the vehicle's Owner’s Manual for additional limitations.</p>\r\n\r\n                                <p><sup>11</sup> Home charging requires professionally installed, dedicated charge station.</p>\r\n\r\n                                <p><sup>12</sup> Cargo and load capacity restricted by weight and distribution. Subject to change pending final vehicle certification for Australia and New Zealand.</p>\r\n\r\n                                {/* <p><sup>13</sup> Placeholder for warranty disclaimer.</p>\r\n\r\n                                <p><sup>14</sup> Placeholder for standard service disclaimer.</p>\r\n\r\n                                <p><sup>15</sup> Placeholder for roadside assistance disclaimer.</p> */}\r\n\r\n                                <p><sup>13</sup> <sup>14</sup> <sup>15</sup>View important information and terms & conditions relating to service, roadside assistance, and warranties in the ownership section of the Cadillac Australia & New Zealand website.</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                {/* </div>     */}\r\n            </Dialog>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default ComparisonDialog","import { getCMSAssets } from 'helpers/Uri';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { Col, Row } from 'react-bootstrap';\r\n\r\nconst ConfidenceDialog = () => {\r\n\r\n    const linkSourceFromStore = useSelector((state: IAppState) => {\r\n        return state.linkSource;\r\n    });\r\n    const defaultConfigStore = useSelector((state: IAppState) => {\r\n        return state.defautConfig;\r\n    });\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    // const [isOpen, setIsOpen] = useState(false);\r\n\r\n    // const handleDialogOpen = () => {\r\n    //     setIsOpen(true);\r\n    //     document.body.style.overflowY = 'hidden';\r\n    //     document.body.style.paddingRight = '15px';\r\n    // }\r\n\r\n    // const handleDialogHide = () => {\r\n    //     setIsOpen(false);\r\n    //     document.body.style.overflowY = 'scroll';\r\n    //     document.body.style.paddingRight = '0px';\r\n    // }\r\n\r\n    const [isScrolled, setIsScrolled] = useState(false);\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const isMoible = useCheckMobileScreen()\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n    }\r\n\r\n    const handleDialogHide = () => {\r\n        setIsOpen(false);\r\n    }\r\n\r\n    // console.log(isOpen);\r\n\r\n    const handleScroll = (event: any) => {\r\n        const scrollTop = event.target.scrollTop;\r\n        setIsScrolled(scrollTop > 50);\r\n    };\r\n\r\n\r\n    const handleDialogShow = () => {\r\n        const dialogContents = document.querySelectorAll('.p-dialog-content');\r\n\r\n        dialogContents.forEach((dialogContent) => {\r\n            dialogContent.addEventListener('scroll', handleScroll);\r\n        });\r\n    };\r\n\r\n    //This useEffect used to detect the scrollTop distance and if it larger than 100, \r\n    //the 'Scroll to learn more' context will disappear\r\n    // Clean up event listeners when the dialog is hidden\r\n    useEffect(() => {\r\n        if (!isOpen) {\r\n            const dialogContents = document.querySelectorAll('.p-dialog-content');\r\n            dialogContents.forEach((dialogContent) => {\r\n                dialogContent.removeEventListener('scroll', handleScroll);\r\n            });\r\n        }\r\n    }, [isOpen]);\r\n\r\n    const crossIcon = (\r\n        <button className=\"p-dialog-titlebar-icon p-link\" onClick={() => handleDialogHide()}>\r\n            <img alt=\"\" className='close-icon' src={`${getCMSAssets()}/main/cross-white.svg`} />\r\n            {/* <img alt=\"\" className='close-icon' src={`${getCMSAssets()}/main/cross.svg`} /> */}\r\n        </button>\r\n    )\r\n\r\n    return (\r\n        <>\r\n            <div className='confidence-container stat-button-link'\r\n                data-dtm=\"variant\"\r\n                onClick={() => {\r\n                    handleDialogOpen();\r\n                }}\r\n            >\r\n                <img alt='cadillac logo' src={`${getCMSAssets()}/variants/Cadillac-Logo.svg`} />\r\n                <span>Explore Cadillac Confidence.</span>\r\n                <img alt='' className='arrow-confidence' src={`${getCMSAssets()}/main/arrow-confidence.svg`} />\r\n                {/* <span>Discover Cadillac Confidence, included with every LYRIQ.</span> */}\r\n            </div>\r\n\r\n            {linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink && (\r\n                <div className='private-link-expiry-container'>\r\n                    <span className=\"text1\">You are using a private configuration link.</span>\r\n                    <span className=\"text2\">The link will expire on {defaultConfigStore.ExpiryDateText}.</span>\r\n                </div>\r\n            )}\r\n\r\n            <Dialog\r\n                header=\"\" icons={crossIcon} className='design-your-dialog' visible={isOpen} position='bottom'\r\n                style={{ backgroundImage: `url(${getCMSAssets()}/global/DesignYour-Background.png)`, backgroundSize: '100% 100%', }}\r\n                onShow={() => handleDialogShow()}\r\n                onHide={() => handleDialogHide()}\r\n                draggable={false} resizable={true}\r\n            >\r\n                <div className='design-your-container' >\r\n                    <div className='design-your-initial-page'>\r\n                        <img alt=\"\" src={`${getCMSAssets()}/global/logo-white.svg`} />\r\n                        <h4>CADILLAC <br />CONFIDENCE</h4>\r\n                        <h5>Our commitment<br />with every cadillac</h5>\r\n                    </div>\r\n                    <div className='design-your-second-page'>\r\n                        <div className='panel-item'>\r\n                            <h5>Price confidence</h5>\r\n                            <p>Wherever you buy your Cadillac</p>\r\n                        </div>\r\n                        <div className='panel-item'>\r\n                            <h5>5 years</h5>\r\n                            <p>unlimited kilometre warranty<sup>1</sup></p>\r\n                        </div>\r\n                        <div className='panel-item'>\r\n                            <h5>5 years</h5>\r\n                            <p>Premium roadside assist<sup>1</sup></p>\r\n                        </div>\r\n                        <div className='panel-item'>\r\n                            <h5>5 years</h5>\r\n                            <p>scheduled servicing / 5 scheduled services<sup>1</sup></p>\r\n                        </div>\r\n                        <div className='panel-item'>\r\n                            <h5>8 years / 160,000km</h5>\r\n                            <p>battery warranty<br />(whichever comes first)<sup>1</sup></p>\r\n                        </div>\r\n                        <div className='panel-item'>\r\n                            <h5>Charging covered</h5>\r\n                            {\r\n                                selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                ?\r\n                                <p>1 year complimentary public charging, and\r\n                                {\r\n                                    !isMoible\r\n                                        ?\r\n                                        <br />\r\n                                        :\r\n                                        <>&nbsp;</>\r\n                                }\r\n                                your choice of 2 additional years public charging, or a home charger installed<sup>2</sup>\r\n                                </p>\r\n                                :\r\n                                <p>$400 complimentary public charging credit, and \r\n                                    {\r\n                                        !isMoible\r\n                                            ?\r\n                                            <br />\r\n                                            :\r\n                                            <>&nbsp;</>\r\n                                    }\r\n                                    your choice of an additional $800 public charging credit, or a home charger installed<sup>2</sup>\r\n                                </p>\r\n                            }\r\n                           \r\n                        </div>\r\n                    </div>\r\n                    <div className='design-your-footer'>\r\n                        <br />\r\n                        <span>\r\n                            <sup>1</sup> View important information and terms & conditions relating to service, roadside assistance, and warranties in the ownership section of the Cadillac Australia & New Zealand website.\r\n                        </span>\r\n                        <br /><br />\r\n                        <span>\r\n                            <sup>2</sup> Cadillac has partnered with third party providers in Australia and New Zealand to provide public and home charging services. Fair use and other policies apply. View order T&Cs when completing your purchase for more information.\r\n                        </span>\r\n                    </div>\r\n                </div>\r\n\r\n            </Dialog>\r\n\r\n            {/* <Dialog\r\n                header=\"\" icons={crossIcon} className='design-your-dialog' visible={isOpen} position='bottom'\r\n                // style={{ backgroundImage: `url(${getCMSAssets()}/global/DesignYour-Background.png)`, backgroundSize: '100% 100%', }}\r\n                onShow={() => handleDialogShow()}\r\n                onHide={() => handleDialogHide()}\r\n                draggable={false} resizable={true}\r\n            >\r\n                <div className='design-your-container' >\r\n                    <div className='design-your-page-title'>\r\n                        <img alt=\"\" src={`${getCMSAssets()}/menu/Cadillac-Logo.svg`} />\r\n                        <h4>CADILLAC <br />CONFIDENCE</h4>\r\n                    </div>\r\n                    <Row className='design-your-page-content'>\r\n                        <Col sm={4}>\r\n                            <div className='design-your-page-card'>\r\n                                <div className='card-title'>\r\n                                    <h5>PRICE</h5>\r\n                                </div>\r\n                                <div className='card-content-container'>\r\n                                    <div className='card-context'>\r\n                                        <p>When you buy a new Cadillac, you buy from us. This means price of a new Cadillac is the same for everyone and you can be confident wherever you buy. whenever you buy.</p>\r\n                                    </div>\r\n                                    <div className='card-bottom-context'>\r\n                                        <p>Pricing consistency excludes local state or territory taxes and charges which may alter the drive away price.</p>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </Col>\r\n                       \r\n                        <Col sm={4}>\r\n                            <div className='design-your-page-card'>\r\n                                <div className='card-title'>\r\n                                    <h5>OWNERSHIP</h5>\r\n                                </div>\r\n                                <div className='card-content-container'>\r\n                                    <div className='card-context'>\r\n                                        <p>5 years unlimited kilometre warranty</p>\r\n                                        <p>5 years Premium roadside assistance</p>\r\n                                        <p>5 years included scheduled servicing</p>\r\n                                    </div>\r\n                                    <div className='card-bottom-context'>\r\n                                        <p>View important information and terms & conditions relating to service, roadside assistance, and warranties in the ownership section of the Cadilac Australia & New Zealand website.</p>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </Col>\r\n                       \r\n                        <Col sm={4}>\r\n                            <div className='design-your-page-card'>\r\n                                <div className='card-title'>\r\n                                    <h5>CHARGING</h5>\r\n                                </div>\r\n                                <div className='card-content-container'>\r\n                                    <div className='card-context'>\r\n                                        <p>1 year complimentary public charging with every Cadillac, plus your choice of</p>\r\n                                        <p>2 years additional complimentary public charging or a home charger installed.</p>\r\n                                    </div>\r\n                                    <div className='card-bottom-context'>\r\n                                        <p>Cadillac has partnered with third party\r\n                                        providers in Australia and New Zealand to\r\n                                        provide public and home charging services.\r\n                                        Fair use and other policies apply. View\r\n                                        order T&Cs when completing your\r\n                                        purchase for more information.</p>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </Col>\r\n                    </Row>\r\n                </div>\r\n            </Dialog> */}\r\n        </>\r\n    )\r\n}\r\n\r\n\r\nexport default ConfidenceDialog","import React, { useEffect, useState } from 'react'\r\nimport { Accordion, Button, Carousel, Col, Row } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { useLocation, useNavigate, useParams } from 'react-router-dom';\r\nimport { Dialog } from 'primereact/dialog'\r\nimport { classNames } from 'primereact/utils';\r\nimport { getCMSAssets } from 'helpers/Uri';\r\nimport ImageComparison from 'pages/Main/variant/ImageComparison';\r\nimport ComparisonDialog from './ComparisonDialog';\r\nimport { currencyFormat, getFrontendUrl } from 'helpers/Uri';\r\nimport { isNil } from 'lodash';\r\n\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport * as selectedDeliveryStore from \"stores/UserSelectedDelivery\";\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as availableInventoryModel from 'model/IAvailableInventory';\r\nimport * as variantModel from 'model/IVehicle';\r\nimport * as vehicleService from 'services/Vehicle';\r\nimport * as vehicleStore from 'stores/Vehicle';\r\n\r\n\r\nimport ConfidenceDialog from './ConfidenceDialog';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\n\r\nconst Variant = () => {\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectVehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.selectedVehicle;\r\n    });\r\n    const vehicleFromStore = useSelector((appState: IAppState) => {\r\n        return appState.vehicle;\r\n    });\r\n    const selectedCustomerType = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n    const defaultConfigFromStore = useSelector((state: IAppState) => {\r\n        return state.defautConfig;\r\n    });\r\n    const variantListFromStore = useSelector((appState: IAppState) => {\r\n        return appState?.vehicle?.VariantList;\r\n    });\r\n    const getExteriorImages = (index: number) => {\r\n        return vehicleFromStore?.SelectedExterior?.ExteriorPicture != null && vehicleFromStore?.SelectedExterior?.ExteriorPicture.length > index\r\n            ? vehicleFromStore?.SelectedExterior?.ExteriorPicture[index] : \"\";\r\n    }\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const [selectedVariant, setSelectedVariant] = useState<variantModel.IVariant | null>(null);\r\n    const [variants, setVariants] = useState<variantModel.IVariant[]>([]);\r\n\r\n\r\n    const [isTypeVisible, setIsTypeVisible] = useState(false);\r\n\r\n    useEffect(() => {\r\n        \r\n        if (!isNil(selectedDeliveryFromStore.Country?.code)\r\n            && selectedDeliveryFromStore.Country?.code != \"\") {\r\n            doGetVariants();\r\n        }\r\n\r\n    }, [JSON.stringify({ country: selectedDeliveryFromStore.Country?.code, state: selectedDeliveryFromStore?.State?.code})]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(variants) && variants.length > 0) {\r\n\r\n            if (!isNil(defaultConfigFromStore?.VariantName) && defaultConfigFromStore?.VariantName != \"\") {\r\n                //set default variant from interest link/inventory link\r\n                let updatedVariants = variants.map((item: variantModel.IVariant) => {\r\n                    if (defaultConfigFromStore?.VariantName?.toLowerCase() == item.VariantName?.toLowerCase()) {\r\n                        return {\r\n                            ...item,\r\n                            IsDefault: true\r\n                        };\r\n                    }\r\n                    else {\r\n                        return {\r\n                            ...item,\r\n                            IsDefault: false\r\n                        };\r\n                    }\r\n                });\r\n\r\n                let isDefaultVariant = updatedVariants.find(m => m.IsDefault);\r\n                if (isDefaultVariant != null && isDefaultVariant != undefined) {\r\n                    setSelectedVariant(isDefaultVariant);\r\n                    dispatch(selectedConfigStore.updateVariantAction(\r\n                        isDefaultVariant?.VariantID || \"\",\r\n                        isDefaultVariant?.VariantName || \"\",\r\n                        isDefaultVariant?.VariantPrice || 0));\r\n                }\r\n                dispatch(vehicleStore.updateVariantAction(updatedVariants, isDefaultVariant || null));\r\n            }\r\n            else {\r\n                //set default variant from variant api\r\n                let isDefaultVariant = variants.find(m => m.IsDefault);\r\n                if (isDefaultVariant != null && isDefaultVariant != undefined) {\r\n                    setSelectedVariant(isDefaultVariant);\r\n                    dispatch(selectedConfigStore.updateVariantAction(\r\n                        isDefaultVariant?.VariantID || \"\",\r\n                        isDefaultVariant?.VariantName || \"\",\r\n                        isDefaultVariant?.VariantPrice || 0));\r\n                }\r\n                dispatch(vehicleStore.updateVariantAction(variants, isDefaultVariant || null));\r\n            }\r\n        }\r\n        else {\r\n            setSelectedVariant(null);\r\n            dispatch(selectedConfigStore.updateVariantAction(\"\", \"\", 0));\r\n            dispatch(vehicleStore.updateVariantAction([], null));\r\n        }\r\n\r\n    }, [variants, defaultConfigFromStore?.VariantName])\r\n\r\n    useEffect(() => {\r\n        // Trigger fade-in effect when chooseColor.paid changes\r\n        setIsTypeVisible(false);\r\n\r\n        // Clear the visibility after the transition duration\r\n        const timeoutId = setTimeout(() => {\r\n            setIsTypeVisible(true)\r\n        }, 260); // Adjust the duration based on your transition time\r\n\r\n        // Clear the timeout to avoid unnecessary updates\r\n        return () => clearTimeout(timeoutId);\r\n\r\n        ImageComparison();\r\n    }, [selectedVariant]);\r\n\r\n    const doGetVariants = async () => {\r\n        let requestData: variantModel.IVariantYanaRequest = {\r\n            Country: selectedDeliveryFromStore.Country?.code || null,\r\n            State: selectedDeliveryFromStore.State?.code || null,\r\n            Postcode: selectedDeliveryFromStore.SelectedDeliveryPostcode,\r\n            Suburb: selectedDeliveryFromStore.SelectedDeliverySuburb || null,\r\n            CustomerType: selectedCustomerType,\r\n        };\r\n        let response = await vehicleService.getVariants(requestData);\r\n        if (response.status) {\r\n            let resData: variantModel.IVariant[] = [];\r\n            if (response.data.length > 0) {\r\n                resData = response.data.map((item: any) => {\r\n                    let returnVariant = {\r\n                        VariantID: item.variantID,\r\n                        VariantName: item.variantName,\r\n                        VariantPrice: item.variantPrice,\r\n                        DriveawayPrice: item.driveawayPrice,\r\n                        Range: item.range,\r\n                        Power: item.power,\r\n                        KmHour: item.kmHour,\r\n                        VariantPicture: item.variantPicture,\r\n                        VariantPictureMobile: item.variantPictureMobile,\r\n                        VariantDescription: item.variantDescription,\r\n                        IsDefault: item.isDefault,\r\n                        HasStock: null,\r\n                    };\r\n                    return returnVariant;\r\n                });\r\n            }\r\n            setVariants(resData);\r\n        }\r\n        else {\r\n            setVariants([]);\r\n            setSelectedVariant(null);\r\n            dispatch(selectedConfigStore.clearSelectedConfigAction());\r\n            dispatch(vehicleStore.clearVehicleAction());\r\n            //dispatch(selectedDeliveryStore.updateEstDeliveryDateAction(null));\r\n        }\r\n    }\r\n\r\n    const variantItemTemplate = (item: variantModel.IVariant, index: number) => {\r\n\r\n        return (\r\n            <Button\r\n                data-dtm=\"variant\"\r\n                key={\"variant_\" + index}\r\n                className={classNames({\r\n                    \"stat-button-link\": true,\r\n                    \"variant-btn\": true,\r\n                    \"selected\": item.VariantID == selectedVariant?.VariantID\r\n                })}\r\n                onClick={async () => {\r\n\r\n                    setSelectedVariant(item);\r\n\r\n                    dispatch(vehicleStore.updateSelectedVariantAction(item));\r\n                    dispatch(selectedConfigStore.updateVariantAction(\r\n                        item?.VariantID || \"\",\r\n                        item?.VariantName || \"\",\r\n                        item?.VariantPrice || 0));\r\n\r\n                }}\r\n            >\r\n                <h6>{item.VariantName}</h6>\r\n                <span>from {currencyFormat(item.DriveawayPrice)}</span>\r\n            </Button>\r\n        );\r\n    }\r\n\r\n    const isFromInventoryPage = (): boolean => {\r\n        if (!isNil(defaultConfigFromStore.VariantName) && defaultConfigFromStore.VariantName != \"\"\r\n            && (isNil(defaultConfigFromStore.LinkKey) || defaultConfigFromStore.LinkKey == \"\")) {\r\n            return true;\r\n        }\r\n        return false;\r\n    }\r\n\r\n    const onGoToInventory = () => {\r\n        let url = `${getFrontendUrl()}/inventory?shopfront=1`;\r\n        //let url = `${getFrontendUrl()}/inventory?variant=${defaultConfigFromStore.VariantName}`;\r\n        //url += `&exterior=${defaultConfigFromStore.ExteriorName}&interior=${defaultConfigFromStore.InteriorName}`;\r\n        //url += `&shopfront=1`;\r\n        //url += `&selectedCountry=${selectedDeliveryFromStore.Country?.code}&selectedState=${selectedDeliveryFromStore.State?.code}`;\r\n        navigate(url);\r\n    }\r\n\r\n    const directionButtons = (direction: any) => {\r\n        return (\r\n            <span\r\n                aria-hidden=\"true\"\r\n                className={direction === \"Next\" ? \"button-next\" : \"button-prev\"}\r\n            >\r\n                <img className=\"image\" src={`${getCMSAssets()}/main/${direction}-round.svg`} />\r\n            </span>\r\n        );\r\n    };\r\n\r\n    setTimeout(() => {\r\n        let indicators = document.getElementsByClassName(\"carousel-indicators\");\r\n        for (let i = 0; i < indicators.length; i++) {\r\n            indicators[i].setAttribute('data-dtm', 'gallery');\r\n            indicators[i].classList.add('stat-dots\"');\r\n        }\r\n    }, 200);\r\n\r\n    return (\r\n        <div className='variant-container'>\r\n            {isFromInventoryPage() && (\r\n                <div className=\"link-inventory-wrapper stat-button-link\"\r\n                    data-dtm=\"checkout\"\r\n                    onClick={() => {\r\n                    onGoToInventory();\r\n                }}>\r\n                    <img alt=\"\" src={`${getCMSAssets()}/inventory/arrow.svg`} />\r\n                    <span>INVENTORY</span>\r\n                </div>\r\n            )}\r\n            {\r\n                isMobile\r\n                ?\r\n                <div className='mobile-variant-header-container'>\r\n                    <Carousel\r\n                        nextIcon={directionButtons(\"Next\")}\r\n                        prevIcon={directionButtons(\"Prev\")}\r\n                        // interval={null}\r\n                        interval={3000}\r\n                    >\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(0)}\r\n                        >\r\n                            <img className=\"image\" src={getExteriorImages(0)} />\r\n                        </Carousel.Item>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(1)}\r\n                        >\r\n                            <img className=\"image\" src={getExteriorImages(2)} />\r\n                        </Carousel.Item>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(2)}\r\n                        >\r\n                            <img className=\"image\" src={getExteriorImages(3)} />\r\n                        </Carousel.Item>\r\n                    </Carousel>\r\n                    <div className='counter-container'>\r\n                        <div className='counter-item'>\r\n                            <div className='counter-title'>Range<sup>3</sup></div>\r\n                            <div className='counter-box'>\r\n                                <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.Range}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div className='counter-item'>\r\n                            <div className='counter-title'>Charge to 80%<sup>4</sup></div>\r\n                            <div className='counter-box'>\r\n                                <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.Power}</div>\r\n                            </div>\r\n                        </div>\r\n                        <div className='counter-item'>\r\n                            <div className='counter-title'>0-100 km/h<sup>5</sup></div>\r\n                            <div className='counter-box'>\r\n                                <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.KmHour}</div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                :\r\n                <></>\r\n            }\r\n            <div className='brand-name'>\r\n                <h6>2025</h6>\r\n                <h1>LYRIQ</h1>\r\n            </div>\r\n            <div className='electric-panel'>\r\n                <div className='electric-image-panel'>\r\n                    <img alt='' src={`${getCMSAssets()}/variants/charger.svg`} />\r\n                </div>\r\n                <span>All-Electric</span>\r\n            </div>\r\n\r\n            <ConfidenceDialog />\r\n\r\n            <h3 className='main-page-section-title'>VARIANT</h3>\r\n            <div className='variant-btn-panel'>\r\n                {!isNil(variantListFromStore) && variantListFromStore != null &&\r\n                    variantListFromStore.length > 0 && (variantListFromStore as variantModel.IVariant[]).map((item: variantModel.IVariant, index: number) => {\r\n                        if (isFromInventoryPage()) {\r\n                            //if from inventory page\r\n                            if (item.VariantName == defaultConfigFromStore.VariantName) {\r\n                                return variantItemTemplate(item, index);\r\n                            }\r\n                            else {\r\n                                return (<></>);\r\n                            }\r\n                        }\r\n                        else {\r\n                            return variantItemTemplate(item, index);\r\n                        }\r\n\r\n                    })}\r\n            </div>\r\n            <ComparisonDialog pageName=\"Configure\" />\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Variant","import React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n//import { useLocation } from 'react-router-dom';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\n\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport * as selectedDeliveryStore from \"stores/UserSelectedDelivery\";\r\nimport * as vehicleStore from 'stores/Vehicle';\r\n\r\nimport * as rdUri from 'helpers/Uri';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as vehicleService from 'services/Vehicle';\r\nimport { currencyFormat } from 'helpers/Uri';\r\n\r\nconst Exterior = () => {\r\n    const dispatch = useDispatch();\r\n\r\n    //const location = useLocation();\r\n    //const searchParams = new URLSearchParams(location.search);\r\n    //const selectedExteriorNameFromUrl = searchParams.get('selectedExterior');\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectVehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.selectedVehicle;\r\n    });\r\n    const vehicleFromStore = useSelector((appState: IAppState) => {\r\n        return appState.vehicle;\r\n    });\r\n    const defaultConfigFromStore = useSelector((state: IAppState) => {\r\n        return state.defautConfig;\r\n    });\r\n    const exteriorListFromStore = useSelector((appState: IAppState) => {\r\n        return appState?.vehicle?.ExteriorList;\r\n    });\r\n\r\n\r\n    const [selectedExterior, setSelectedExterior] = useState<vehicleModel.IExterior | null>(null);\r\n    const [exteriors, setExteriors] = useState<vehicleModel.IExterior[]>([]);\r\n\r\n\r\n    const [isPaidVisible, setIsPaidVisible] = useState(false);\r\n\r\n\r\n    useEffect(() => {\r\n        if (!isNil(vehicleFromStore?.SelectedVariant?.VariantID) && vehicleFromStore?.SelectedVariant?.VariantID != \"\") {\r\n            doGetExterior();\r\n        }\r\n    }, [vehicleFromStore?.SelectedVariant]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(exteriors) && exteriors.length > 0) {\r\n\r\n            if (!isNil(defaultConfigFromStore?.ExteriorName) && defaultConfigFromStore?.ExteriorName != \"\") {\r\n                //set default exterior from interest link/inventory link\r\n                let updatedExteriors = exteriors.map((item: vehicleModel.IExterior) => {\r\n                    if (defaultConfigFromStore?.ExteriorName?.toLowerCase() == item.ExteriorColorName?.toLowerCase()) {\r\n                        return {\r\n                            ...item,\r\n                            IsDefault: true\r\n                        };\r\n                    }\r\n                    else {\r\n                        return {\r\n                            ...item,\r\n                            IsDefault: false\r\n                        };\r\n                    }\r\n                });\r\n\r\n                let isDefaultExterior = updatedExteriors.find(m => m.IsDefault);\r\n                if (isDefaultExterior != null && isDefaultExterior != undefined) {\r\n                    setSelectedExterior(isDefaultExterior);\r\n                    dispatch(selectedConfigStore.updateExteriorAction(\r\n                        isDefaultExterior.ExteriorID || \"\",\r\n                        isDefaultExterior.ExteriorColorName || \"\",\r\n                        isDefaultExterior?.ExteriorPrice || 0));\r\n                }\r\n                dispatch(vehicleStore.updateExteriorAction(updatedExteriors, isDefaultExterior || null));\r\n\r\n            }\r\n            else {\r\n                //set default exterior from exterior api\r\n                let isDefaultExterior = exteriors.find(m => m.IsDefault);\r\n                //console.log(isDefaultExterior);\r\n\r\n                if (isDefaultExterior != null && isDefaultExterior != undefined) {\r\n                    setSelectedExterior(isDefaultExterior);\r\n                    dispatch(selectedConfigStore.updateExteriorAction(\r\n                        isDefaultExterior.ExteriorID || \"\",\r\n                        isDefaultExterior.ExteriorColorName || \"\",\r\n                        isDefaultExterior?.ExteriorPrice || 0));\r\n                }\r\n                dispatch(vehicleStore.updateExteriorAction(exteriors, isDefaultExterior || null));\r\n            }\r\n        }\r\n        else {\r\n            dispatch(selectedConfigStore.updateExteriorAction(\"\", \"\", 0));\r\n            dispatch(vehicleStore.updateExteriorAction([], null));\r\n            setSelectedExterior(null);\r\n        }\r\n\r\n    }, [exteriors, defaultConfigFromStore?.ExteriorName])\r\n\r\n    const doGetExterior = async () => {\r\n        let requestData: vehicleModel.IExterior = {\r\n            Country: selectedDeliveryFromStore.Country?.code || null,\r\n            VariantID: vehicleFromStore.SelectedVariant?.VariantID || null,\r\n            VariantName: null,\r\n            ExteriorID: null,\r\n            ExteriorColorName: null,\r\n            ExteriorColorDescTitle: null,\r\n            ExteriorColorDesc: null,\r\n            ExteriorPrice: null,\r\n            ExteriorPicture: null,\r\n            ExteriorPictureMobile: null,\r\n            ExteriorFilterImage: null,\r\n            ExteriorFilterMobile: null,\r\n            IsDefault: null,\r\n            HasStock: null,\r\n            ExteriorOrderingNo: 0,\r\n        };\r\n\r\n        if (isNil(requestData.VariantID) || requestData.VariantID == \"\")\r\n            return;\r\n\r\n        let response = await vehicleService.getExteriors(requestData);\r\n        if (response.status) {\r\n            let resData: vehicleModel.IExterior[] = [];\r\n            if (response.data.length > 0) {\r\n                resData = response.data.map((item: any) => {\r\n                    return {\r\n                        Country: item.country,\r\n                        VariantID: item.variantID,\r\n                        VariantName: null,\r\n                        ExteriorID: item.exteriorID,\r\n                        ExteriorColorName: item.exteriorColorName,\r\n                        ExteriorColorDescTitle: item.exteriorColorDescTitle,\r\n                        ExteriorColorDesc: item.exteriorColorDesc,\r\n                        ExteriorPrice: item.exteriorPrice,\r\n                        ExteriorPicture: item.exteriorPicture,\r\n                        ExteriorPictureMobile: item.exteriorPictureMobile,\r\n                        ExteriorFilterImage: item.exteriorFilter,\r\n                        ExteriorFilterMobile: item.exteriorFilterMobile,\r\n                        IsDefault: item.isDefault,\r\n                        HasStock: true\r\n                    };\r\n                });\r\n            }\r\n            setExteriors(resData);\r\n        }\r\n        else {\r\n            setExteriors([]);\r\n            setSelectedExterior(null);\r\n            dispatch(selectedConfigStore.updateExteriorAction(\"\", \"\", 0));\r\n            dispatch(vehicleStore.updateExteriorAction([], null));\r\n            \r\n        }\r\n    }\r\n\r\n    useEffect(() => {\r\n        // Trigger fade-in effect when chooseColor.paid changes\r\n        setIsPaidVisible(false)\r\n\r\n        // Clear the visibility after the transition duration\r\n        const timeoutId = setTimeout(() => {\r\n            setIsPaidVisible(true);\r\n        }, 260); // Adjust the duration based on your transition time\r\n\r\n        // Clear the timeout to avoid unnecessary updates\r\n        return () => clearTimeout(timeoutId);\r\n    }, [selectedExterior?.ExteriorColorName]);\r\n\r\n\r\n    const exteriorTemplate = (item: vehicleModel.IExterior, index: number) => {\r\n        return (\r\n            <div key={\"exterior_\" + index}\r\n                data-dtm=\"exterior\"\r\n                className={classNames({\r\n                    \"stat-image-link\": true,\r\n                    \"color-options-item\": true,\r\n                    \"active\": item.ExteriorID == selectedExterior?.ExteriorID\r\n                })}\r\n                onClick={(e: any) => {\r\n                    setSelectedExterior(item);\r\n\r\n                    dispatch(vehicleStore.updateSelectedExteriorAction(item || null));\r\n                    dispatch(selectedConfigStore.updateExteriorAction(\r\n                        item?.ExteriorID || \"\",\r\n                        item?.ExteriorColorName || \"\",\r\n                        item?.ExteriorPrice || 0));\r\n\r\n                    //clear selected accessories & charging when color changed\r\n                    dispatch(selectedConfigStore.updateAllOptionsAction([]));\r\n                }}\r\n            >\r\n                <div className='color-options-round'>\r\n                    <img className=\"image\" src={item?.ExteriorFilterImage || undefined} alt={item.ExteriorColorName || \"\"} />\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n\r\n    return (\r\n        <div className='exterior-container'>\r\n            <h3 className='main-page-section-title'>EXTERIOR</h3>\r\n\r\n            <div className='title-panel' >\r\n                <p style={{ opacity: isPaidVisible ? 1 : 0, transition: 'opacity .26s ease-in' }}>{isPaidVisible && selectedExterior?.ExteriorColorName || ''}</p>\r\n                <span className='extra-paid' style={{ opacity: isPaidVisible ? 1 : 0, transition: 'opacity .26s ease-in' }}>\r\n                    {isPaidVisible && currencyFormat(selectedExterior?.ExteriorPrice || 0)}\r\n                </span>\r\n            </div>\r\n\r\n            <div className='exterior-options-panel'>\r\n                {!isNil(exteriorListFromStore) && exteriorListFromStore != null &&\r\n                    exteriorListFromStore.length > 0 && (exteriorListFromStore as vehicleModel.IExterior[]).map((item: vehicleModel.IExterior, index: number) => {\r\n                        if (!isNil(defaultConfigFromStore.ExteriorName) && defaultConfigFromStore.ExteriorName != \"\"\r\n                            && (isNil(defaultConfigFromStore.LinkKey) || defaultConfigFromStore.LinkKey == \"\")) {\r\n                            //if from inventory page\r\n                            if (item.ExteriorColorName == defaultConfigFromStore.ExteriorName) {\r\n                                return exteriorTemplate(item, index);\r\n                            }\r\n                            else {\r\n                                return (<></>);\r\n                            }\r\n                        }\r\n                        else {\r\n                            return exteriorTemplate(item, index);\r\n                        }\r\n                    })}\r\n\r\n            </div>\r\n\r\n            <div className='desc-content'><span>{selectedExterior?.ExteriorColorDescTitle} </span>{selectedExterior?.ExteriorColorDesc}</div>\r\n\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Exterior","\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n//import { useLocation } from 'react-router-dom';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport { currencyFormat } from 'helpers/Uri';\r\n\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport * as selectedDeliveryStore from \"stores/UserSelectedDelivery\";\r\nimport * as vehicleStore from \"stores/Vehicle\";\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as vehicleService from 'services/Vehicle';\r\nimport * as defaultConfigStore from 'stores/DefaultConfig';\r\nimport * as defaultConfigHelper from 'businessHelpers/DefaultConfigHelper';\r\n\r\nconst Interior = () => {\r\n    const dispatch = useDispatch();\r\n    //const location = useLocation();\r\n    //const searchParams = new URLSearchParams(location.search);\r\n    //const selectedInteriorNameFromUrl = searchParams.get('selectedInterior');\r\n\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectVehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.selectedVehicle;\r\n    });\r\n    const vehicleFromStore = useSelector((appState: IAppState) => {\r\n        return appState.vehicle;\r\n    });\r\n    const defaultConfigFromStore = useSelector((state: IAppState) => {\r\n        return state.defautConfig;\r\n    });\r\n    const interiorListFromStore = useSelector((appState: IAppState) => {\r\n        return appState?.vehicle?.InteriorList;\r\n    });\r\n\r\n\r\n    const [selectedInterior, setSelectedInterior] = useState<vehicleModel.IInterior | null>(null);\r\n    const [interiors, setInteriors] = useState<vehicleModel.IInterior[]>([]);\r\n\r\n\r\n    const [isPaidVisible, setIsPaidVisible] = useState(false);\r\n\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        // Trigger fade-in effect when chooseColor.paid changes\r\n        setIsPaidVisible(false);\r\n\r\n        // Clear the visibility after the transition duration\r\n        const timeoutId = setTimeout(() => {\r\n            setIsPaidVisible(true)\r\n        }, 260); // Adjust the duration based on your transition time\r\n\r\n        // Clear the timeout to avoid unnecessary updates\r\n        return () => clearTimeout(timeoutId);\r\n    }, [vehicleFromStore?.SelectedInterior]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(vehicleFromStore?.SelectedExterior?.ExteriorID) && vehicleFromStore?.SelectedExterior?.ExteriorID != \"\") {\r\n            doGetInterior();\r\n        }\r\n    }, [vehicleFromStore?.SelectedExterior])\r\n\r\n    useEffect(() => {\r\n        if (!isNil(vehicleFromStore?.SelectedInterior?.InteriorID) && vehicleFromStore?.SelectedInterior?.InteriorID != \"\") {\r\n            doGetOptions();\r\n        }\r\n    }, [vehicleFromStore?.SelectedInterior])\r\n\r\n    useEffect(() => {\r\n        if (!isNil(interiors) && interiors.length > 0) {\r\n            //set default interior from interest link/inventory link\r\n            if (!isNil(defaultConfigFromStore?.InteriorName) && defaultConfigFromStore?.InteriorName != \"\") {\r\n                let updatedInteriors = interiors.map((item: vehicleModel.IInterior) => {\r\n                    if (defaultConfigFromStore?.InteriorName?.toLowerCase() == item.InteriorColorName?.toLowerCase()) {\r\n                        return {\r\n                            ...item,\r\n                            IsDefault: true\r\n                        };\r\n                    }\r\n                    else {\r\n                        return {\r\n                            ...item,\r\n                            IsDefault: false\r\n                        };\r\n                    }\r\n                });\r\n\r\n                let isDefaultInterior = updatedInteriors.find(m => m.IsDefault);\r\n                if (isDefaultInterior != null && isDefaultInterior != undefined) {\r\n                    setSelectedInterior(isDefaultInterior);\r\n\r\n                    //update Est. delivery\r\n                    //console.log(\"isDefaultInterior-\" + isDefaultInterior.Available);\r\n                    //dispatch(selectedDeliveryStore.updateEstDeliveryDateAction(isDefaultInterior.Available));\r\n\r\n                    //update selected interior and stock\r\n                    dispatch(selectedConfigStore.updateInteriorAction(\r\n                        isDefaultInterior.InteriorID || \"\",\r\n                        isDefaultInterior.InteriorColorName || \"\",\r\n                        isDefaultInterior?.InteriorPrice || 0,\r\n                        isDefaultInterior.HasStock || false));\r\n                }\r\n               \r\n                dispatch(vehicleStore.updateInteriorAction(updatedInteriors, isDefaultInterior || null));\r\n\r\n                dispatch(defaultConfigStore.setDefaultConfigLoadedAction(true));\r\n            }\r\n            else {\r\n                //set default interior from interior api\r\n                let isDefaultInterior = interiors.find(m => m.IsDefault);\r\n                if (isDefaultInterior != null && isDefaultInterior != undefined) {\r\n                    setSelectedInterior(isDefaultInterior);\r\n\r\n                    //update Est. delivery\r\n                    //console.log(\"isDefaultInterior-\" + isDefaultInterior.Available);\r\n                    //dispatch(selectedDeliveryStore.updateEstDeliveryDateAction(isDefaultInterior.Available));\r\n\r\n                    //update selected interior and stock\r\n                    dispatch(selectedConfigStore.updateInteriorAction(\r\n                        isDefaultInterior?.InteriorID || \"\",\r\n                        isDefaultInterior.InteriorColorName || \"\",\r\n                        isDefaultInterior?.InteriorPrice || 0,\r\n                        isDefaultInterior.HasStock || false));\r\n                }\r\n                dispatch(vehicleStore.updateInteriorAction(interiors, isDefaultInterior || null));\r\n            }\r\n        }\r\n        else {\r\n            setSelectedInterior(null);\r\n            //console.log(\"isDefaultInterior-null\");\r\n            //dispatch(selectedDeliveryStore.updateEstDeliveryDateAction(null));\r\n            dispatch(selectedConfigStore.updateInteriorAction(\"\", \"\", 0, false));\r\n            dispatch(vehicleStore.updateInteriorAction([], null));\r\n        }\r\n\r\n    }, [interiors, defaultConfigFromStore?.InteriorName])\r\n\r\n    const doGetInterior = async () => {\r\n        let interiorRequest: vehicleModel.IInterior = {\r\n            Country: selectedDeliveryFromStore.Country?.code || null,\r\n            State: selectedDeliveryFromStore.State?.code || null,\r\n            VariantID: vehicleFromStore.SelectedVariant?.VariantID || null,\r\n            VariantName: vehicleFromStore.SelectedVariant?.VariantName || null,\r\n            ExteriorID: vehicleFromStore.SelectedExterior?.ExteriorID || null,\r\n            ExteriorName: vehicleFromStore.SelectedExterior?.ExteriorColorName || null,\r\n            InteriorID: null,\r\n            InteriorColorName: null,\r\n            InteriorColorDescTitle: null,\r\n            InteriorColorDesc: null,\r\n            InteriorPrice: null,\r\n            InteriorPicture: null,\r\n            InteriorPictureMobile: null,\r\n            InteriorFilterImage: null,\r\n            InteriorFilterMobile: null,\r\n            IsDefault: null,\r\n            Available: null,\r\n            HasStock: null,\r\n            InteriorOrderingNo: 0,\r\n        };\r\n\r\n        if (isNil(interiorRequest.VariantID) || interiorRequest.VariantID == \"\"\r\n            || isNil(interiorRequest.ExteriorID) || interiorRequest.ExteriorID == \"\")\r\n            return;\r\n\r\n        let response = await vehicleService.getInteriors(interiorRequest);\r\n        if (response.status) {\r\n            let resData: vehicleModel.IInterior[] = [];\r\n            if (response.data.length > 0) {\r\n                resData = response.data.map((item: any) => {\r\n                    return {\r\n                        ...interiorRequest,\r\n                        InteriorID: item.interiorID,\r\n                        InteriorColorName: item.interiorColorName,\r\n                        InteriorColorDescTitle: item.interiorColorDescTitle,\r\n                        InteriorColorDesc: item.interiorColorDesc,\r\n                        InteriorPrice: item.interiorColorPrice,\r\n                        InteriorPicture: item.interiorPicture,\r\n                        InteriorPictureMobile: item.interiorPictureMobile,\r\n                        InteriorFilterImage: item.interiorFilter,\r\n                        InteriorFilterMobile: item.interiorFilterMobile,\r\n                        IsDefault: item.isDefault,\r\n                        Available: item.available,\r\n                        HasStock: item.hasStock\r\n                    };\r\n                });\r\n            }\r\n            setInteriors(resData);\r\n        }\r\n        else {\r\n            setInteriors([]);\r\n            setSelectedInterior(null);\r\n            //dispatch(selectedDeliveryStore.updateEstDeliveryDateAction(null));\r\n            dispatch(selectedConfigStore.updateInteriorAction(\"\", \"\", 0, false));\r\n            dispatch(vehicleStore.updateInteriorAction([], null));\r\n        }\r\n    }\r\n\r\n    const doGetOptions = async () => {\r\n        let requestData: vehicleModel.IVehicleOptionRequest = {\r\n            Country: selectedDeliveryFromStore.Country?.code || null,\r\n            VariantID: vehicleFromStore.SelectedVariant?.VariantID || null,\r\n            ExteriorID: vehicleFromStore.SelectedExterior?.ExteriorID || null,\r\n            InteriorID: vehicleFromStore.SelectedInterior?.InteriorID || null,\r\n        };\r\n        let response = await vehicleService.getOptions(requestData);\r\n        if (response.status) {\r\n            let accessories: vehicleModel.IVehicleOptions[] = [];\r\n            if (!isNil(response.data.accessories) && response.data.accessories.length > 0) {\r\n                response.data.accessories.map((item: any) => {\r\n                    accessories.push({\r\n                        YanaOptionID: item.yanaOptionID,\r\n                        OptionType: item.optionType,\r\n                        OptionName: item.optionName,\r\n                        OptionPrice: item.optionPrice,\r\n                        OptionPicture: item.optionPicture,\r\n                        OptionPictureMobile: item.optionPictureMobile,\r\n                        OptionDesc: item.optionDesc,\r\n                        ChargeType: item.chargeType,\r\n                        Disable: false,\r\n                        TermsDescription: item.termsDescription\r\n                    });\r\n                });\r\n            }\r\n\r\n            let chargingList: vehicleModel.IVehicleOptions[] = [];\r\n            if (!isNil(response.data.charging) && response.data.charging.length > 0) {\r\n                response.data.charging.map((item: any) => {\r\n                    chargingList.push({\r\n                        YanaOptionID: item.yanaOptionID,\r\n                        OptionType: item.optionType,\r\n                        OptionName: item.optionName,\r\n                        OptionPrice: item.optionPrice,\r\n                        OptionPicture: item.optionPicture,\r\n                        OptionPictureMobile: item.optionPictureMobile,\r\n                        OptionDesc: item.optionDesc,\r\n                        ChargeType: item.chargeType,\r\n                        Disable: false,\r\n                        TermsDescription: item.termsDescription\r\n                    });\r\n                });\r\n            }\r\n\r\n            //dispatch to store\r\n            dispatch(vehicleStore.updateOptionsAction(accessories, chargingList));\r\n            dispatch(selectedConfigStore.updateAllOptionsAction([]));\r\n        }\r\n        //else {\r\n        //    dispatch(vehicleStore.setLoadingAction(true));\r\n        //}\r\n    }\r\n\r\n    const interiorTemplate = (item: vehicleModel.IInterior, index: number) => {\r\n        return (\r\n            <div key={\"interior_\" + index}\r\n                data-dtm=\"interior\"\r\n                className={classNames({\r\n                    \"stat-image-link\": true,\r\n                    \"color-options-item\": true,\r\n                    \"active\": selectedInterior?.InteriorID == item.InteriorID\r\n                })}\r\n                onClick={() => {\r\n                    setSelectedInterior(item);\r\n\r\n                    dispatch(vehicleStore.updateSelectedInteriorAction(item || null));\r\n\r\n                    //update Est. delivery\r\n                    //dispatch(selectedDeliveryStore.updateEstDeliveryDateAction(item.Available));\r\n\r\n                    //update selected interior and stock\r\n                    dispatch(selectedConfigStore.updateInteriorAction(\r\n                        item?.InteriorID || \"\",\r\n                        item?.InteriorColorName || \"\",\r\n                        item?.InteriorPrice || 0,\r\n                        item.HasStock || false));\r\n\r\n                    //clear selected accessories & charging when color changed\r\n                    dispatch(selectedConfigStore.updateAllOptionsAction([]));\r\n                }}\r\n            >\r\n                <div className='color-options-round'>\r\n                    <img className=\"image\" src={item?.InteriorFilterImage || undefined} alt={item.InteriorColorName || \"\"} />\r\n                </div>\r\n            </div>\r\n        );\r\n\r\n    }\r\n\r\n    return (\r\n        <div className='interior-container'>\r\n            <h3 className='main-page-section-title'>INTERIOR</h3>\r\n\r\n            <div className='title-panel'>\r\n                <p style={{ opacity: isPaidVisible ? 1 : 0, transition: 'opacity .26s ease-in-out' }}>{isPaidVisible && selectedInterior?.InteriorColorName || ''}</p>\r\n                <span className='extra-paid' style={{ opacity: isPaidVisible ? 1 : 0, transition: 'opacity .26s ease-in-out' }}>\r\n                    {isPaidVisible && currencyFormat(selectedInterior?.InteriorPrice || 0)}\r\n                </span>\r\n            </div>\r\n\r\n            <div className='interior-options-panel'>\r\n                {!isNil(interiorListFromStore) && interiorListFromStore != null &&\r\n                    interiorListFromStore.length > 0 && (interiorListFromStore as vehicleModel.IInterior[]).map((item: vehicleModel.IInterior, index: number) => {\r\n                        if (!isNil(defaultConfigFromStore.InteriorName) && defaultConfigFromStore.InteriorName != \"\"\r\n                            && (isNil(defaultConfigFromStore.LinkKey) || defaultConfigFromStore.LinkKey == \"\")) {\r\n                            //if from inventory page\r\n                            if (item.InteriorColorName == defaultConfigFromStore.InteriorName) {\r\n                                return interiorTemplate(item, index);\r\n                            }\r\n                            else {\r\n                                return (<></>);\r\n                            }\r\n                        }\r\n                        else {\r\n                            return interiorTemplate(item, index);\r\n                        }\r\n                    })}\r\n            </div>\r\n\r\n            <div className='desc-content'><span>{selectedInterior?.InteriorColorDescTitle}</span> {selectedInterior?.InteriorColorDesc}</div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Interior","import React, { useEffect, useState } from 'react'\r\nimport { Card } from 'primereact/card';\r\nimport {Button} from 'primereact/button'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { currencyFormat } from 'helpers/Uri';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport { RadioButton } from 'primereact/radiobutton';\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\n\r\nconst Accessories = () => {\r\n    const dispatch = useDispatch();\r\n\r\n    const accessories: vehicleModel.IVehicleOptions[] = useSelector((state: IAppState) => {\r\n        return state.vehicle.Accessories;\r\n    });\r\n\r\n    const selectedOptionsFromStore: vehicleModel.IVehicleOptions[] | null = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle.Options;\r\n    });\r\n\r\n    const handleSelect = (item: vehicleModel.IVehicleOptions) => {\r\n        dispatch(selectedConfigStore.updateOptionAction(item));\r\n    };\r\n\r\n    const isSelectedOption = (item: vehicleModel.IVehicleOptions): boolean => {\r\n        if (isNil(selectedOptionsFromStore) || selectedOptionsFromStore.length == 0) return false;\r\n        let findSelectedOption = selectedOptionsFromStore.find((selectedItems: vehicleModel.IVehicleOptions) => {\r\n            //SP does not store yana option id, so when users come from interest link, there is only has option name\r\n            return selectedItems?.YanaOptionID == item.YanaOptionID || selectedItems?.OptionName == item.OptionName; \r\n        });\r\n        return !isNil(findSelectedOption);\r\n    }\r\n\r\n    setTimeout(() => {\r\n        let accessoriesCheckbox = document.getElementsByName(\"accessories\");\r\n        for (let i = 0; i < accessoriesCheckbox.length; i++) {\r\n            accessoriesCheckbox[i].setAttribute('data-dtm', 'accessories');\r\n            accessoriesCheckbox[i].classList.add('stat-checkbox');\r\n        }\r\n    }, 200);\r\n\r\n\r\n    return (\r\n        <div className='additional-container'>\r\n            <h3 className='main-page-section-title'>ACCESSORIES</h3>\r\n            <p className='additional-desc'>Customise your LYRIQ by adding the extras you need.</p>\r\n\r\n            {\r\n                !isNil(accessories) && accessories.length > 0 && accessories.map((item: vehicleModel.IVehicleOptions, index: any) => {\r\n                    const header = <img alt=\"Card\" src={item.OptionPicture.length>0 ? item.OptionPicture[0] : \"\"} />;\r\n                    return (\r\n                        <Card id={item + index} key={item + index}\r\n                            style={{\r\n                                padding: '.3rem',\r\n                                border: isSelectedOption(item) ? '2px solid #282828' : '1px solid #d2d2d2'\r\n                            }}    \r\n                        >\r\n                            <div className='card-inner'>\r\n                                <label className='card-header-img' htmlFor={`accessories + ${item + index}`}>\r\n                                    <img alt=\"Card\" src={item.OptionPicture.length>0 ? item.OptionPicture[0] : \"\"} />\r\n                                </label>\r\n                                <div className='checkbox-panel'>\r\n                                    <Checkbox\r\n                                        name=\"accessories\"\r\n                                        inputId={`accessories + ${item + index}`}\r\n                                        onChange={() => {\r\n                                            handleSelect(item);\r\n                                        }}\r\n                                        checked={isSelectedOption(item)}\r\n                                    ></Checkbox>\r\n                                    <label className='card-text-panel' htmlFor={`accessories + ${item + index}`}>\r\n                                        <p>{item.OptionName}</p>\r\n                                        <div className='card-info-selection'>\r\n                                            <span>{currencyFormat(item.OptionPrice || 0)}</span>\r\n                                        </div>\r\n                                    </label>\r\n                                </div>\r\n                                \r\n                            </div>\r\n                        </Card>\r\n                    )\r\n                })\r\n            }\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Accessories","import { getBackendPath } from 'helpers/Uri';\r\nimport * as interestModel from 'model/IInterest';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const saveInterest = async (\r\n    interest: interestModel.IInterest,\r\n    ifCallYanaAPI: boolean,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            interest: interest,\r\n            ifCallYanaAPI: ifCallYanaAPI\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/interest/save-interest`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getInterest = async (\r\n    linkKey: string\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({ linkKey: linkKey}),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/interest/get-interest`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    return json;\r\n};\r\n\r\n\r\nexport const getWaitlist = async (\r\n    webkey: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            linkKey: webkey,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/interest/get-waitlist-data`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import React from 'react'\r\n\r\nconst PrivacyPolicyLink = ({props}: any) => {\r\n    return (\r\n        <span\r\n            className=\"stat-text-link\"\r\n            data-dtm=\"privacy statement\"\r\n            onClick={()=> window.open(\"https://www.cadillacanz.com/au-en/privacy\", \"_blank\")}\r\n            style={{color: '#3A3A3A', textDecoration: 'underline', cursor: 'pointer'}}\r\n        >\r\n            {props}\r\n        </span>\r\n    )\r\n}\r\n\r\nexport default PrivacyPolicyLink","import { InputText } from 'primereact/inputtext'\r\nimport React, { useState, useEffect } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Button, OverlayTrigger, Tooltip } from 'react-bootstrap';\r\nimport { classNames } from 'primereact/utils';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { getCMSAssets, getFrontendUrl } from 'helpers/Uri';\r\nimport { isNil } from 'lodash';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as rdUri from 'helpers/Uri';\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as interestModel from 'model/IInterest';\r\nimport * as interestService from 'services/Interest';\r\nimport PrivacyPolicyLink from 'components/PrivacyPolicyLink';\r\nimport { useSatellite } from 'helpers/useSatellite';\r\n\r\nconst ShareDialog = () => {\r\n    const satellite = useSatellite();\r\n\r\n    const [shareDialog, setShareDialog] = useState(false);\r\n    const [tooltip, setTooltip] = useState({\r\n        copyTooltip: false,\r\n        emailTooltip: false\r\n    });\r\n\r\n    const [isCopyLink, setIsCopyLink] = useState(false);\r\n    const [isEmailSend, setIsEmailSend] = useState(false);\r\n    \r\n\r\n    const [pageState, setPageState] = useState({\r\n        email: \"\",\r\n        invalidEmail: false,\r\n    });\r\n\r\n    const [shareFailedMessage, setShareFailedMessage] = useState(\"\");\r\n    const [sharingStatus, setSharingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n    //const [savStatus, setSharingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n    const [webUniqueKey, setWebUniqueKey] = useState(\"\");\r\n\r\n    //store variables\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectVehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.selectedVehicle;\r\n    });\r\n    const vehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.vehicle;\r\n    });\r\n    const selectedPaymentOptions = useSelector((appState: IAppState) => {\r\n        return appState.paymentOptions;\r\n    });\r\n    const customerTypeForStore = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n\r\n\r\n    const openShareDialog = async () => {\r\n        if (isNil(webUniqueKey) || webUniqueKey == \"\") {\r\n\r\n            let newKey: string = uuidv4();\r\n            setWebUniqueKey(newKey);\r\n            await doShareInterest(true, newKey);\r\n        }\r\n        else {\r\n            await doShareInterest(true, webUniqueKey);\r\n        }\r\n        setShareDialog(true);\r\n\r\n    }\r\n\r\n    const onShareHide = () => {\r\n        setShareDialog(false);\r\n    }\r\n\r\n    const handleCopy = async () => {\r\n\r\n        let url = rdUri.getShareLink(webUniqueKey);\r\n        navigator.clipboard.writeText(url);\r\n\r\n        setIsCopyLink(true);\r\n        setTimeout(() => {\r\n            setIsCopyLink(false);\r\n        }, 3000)\r\n\r\n        // showCopySuccess();\r\n    }\r\n\r\n    const handleSendEmail = async () => {\r\n        let invalidEmail = false;\r\n        const emailValidator = !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(pageState?.email);\r\n        if (isNil(pageState.email) || pageState.email == \"\" || emailValidator) {\r\n            invalidEmail = true;\r\n        }\r\n\r\n        setPageState({\r\n            ...pageState,\r\n            invalidEmail: invalidEmail,\r\n        })\r\n\r\n        if (invalidEmail) {\r\n            return\r\n        }\r\n\r\n        setIsEmailSend(true);\r\n        setTimeout(() => {\r\n            setIsEmailSend(false);\r\n        }, 5000)\r\n\r\n        await doShareInterest(false, webUniqueKey);\r\n    }\r\n\r\n    const getDeliveryLocationState = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationState;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryState || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationPostcode = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationPostcode;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryPostcode || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationSuburb = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationSuburb;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliverySuburb || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationFullAddress = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationAddress || \"\";\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryFullAddress || \"\";\r\n        }\r\n    }\r\n\r\n    //todo: api and sp need add primary address(RegistrationAddress)\r\n\r\n    ///1. isShareOnly: true ===> calling when dialog is open.\r\n    ///   In this case, we only save configuartion to DB in order to make share link working\r\n    ///   We don't call yana API as we don't want to send link to customer\r\n    ///2. isShareOnly: false ===> calling when click share button\r\n    const doShareInterest = async (isShareOnly: boolean, newWebUniqueKey: string) => {\r\n        let interestData: interestModel.IInterest = {\r\n            Country: selectedDeliveryFromStore?.Country?.code || \"\",\r\n            State: selectedDeliveryFromStore?.State?.code || \"\",\r\n            VariantName: selectVehFromStore.VariantName || \"\",\r\n            VariantBasePrice: selectVehFromStore.VariantBasePrice || 0,\r\n            ExteriorName: selectVehFromStore.Exterior || \"\",\r\n            ExteriorPrice: selectVehFromStore.ExteriorPrice || 0,\r\n            InteriorName: selectVehFromStore.Interior || \"\",\r\n            InteriorPrice: selectVehFromStore.InteriorPrice || 0,\r\n            PaymentOption: selectedPaymentOptions?.PaymentOption || rdEnum.enumPaymentOptions.Cash,\r\n            Email: pageState.email,\r\n            FirstName: null,\r\n            LastName: null,\r\n            Mobile: null,\r\n            ABN: null,\r\n            BusinessName: null,\r\n            CustomerType: customerTypeForStore || rdEnum.enumClientTypes.Private.Code,\r\n            DeliveryAddress: getDeliveryLocationFullAddress() || \"\",\r\n            DeliveryLocationState: getDeliveryLocationState() || \"\",\r\n            DeliveryLocationSuburb: getDeliveryLocationSuburb() || \"\",\r\n            DeliveryLocationPostcode: getDeliveryLocationPostcode() || \"\",\r\n            DeliveryOption: selectedDeliveryFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup,\r\n            EstDeliveryDate: vehFromStore?.SelectedInterior?.Available || \"\",\r\n            PrivacyStatement: true,\r\n            Marketing: null,\r\n            InterestType: rdEnum.enumInterestType.Share,\r\n            Comments: null,\r\n            WebUniqueKey: newWebUniqueKey,\r\n            Options: selectVehFromStore.Options || [],\r\n            VehicleThumbnail: \"\"\r\n        };\r\n\r\n        if (!isShareOnly) {\r\n            setShareFailedMessage(\"\");\r\n            setSharingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        }\r\n\r\n        let response = await interestService.saveInterest(interestData, !isShareOnly);\r\n        setSharingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (!isShareOnly) {\r\n            if (response.status) {\r\n                showEmailSuccess()\r\n            }\r\n            else {\r\n                setShareFailedMessage(response.message);\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n\r\n    const showCopySuccess = () => {\r\n        // toast?.current.show({severity:'success', summary: 'Message Successfully Copied', life: 3000});\r\n        setTooltip({\r\n            ...tooltip,\r\n            copyTooltip: true\r\n        });\r\n        // Hide the tooltip after a certain duration (e.g., 2 seconds)\r\n        setTimeout(() => {\r\n            setTooltip({\r\n                ...tooltip,\r\n                copyTooltip: false\r\n            });\r\n        }, 2000);\r\n    }\r\n\r\n    const showEmailSuccess = () => {\r\n        setTooltip({\r\n            ...tooltip,\r\n            emailTooltip: true\r\n        });\r\n        // Hide the tooltip after a certain duration (e.g., 2 seconds)\r\n        setTimeout(() => {\r\n            setTooltip({\r\n                ...tooltip,\r\n                emailTooltip: false\r\n            });\r\n        }, 2000);\r\n    }\r\n\r\n    const tooltipCopy = <Tooltip id=\"tooltip\">Link copied to clipboard</Tooltip>;\r\n\r\n    const tooltipEmail = <Tooltip id=\"tooltip\">Email send successfully</Tooltip>;\r\n\r\n    useEffect(() => {\r\n        if (shareDialog) {\r\n            satellite.trackEvent(\"config-end\");\r\n        }\r\n    }, [shareDialog]);\r\n\r\n    return (\r\n        <>\r\n            <div className='share-box stat-text-link' onClick={() => openShareDialog()} data-dtm=\"checkout\">\r\n                <img className=\"image\" src={`${getCMSAssets()}/checkout/share.svg`} />\r\n                <span>Share your LYRIQ configuration</span>\r\n            </div>\r\n            <Dialog className='share-dialog' visible={shareDialog} position='bottom' onHide={() => onShareHide()} appendTo={document.body} draggable={false} resizable={true}>\r\n                <div className='share-panel'>\r\n                    <div className='title-container'>\r\n                        <h1>YOUR CONFIGURATION</h1>\r\n                        <span>Copy the  link below or send your configuration to an email address of your choice.</span>\r\n                    </div>\r\n\r\n                    <div className='share-content-container'>\r\n                        <div className='inner-content-container'>\r\n                            {/* <div className='input-item'>\r\n                                <div className='share-content-subtitle'>\r\n                                    Your Configuration Link:\r\n                                </div>\r\n                                <div className='share-content'>\r\n                                    {rdUri.getShareLink(webUniqueKey)}\r\n                                </div>\r\n                            </div> */}\r\n\r\n                            <div className='input-item'>\r\n                                <span className=\"wrapper-box\">\r\n                                    <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                        placeholder=\" \"\r\n                                        value={rdUri.getShareLink(webUniqueKey)}\r\n                                    />\r\n                                    <label>Your Configuration Link:</label>\r\n                                </span>\r\n                            </div>\r\n                           \r\n\r\n                            <div className='right-btn-panel'>\r\n                                {/* <OverlayTrigger\r\n                                    placement=\"top\"\r\n                                    overlay={tooltipCopy}\r\n                                    show={tooltip.copyTooltip}\r\n                                    trigger={['click']}\r\n                                >\r\n                                    <Button onClick={() => handleCopy()}>\r\n                                        <img alt=\"\" src={`${getCMSAssets()}/supports/copy.svg`} />\r\n                                        <span>COPY LINK</span>\r\n                                    </Button>\r\n                                </OverlayTrigger> */}\r\n                                <Button\r\n                                    className=\"stat-button-link\"\r\n                                    data-dtm=\"modal:review\"\r\n                                    onClick={() => handleCopy()}>\r\n                                    <img alt=\"\" src={`${getCMSAssets()}/supports/copy.svg`} />\r\n                                    <span>COPY LINK</span>\r\n                                </Button>\r\n\r\n                                { isCopyLink && (\r\n                                    <small id=\"email-success\" className=\"success-info\">Link copied successfully</small>\r\n                                )}\r\n                            </div>\r\n                        </div>\r\n                        \r\n                        <div className='or-panel'>or</div>\r\n                    </div>\r\n\r\n                    <div className='share-content-container'>\r\n                        <div className='inner-content-container'>\r\n                            <div className='input-item'>\r\n                                <span className=\"wrapper-box\">\r\n                                    <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                        className={classNames({ \"p-invalid\": pageState?.invalidEmail })}\r\n                                        placeholder=\" \"\r\n                                        value={pageState.email}\r\n                                        onChange={(e) => {\r\n                                            setPageState({\r\n                                                ...pageState,\r\n                                                email: e.target.value,\r\n                                                invalidEmail: isNil(e.target.value) || e.target.value == \"\"\r\n                                            })\r\n                                        }}\r\n                                    />\r\n                                    <label>Email</label>\r\n                                </span>\r\n                              \r\n                                {pageState?.invalidEmail && (\r\n                                    <small id=\"email-help\" className=\"p-error block\">Invalid email format. Please enter a valid email address.</small>\r\n                                )}\r\n                               \r\n                            </div>\r\n\r\n                            <div className='right-btn-panel'>\r\n                                {sharingStatus == rdEnum.enumProcessingStatus.Processing && (\r\n                                    <Button disabled={true}>\r\n                                        <ProgressSpinner\r\n                                            style={{ width: '16px', height: '16px' }}\r\n                                            strokeWidth=\"5\"\r\n                                            animationDuration=\".8s\"\r\n                                        />\r\n                                    </Button>\r\n                                )}\r\n\r\n                                {sharingStatus != rdEnum.enumProcessingStatus.Processing && (\r\n                                    <Button onClick={() => handleSendEmail()}\r\n                                        className=\"stat-button-link\"\r\n                                        data-dtm=\"modal:review\"\r\n                                    >\r\n                                        <img alt=\"\" src={`${getCMSAssets()}/supports/email.svg`} />\r\n                                        <span>SEND VIA EMAIL</span>\r\n                                    </Button>\r\n                                )}\r\n\r\n                                {/* {sharingStatus !== rdEnum.enumProcessingStatus.Processing && (\r\n                                    <OverlayTrigger\r\n                                        placement=\"top\"\r\n                                        overlay={tooltipEmail}\r\n                                        show={tooltip.emailTooltip}\r\n                                        trigger={['click']}\r\n                                    >\r\n                                        <Button onClick={() => handleSendEmail()}>\r\n                                            <img alt=\"\" src={`${getCMSAssets()}/supports/email.svg`} />\r\n                                            <span>SEND VIA EMAIL</span>\r\n                                        </Button>\r\n                                    </OverlayTrigger>\r\n                                )} */}\r\n\r\n                                {sharingStatus !== rdEnum.enumProcessingStatus.Processing && isEmailSend && (\r\n                                    <small id=\"email-success\" className=\"success-info\">Email sent successfully</small>\r\n                                )}\r\n                            </div>\r\n\r\n                           \r\n                        </div>\r\n                               \r\n                    </div>\r\n\r\n                    {!isNil(shareFailedMessage) && shareFailedMessage != \"\" && (\r\n                        <div className=\"text-error\" dangerouslySetInnerHTML={{ __html: shareFailedMessage }}></div>\r\n                    )}\r\n\r\n                    <div>Cadillac is collecting this email address for the purpose of sending your configuration. This email will be stored temporarily to enable this function in accordance with our \r\n                        &nbsp;<PrivacyPolicyLink props='Privacy Policy' />\r\n                    </div>\r\n                </div>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ShareDialog","import React from 'react'\r\n\r\nconst IsNumberVerification = (evt: any) => {\r\n    \r\n    let charCode = (evt.which) ? evt.which : evt.keyCode\r\n    if ((charCode < 48 || charCode > 57) && charCode != 8) {\r\n        evt.preventDefault();\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\n\r\nexport default IsNumberVerification","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { useState } from 'react'\r\n\r\nconst PrivacyCollectionDialog = ({props}: any) => {\r\n\r\n    const [isShowDialog, setIsShowDialog] = useState(false);\r\n\r\n    const onDialogOpen = () => {\r\n        setIsShowDialog(true);\r\n    }\r\n\r\n    const onDialogHide = () => {\r\n        setIsShowDialog(false);\r\n    }\r\n\r\n    const toPrivacy = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/privacy')\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {\r\n                props == 'checkout-payment'\r\n                ?\r\n                    <div className='checkbox-privacy-btn stat-text-link' onClick={() => onDialogOpen()} data-dtm=\"checkout\">\r\n                    <span>Cadillac's Privacy Collection Statement</span>\r\n                    <img alt='' src={`${getCMSAssets()}/checkout/right-black-arrow.svg`} />\r\n                </div>\r\n                :\r\n                    <span className='test-drive-privacy stat-text-link' onClick={() => onDialogOpen()}\r\n                        data-dtm=\"privacy statement\">Privacy Collection Statement</span>\r\n            }\r\n           \r\n\r\n             <Dialog className='checkout-privacy-dialog' visible={isShowDialog} position='bottom' onHide={() => onDialogHide()} draggable={false} resizable={true}>\r\n                <div className='checkout-privacy-container'>\r\n                    <div className='checkout-privacy-title'>\r\n                        <h1>PRIVACY COLLECTION STATEMENT</h1>\r\n                    </div>\r\n                  \r\n                    <div className='checkout-privacy-content'>\r\n                        <p>\r\n                            Cadillac is collecting your personal information for the primary purpose of sending you information in relating to the order of a Cadillac product.\r\n                        </p>\r\n                        <p>\r\n                            If you choose not to provide your personal information to us, we may not be able to provide products to you or answer your enquiries.\r\n                        </p>\r\n                        <p>\r\n                            In some cases, we may disclose your personal information to our related companies, contractors, agents or third party service providers in countries outside of Australia, including United States, the European Economic Area (EEA), and other locations where we or our service providers maintain servers.\r\n                        </p>\r\n                        <p>\r\n                            For further details about our data privacy practices, including your rights to access or correct your information, and the procedures for privacy complaints, please refer to our privacy policy at <a onClick={() => toPrivacy()}>https://www.cadillacanz.com/au-en/privacy</a>.\r\n                        </p>\r\n                        <p>\r\n                            Cadillac’s privacy policy explains how your personal information will be used and disclosed, how you can access or correct your personal information, how you can complain about a privacy breach and how Cadillac will deal with that complaint, and how you can opt out of receiving marketing materials from Cadillac.\r\n                        </p>\r\n                        <p>\r\n                            You can also contact the Cadillac Australia Team at 1800 CADILLAC (223455) / au.care@cadillac.com or New Zealand Team at 0800 CADILLAC (223455) / nz.care@cadillac.com.\r\n                        </p>\r\n                    </div>\r\n                </div>\r\n            </Dialog>\r\n\r\n        </>\r\n    )\r\n}\r\n\r\nexport default PrivacyCollectionDialog","import React, { forwardRef, useState, useImperativeHandle, useEffect, useRef } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport { getCMSAssets, getFrontendUrl } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { InputTextarea } from 'primereact/inputtextarea';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport IsNumberVerification from 'components/IsNumberVerification';\r\nimport { Button } from 'react-bootstrap';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as saveDialogViewModel from 'model/ISaveDialogViewModel';\r\nimport * as interestModel from 'model/IInterest';\r\nimport * as interestService from 'services/Interest';\r\nimport PrivacyPolicyLink from 'components/PrivacyPolicyLink';\r\nimport PrivacyCollectionDialog from './PrivacyCollectionDialog';\r\n\r\n\r\n\r\nconst SaveDialog = ({ props }: any) => {\r\n    const [saveDialog, setSaveDialog] = useState(false);\r\n\r\n    const initPageState: saveDialogViewModel.SaveDetailsState = {\r\n        firstname: \"\",\r\n        lastname: \"\",\r\n        email: \"\",\r\n        confirmEmail: \"\",\r\n        mobile: \"\",\r\n        comments: \"\",\r\n        checkMarketingComms: false,\r\n        checkPrivacy: false,\r\n        invalidFirstname: false,\r\n        invalidLastname: false,\r\n        invalidEmail: false,\r\n        invalidConfirmEmail: false,\r\n        invalidMobile: false,\r\n        emailMismatch: false,\r\n        invalidCheckMarketingComms: false,\r\n        invalidCheckPrivacy: false,\r\n    }\r\n    const [pageState, setPageState] = useState<saveDialogViewModel.SaveDetailsState>(initPageState);\r\n\r\n    const [saveFailedMessage, setSaveFailedMessage] = useState(\"\");\r\n    const [savingStatus, setSavingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n\r\n    const [isOverflown, setIsOverflown] = useState(false);\r\n    const textAreaRef = useRef<any>(null);\r\n\r\n    const checkOverflow = () => {\r\n        const textarea = textAreaRef.current;\r\n\r\n        if (textarea) {\r\n            const rowHeight = parseInt(window.getComputedStyle(textarea).lineHeight, 12);\r\n\r\n            const maxVisibleHeight = rowHeight * 8;\r\n\r\n            if (textarea?.scrollHeight > maxVisibleHeight) {\r\n                setIsOverflown(true);\r\n            } else {\r\n                setIsOverflown(false);\r\n            }\r\n        }\r\n    };\r\n\r\n    useEffect(() => {\r\n        checkOverflow(); // Check on component mount\r\n    }, []);\r\n\r\n    //store variables\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n    //const selectVehFromStore = useSelector((appState: IAppState) => {\r\n    //    return appState.selectedVehicle;\r\n    //});\r\n    const selectedPaymentOptions = useSelector((appState: IAppState) => {\r\n        return appState.paymentOptions;\r\n    });\r\n    const customerTypeForStore = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n    const linkSourceFromStore = useSelector((state: IAppState) => {\r\n        return state?.linkSource;\r\n    });\r\n\r\n    useEffect(() => {\r\n        setSavingStatus(rdEnum.enumProcessingStatus.Init);\r\n        return () => {\r\n            setSavingStatus(0);\r\n        };\r\n    }, []);\r\n\r\n\r\n    const openSaveDialog = () => {\r\n        setSaveDialog(true);\r\n    }\r\n\r\n    const onSaveHide = () => {\r\n        setSaveDialog(false);\r\n        setPageState(initPageState);\r\n    }\r\n\r\n    const validation = (): boolean => {\r\n        let invalid = false;\r\n\r\n        let invalidFirstname = false;\r\n        let invalidLastname = false;\r\n        let invalidEmail = false;\r\n        let invalidConfirmEmail = false;\r\n        let emailMismatch = false;\r\n        let invalidMobile = false;\r\n        let invalidMarketingComms = false;\r\n        let invalidCheckPrivacy = false;\r\n\r\n        const emailValidator = !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(pageState?.email);\r\n\r\n        if (isNil(pageState.firstname) || pageState.firstname == \"\") {\r\n            invalid = true;\r\n            invalidFirstname = true;\r\n        }\r\n        if (isNil(pageState.lastname) || pageState.lastname == \"\") {\r\n            invalid = true;\r\n            invalidLastname = true;\r\n        }\r\n        if (isNil(pageState.email) || pageState.email == \"\" || emailValidator) {\r\n            invalid = true;\r\n            invalidEmail = true;\r\n        }\r\n\r\n        //if (isNil(pageState.confirmEmail) || pageState.confirmEmail == \"\" || emailValidator) {\r\n        //    invalid = true;\r\n        //    invalidConfirmEmail = true;\r\n        //}\r\n        //if (pageState.email != pageState.confirmEmail) {\r\n        //    invalid = true;\r\n        //    emailMismatch = true;\r\n        //}\r\n        if (isNil(pageState.mobile) || pageState.mobile == \"\" || pageState.mobile.length < 9 || pageState.mobile.length > 13) {\r\n            invalid = true;\r\n            invalidMobile = true;\r\n        }\r\n        //if (!pageState.checkMarketingComms) {\r\n        //    invalid = true;\r\n        //    invalidMarketingComms = true;\r\n        //}\r\n        if (!pageState.checkPrivacy) {\r\n            invalid = true;\r\n            invalidCheckPrivacy = true;\r\n        }\r\n\r\n        let newPageState = {\r\n            ...pageState,\r\n            invalidFirstname: invalidFirstname,\r\n            invalidLastname: invalidLastname,\r\n            invalidEmail: invalidEmail,\r\n            invalidConfirmEmail: invalidConfirmEmail,\r\n            emailMismatch: emailMismatch,\r\n            invalidMobile: invalidMobile,\r\n            invalidCheckMarketingComms: invalidMarketingComms,\r\n            invalidCheckPrivacy: invalidCheckPrivacy\r\n        };\r\n        setPageState(newPageState);\r\n\r\n        return invalid;\r\n    }\r\n\r\n    const getDeliveryLocationState = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationState;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryState || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationPostcode = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationPostcode;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryPostcode || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationSuburb = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationSuburb;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliverySuburb || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationFullAddress = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationAddress || \"\";\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryFullAddress || \"\";\r\n        }\r\n    }\r\n\r\n    const handleSubmit = async () => {\r\n\r\n        let invalid = validation();\r\n        if (invalid) return;\r\n\r\n        //todo: api and sp need add primary address(RegistrationAddress)\r\n        let interestData: interestModel.IInterest = {\r\n            Country: selectedDeliveryFromStore?.Country?.code || \"\",\r\n            State: selectedDeliveryFromStore?.State?.code || \"\",\r\n            VariantName: selectedVehicleFromStore.VariantName || \"\",\r\n            VariantBasePrice: selectedVehicleFromStore.VariantBasePrice || 0,\r\n            ExteriorName: selectedVehicleFromStore.Exterior || \"\",\r\n            ExteriorPrice: selectedVehicleFromStore.ExteriorPrice || 0,\r\n            InteriorName: selectedVehicleFromStore.Interior || \"\",\r\n            InteriorPrice: selectedVehicleFromStore.InteriorPrice || 0,\r\n            PaymentOption: selectedPaymentOptions?.PaymentOption || rdEnum.enumPaymentOptions.Cash,\r\n            Email: pageState.email,\r\n            FirstName: pageState.firstname,\r\n            LastName: pageState.lastname,\r\n            Mobile: pageState.mobile,\r\n            ABN: null,\r\n            BusinessName: null,\r\n            CustomerType: customerTypeForStore || rdEnum.enumClientTypes.Private.Code,\r\n            DeliveryAddress: getDeliveryLocationFullAddress() || \"\",\r\n            DeliveryLocationState: getDeliveryLocationState() || \"\",\r\n            DeliveryLocationSuburb: getDeliveryLocationSuburb() || \"\",\r\n            DeliveryLocationPostcode: getDeliveryLocationPostcode() || \"\",\r\n            DeliveryOption: selectedDeliveryFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup,\r\n            EstDeliveryDate: vehicleFromStore?.SelectedInterior?.Available || \"\",\r\n            PrivacyStatement: true,\r\n            Marketing: pageState.checkMarketingComms,\r\n            InterestType: props == 'inventory' ? rdEnum.enumInterestType.WaitingList : rdEnum.enumInterestType.Save,\r\n            Comments: pageState.comments,\r\n            WebUniqueKey: null,\r\n            Options: selectedVehicleFromStore.Options || [],\r\n            VehicleThumbnail: \"\"\r\n        };\r\n\r\n        setSaveFailedMessage(\"\");\r\n        setSavingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await interestService.saveInterest(interestData, true);\r\n        if (response.status) {\r\n            setSavingStatus(rdEnum.enumProcessingStatus.Processed);\r\n\r\n            setTimeout(() => {\r\n                onSaveHide();\r\n                setSavingStatus(0)\r\n            }, 5000);\r\n        }\r\n        else {\r\n            setSaveFailedMessage(response.message);\r\n            setSavingStatus(rdEnum.enumProcessingStatus.Init);\r\n        }\r\n\r\n    }\r\n\r\n    const isNumberKey = (e: any) => {\r\n        IsNumberVerification(e);\r\n    }\r\n\r\n    const submitButtonTemplate = () => {\r\n        if (savingStatus == rdEnum.enumProcessingStatus.Processing) {\r\n            return (<Button type=\"button\" className='progress-btn' disabled={true}>\r\n                <ProgressSpinner\r\n                    style={{ width: '16px', height: '16px' }}\r\n                    strokeWidth=\"5\"\r\n                    animationDuration=\".8s\"\r\n                />\r\n            </Button>);\r\n        }\r\n        else if (savingStatus == rdEnum.enumProcessingStatus.Init) {\r\n            return (\r\n                <Button className=\"stat-button-link\"\r\n                    data-dtm={props == 'inventory' ? \"\" : \"submit\"}\r\n                    onClick={() => handleSubmit()} disabled={!pageState.checkPrivacy}\r\n                    style={{ border: 'none', backgroundColor: !pageState.checkPrivacy ? '#CCCCCC' : '#282828' }}\r\n                >\r\n                    <span style={{ color: !pageState.checkPrivacy ? '#707070' : '#fff' }}>SUBMIT</span>\r\n                </Button>\r\n            );\r\n        }\r\n        else if (savingStatus == rdEnum.enumProcessingStatus.Processed) {\r\n            return (\r\n                <div className='section-save-ack'>\r\n                    <img className=\"image\" src={`${getCMSAssets()}/checkout/success-tick.svg`} />\r\n                    {/* <span className=\"success-message\">Your design has been successfully shared to the email address provided</span> */}\r\n                    {/* {\r\n                         props != 'inventory' && selectedVehicleFromStore.HasStock || linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink\r\n                         ?\r\n                         <span className=\"success-message\">We’ve received your request for support. The Cadillac Sales team will reach out to you shortly.</span>\r\n                         :\r\n                         <span className=\"success-message\">You’ve successfully joined the waitlist. We’ll notify you as soon as it is available to order.</span>\r\n                    } */}\r\n\r\n                    {\r\n                        props == 'inventory'\r\n                            ?\r\n                            <span className=\"success-message\">You’ve successfully joined the waitlist. We’ll notify you as soon as it is available to order.</span>\r\n                            :\r\n                            <span className=\"success-message\">We’ve received your request for support. The Cadillac Sales team will reach out to you shortly.</span>\r\n                    }\r\n\r\n                </div>\r\n            );\r\n        }\r\n    }\r\n\r\n    setTimeout(() => {\r\n        let agreeCheckbox = document.getElementsByName(\"cb-ack-save\");\r\n        for (let i = 0; i < agreeCheckbox.length; i++) {\r\n            agreeCheckbox[i].setAttribute('data-dtm', 'privacy statement');\r\n            agreeCheckbox[i].classList.add('stat-checkbox');\r\n        }\r\n\r\n        let marketingCheckbox = document.getElementsByName(\"cb-ack-save-optional\");\r\n        for (let i = 0; i < agreeCheckbox.length; i++) {\r\n            marketingCheckbox[i].setAttribute('data-dtm', 'privacy statement');\r\n            marketingCheckbox[i].classList.add('stat-checkbox');\r\n        }\r\n\r\n    }, 200);\r\n\r\n    return (\r\n        <div className='save-dialog-btn'>\r\n            {\r\n                props == 'inventory'\r\n                    ?\r\n                    <div className='variant-btn-panel' style={{ borderRadius: '4px' }}>\r\n                        <Button className=\"variant-btn\" style={{ marginTop: '0rem' }}\r\n                            onClick={() => openSaveDialog()}\r\n                        >JOIN OUR WAITLIST HERE</Button>\r\n                    </div>\r\n                    :\r\n                    <div className='save-box stat-text-link'\r\n                        data-dtm=\"checkout\"\r\n                        onClick={() => openSaveDialog()}\r\n                    >\r\n                        <img className=\"image\" src={`${getCMSAssets()}/checkout/chat.svg`} />\r\n                        <span>Get help from sales team</span>\r\n                    </div>\r\n            }\r\n\r\n\r\n\r\n            <Dialog className='save-dialog' visible={saveDialog} position='right'\r\n                onHide={() => onSaveHide()} draggable={false} resizable={true}>\r\n                <div className='save-panel'>\r\n                    {\r\n                        props != 'inventory'\r\n                            // && selectedVehicleFromStore.HasStock || linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink\r\n                            ?\r\n                            <div className='title-container'>\r\n                                <h2>WE'RE HERE TO HELP</h2>\r\n                                <span>A member of our Cadillac sales team will respond to your enquiry as quickly as possible.</span>\r\n                            </div>\r\n                            :\r\n                            <div className='title-container'>\r\n                                <h2>JOIN OUR WAITLIST!</h2>\r\n                                <span>\r\n                                    {/* Our vehicle is currently out of stock and  you will be the first to know when it's back!\r\n                                    <br /><br />\r\n                                    Sign up for our waitlist to receive exclusive updates and promotional offers.\r\n                                    <br /><br />\r\n                                    Don’t miss out—secure your spot today! */}\r\n                                    Enter your details below and we will notify you when you are able to order your customised Lyriq.  A member of our team will also touch base to offer any support you me need.\r\n                                </span>\r\n                            </div>\r\n                    }\r\n                    {/* <div className='title-container'>\r\n                        <h2>WE'RE HERE TO HELP</h2> */}\r\n                    {/* <span>Cadillac sales team will assist with your saved configuration shortly.</span> */}\r\n                    {/* <span>A member of our Cadillac sales team will respond to your enquiry as quickly as possible.</span> */}\r\n                    {/* {\r\n                            props != 'inventory' && selectedVehicleFromStore.HasStock || linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink\r\n                            ?\r\n                            <span>A member of our Cadillac sales team will respond to your enquiry as quickly as possible.</span>\r\n                            :\r\n                            <span>This particular LYRIQ configuration is  currently sold out.  Please enter your details below and to be notified when it is available to order.</span>\r\n                        } */}\r\n\r\n                    {/* </div> */}\r\n                    <div className='input-container'>\r\n                        <div className='input-item'>\r\n                            <span className=\"wrapper-box\">\r\n                                <InputText id=\"firstname\" aria-describedby=\"firstname-help\"\r\n                                    className={classNames({ \"p-invalid\": pageState?.invalidFirstname })}\r\n                                    placeholder=\" \"\r\n                                    value={pageState.firstname}\r\n                                    onChange={(e) => {\r\n                                        setPageState({\r\n                                            ...pageState,\r\n                                            firstname: e.target.value,\r\n                                            invalidFirstname: isNil(e.target.value) || e.target.value == \"\"\r\n                                        })\r\n                                    }}\r\n                                />\r\n                                <label>First Name *</label>\r\n                            </span>\r\n                        </div>\r\n                        {pageState?.invalidFirstname && (\r\n                            <small id=\"fristname-help\" className=\"p-error block\">Require Valid First Name</small>\r\n                        )}\r\n                        <div className='input-item'>\r\n                            <span className=\"wrapper-box\">\r\n                                <InputText id=\"lastname\" aria-describedby=\"lastname-help\"\r\n                                    className={classNames({ \"p-invalid\": pageState?.invalidLastname })}\r\n                                    placeholder=\" \"\r\n                                    value={pageState.lastname}\r\n                                    onChange={(e) => {\r\n                                        setPageState({\r\n                                            ...pageState,\r\n                                            lastname: e.target.value,\r\n                                            invalidLastname: isNil(e.target.value) || e.target.value == \"\"\r\n                                        })\r\n                                    }}\r\n                                />\r\n                                <label>Last Name *</label>\r\n                            </span>\r\n                        </div>\r\n                        {pageState?.invalidLastname && (\r\n                            <small id=\"lastname-help\" className=\"p-error block\">Require Valid Last Name</small>\r\n                        )}\r\n                        <div className='input-item'>\r\n                            <span className=\"wrapper-box\">\r\n                                <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                    className={classNames({ \"p-invalid\": pageState?.invalidEmail })}\r\n                                    placeholder=\" \"\r\n                                    value={pageState.email}\r\n                                    onChange={(e) => {\r\n                                        setPageState({\r\n                                            ...pageState,\r\n                                            email: e.target.value,\r\n                                            invalidEmail: isNil(e.target.value) || e.target.value == \"\"\r\n                                        })\r\n                                    }}\r\n                                />\r\n                                <label>Email *</label>\r\n                            </span>\r\n                        </div>\r\n                        {pageState?.invalidEmail && (\r\n                            <small id=\"email-help\" className=\"p-error block\">Require Valid Email</small>\r\n                        )}\r\n                        {/*<div className='input-item'>*/}\r\n                        {/*    <span className=\"wrapper-box\">*/}\r\n                        {/*        <InputText id=\"email\" aria-describedby=\"email-help\"*/}\r\n                        {/*            className={classNames({ \"p-invalid\": pageState?.invalidConfirmEmail })}*/}\r\n                        {/*            placeholder=\" \"*/}\r\n                        {/*            value={pageState.confirmEmail}*/}\r\n                        {/*            onChange={(e) => {*/}\r\n                        {/*                setPageState({*/}\r\n                        {/*                    ...pageState,*/}\r\n                        {/*                    confirmEmail: e.target.value,*/}\r\n                        {/*                    invalidConfirmEmail: isNil(e.target.value) || e.target.value == \"\"*/}\r\n                        {/*                })*/}\r\n                        {/*            }}*/}\r\n                        {/*        />*/}\r\n                        {/*        <label>Confirm Email</label>*/}\r\n                        {/*    </span>*/}\r\n                        {/*    {pageState?.emailMismatch && (*/}\r\n                        {/*        <small id=\"email-help\" className=\"p-error block\">The email address and confirm email address fields do not match</small>*/}\r\n                        {/*    )}*/}\r\n                        {/*</div>*/}\r\n                        <div className='input-item'>\r\n                            <span className=\"wrapper-box\">\r\n                                <InputText id=\"mobile\" aria-describedby=\"mobile-help\"\r\n                                    className={classNames({ \"p-invalid\": pageState?.invalidMobile })}\r\n                                    onKeyPress={(e: any) => isNumberKey(e)}\r\n                                    placeholder=\" \"\r\n                                    value={pageState.mobile}\r\n                                    onChange={(e) => {\r\n                                        let mobile = e.target.value.slice(0, 11);\r\n                                        setPageState({\r\n                                            ...pageState,\r\n                                            mobile: mobile,\r\n                                            invalidMobile: isNil(mobile) || mobile == \"\" || mobile.length < 9 || mobile.length > 13\r\n                                        })\r\n                                    }}\r\n                                />\r\n                                <label>Mobile *</label>\r\n                            </span>\r\n                        </div>\r\n                        {pageState?.invalidMobile && (\r\n                            <small id=\"mobile-help\" className=\"p-error block\">Require Valid Mobile</small>\r\n                        )}\r\n\r\n                        {/* {\r\n                            props != 'inventory' && selectedVehicleFromStore.HasStock || linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink\r\n                                ?\r\n                                <div className='input-item textarea'>\r\n                                    <span className=\"wrapper-box\">\r\n                                        <InputTextarea id=\"comments\" aria-describedby=\"comments-help\"\r\n                                            placeholder=\" \"\r\n                                            rows={8}\r\n                                            value={pageState.comments}\r\n                                            onChange={(e: any) => {\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    comments: e.target.value,\r\n                                                })\r\n                                            }}\r\n                                        />\r\n                                        <label>Got a Question</label>\r\n                                    </span>\r\n                                </div>\r\n                                :\r\n                                <></>\r\n                        } */}\r\n\r\n                        {\r\n                            props != 'inventory'\r\n                                ?\r\n                                <div className={`input-item textarea ${isOverflown ? 'overflown' : ''}`}>\r\n                                    <span className=\"wrapper-box\">\r\n                                        <InputTextarea id=\"comments\" aria-describedby=\"comments-help\"\r\n                                            placeholder=\" \"\r\n                                            ref={textAreaRef}\r\n                                            rows={8}\r\n                                            value={pageState.comments}\r\n                                            onChange={(e: any) => {\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    comments: e.target.value,\r\n                                                });\r\n                                                checkOverflow();\r\n                                            }}\r\n                                        />\r\n                                        <label style={{ display: isOverflown ? \"none\" : '' }}>Got a Question</label>\r\n                                    </span>\r\n                                </div>\r\n                                :\r\n                                <></>\r\n                        }\r\n\r\n                    </div>\r\n\r\n                    <div className='checkbox-panel'>\r\n                        <div className=\"section-save-ack\">\r\n                            <Checkbox\r\n                                name=\"cb-ack-save\"\r\n                                inputId=\"cb-ack-save\"\r\n                                onChange={(e) =>\r\n                                    setPageState({\r\n                                        ...pageState,\r\n                                        checkPrivacy: e.checked,\r\n                                        invalidCheckPrivacy: !e.checked\r\n                                    })\r\n\r\n                                }\r\n                                checked={pageState?.checkPrivacy}\r\n                            ></Checkbox>\r\n                            <label htmlFor=\"cb-ack-save\" className=\"p-checkbox-label\">\r\n                                I agree to Cadillac's  {' '}\r\n                                <PrivacyPolicyLink props='Privacy Policy' />\r\n                                &nbsp;and&nbsp;\r\n                                {/* <a\r\n                                    onClick={()=> window.open(\"https://www.cadillacanz.com/au-en/privacy\", \"_blank\")}\r\n                                    target=\"_blank\"\r\n                                    rel=\"noreferrer noopener\"\r\n                                >\r\n                                    Privacy Collection Statement.\r\n                                </a> */}\r\n                                <PrivacyCollectionDialog />\r\n                            </label>\r\n                        </div>\r\n                        {/*{pageState?.invalidCheckMarketingComms && (*/}\r\n                        {/*    <small id=\"mobile-help\" className=\"p-error block\">Require the Agreement of Guideline</small>*/}\r\n                        {/*)}*/}\r\n                        <div className=\"section-save-ack\">\r\n                            <Checkbox\r\n                                name=\"cb-ack-save-optional\"\r\n                                inputId=\"cb-ack-save-optional\"\r\n                                onChange={(e) =>\r\n                                    setPageState({\r\n                                        ...pageState,\r\n                                        checkMarketingComms: e.checked,\r\n                                        invalidCheckMarketingComms: !e.checked\r\n                                    })\r\n                                }\r\n                                checked={pageState?.checkMarketingComms}\r\n                            ></Checkbox>\r\n                            <label htmlFor=\"cb-ack-save-optional\" className=\"p-checkbox-label\">\r\n                                I consent to receiving direct marketing materials from Cadillac.\r\n                            </label>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className='btn-panel'>\r\n                        {submitButtonTemplate()}\r\n                    </div>\r\n                    {!isNil(saveFailedMessage) && saveFailedMessage != \"\" && (\r\n                        <div className=\"text-error\" dangerouslySetInnerHTML={{ __html: saveFailedMessage }}></div>\r\n                    )}\r\n                </div>\r\n            </Dialog>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default SaveDialog","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { useState } from 'react'\r\nimport { IAppState } from \"model/IAppState\";\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as rdHelper from 'helpers/Uri';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { filter, includes, find, isNil } from 'lodash';\r\n\r\nconst DriveawayPriceDialog = (props: any) => {\r\n\r\n    const { source } = props\r\n\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const [driveAwayCost, setDriveAwayCost] = useState<any>(null);\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n        document.body.style.overflowY = 'hidden';\r\n        document.body.style.paddingRight = '15px';\r\n    }\r\n\r\n    const onHide = () => {\r\n        setIsOpen(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    };\r\n\r\n    const selectVehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.selectedVehicle;\r\n    });\r\n    const selectedLocationFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const driveawayCostFromStore = useSelector((state: IAppState) => {\r\n        return state.paymentOptions.DriveAwayCost;\r\n    });\r\n    const taxFromStore = useSelector((state: IAppState) => {\r\n        return state.paymentOptions.Finance;\r\n    });\r\n\r\n    const optionsTemplate = (options: vehicleModel.IVehicleOptions[] | null | undefined, optionType: string) => {\r\n        let optionItemsTemplate: any[] = [];\r\n        if (!isNil(options) && options != undefined && options.length > 0) {\r\n            let selectedOptions = options.filter(m => m.OptionType == optionType);\r\n            if (!isNil(selectedOptions) && selectedOptions.length > 0) {\r\n                selectedOptions.map((optionItem: vehicleModel.IVehicleOptions, index: any) => {\r\n                    optionItemsTemplate.push(\r\n                        <div className='details-desc' key={optionItem + \"_\" + index}>\r\n                            <p>{optionItem?.OptionName}</p>\r\n                            <span>{rdHelper.currencyFormatWithIncluded(optionItem?.OptionPrice)}</span>\r\n                        </div>\r\n                    );\r\n                })\r\n            }\r\n        }\r\n\r\n        let template: any[] = [];\r\n        if (optionItemsTemplate.length == 0) {\r\n            template.push(<></>);\r\n        }\r\n        else {\r\n            template.push(\r\n                <div className='driveaway-price-card'>\r\n                    <div className='details-subtitle'>{optionType == rdEnum.enumVehicleOptionType.Charge ? rdEnum.enumVehicleOptionTypeName.Charge : rdEnum.enumVehicleOptionTypeName.Accessories}</div>\r\n                    {optionItemsTemplate}\r\n                </div>\r\n            );\r\n        }\r\n        return template;\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {\r\n                source == 'order-review'\r\n                    ?\r\n                    <div className='driveaway-price-box stat-text-link'\r\n                        data-dtm=\"checkout:order review\"\r\n                        onClick={() => {\r\n                            handleDialogOpen();\r\n                        }}>\r\n                        <span>View Your LYRIQ Summary</span>\r\n                        <img alt='' src={`${getCMSAssets()}/main/arrow-black.svg`} />\r\n                    </div>\r\n                    :\r\n                    <div className='driveaway-price-box'\r\n                        onClick={() => {\r\n                            handleDialogOpen();\r\n                        }}>\r\n                        <h6 className='driveaway-price'>Driveaway Price<sup>1</sup></h6>\r\n                    </div>\r\n            }\r\n\r\n            <Dialog className='driveaway-price-dialog' position='bottom' visible={isOpen} draggable={false} resizable={true} onHide={() => onHide()}>\r\n                <div className='title-panel'>\r\n                    <h1>YOUR LYRIQ SUMMARY</h1>\r\n                    <h6>Your Drive Away Price is calculated based on your selected Registration Type in metropolitan areas in your selected State / Territory</h6>\r\n                </div>\r\n\r\n                <div className='driveaway-price-container'>\r\n                    <div className='driveaway-price-panel'>\r\n                        <div className='driveaway-price-card'>\r\n                            <span className='card-title'>Variant</span>\r\n                            <div className='driveaway-price-row-item'>\r\n                                <span>{driveawayCostFromStore?.VariantName}</span>\r\n                                <span className='price'>{rdHelper.currencyFormatWithIncluded(driveawayCostFromStore?.VariantPrice || 0)}</span>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='driveaway-price-card'>\r\n                            <span className='card-title'>Exterior</span>\r\n                            <div className='driveaway-price-row-item'>\r\n                                <span>{driveawayCostFromStore?.ExteriorName}</span>\r\n                                <span className='price'>{rdHelper.currencyFormatWithIncluded(driveawayCostFromStore?.ExteriorPrice || 0)}</span>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='driveaway-price-card'>\r\n                            <span className='card-title'>Interior</span>\r\n                            <div className='driveaway-price-row-item'>\r\n                                <span>{driveawayCostFromStore?.InteriorName}</span>\r\n                                <span className='price'>{rdHelper.currencyFormatWithIncluded(driveawayCostFromStore?.InteriorPrice || 0)}</span>\r\n                            </div>\r\n                        </div>\r\n                        {optionsTemplate(selectVehFromStore?.Options, rdEnum.enumVehicleOptionType.Accessories)}\r\n                        {optionsTemplate(selectVehFromStore?.Options, rdEnum.enumVehicleOptionType.Charge)}\r\n\r\n                        <div className='driveaway-price-card'>\r\n                            <div className='driveaway-price-row-item bold'>\r\n                                <span className='special-title'>Vehicle Subtotal</span>\r\n                                <span className='total-price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.SubTotal || 0)}</span>\r\n                            </div>\r\n                            <span className='card-title'>Includes {rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.GST || 0)}</span>\r\n                        </div>\r\n\r\n\r\n                        <div className='driveaway-price-card' >\r\n                            <span className='card-title'>Delivery option</span>\r\n                            <div className='driveaway-price-row-item'>\r\n                                <span>{selectedLocationFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup}</span>\r\n                                {selectedLocationFromStore?.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery && (\r\n                                    <span className='price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.HomeDelivery || 0)}</span>\r\n                                )}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className='driveaway-price-panel'>\r\n                        {selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia && (\r\n                            <React.Fragment>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Luxury Car Tax</span>\r\n                                    <span className='price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.LuxuryCarTax || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Local Stamp Duty</span>\r\n                                    <span className='price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.LocalStampDuty || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Local Registration Costs</span>\r\n                                    <span className='price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.LocalRegistrationCost || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Local CTP</span>\r\n                                    <span className='price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.LocalCTP || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Local Plate Fee</span>\r\n                                    <span className='price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.LocalPlateFee || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra bold'>\r\n                                    <span className='special-title'>On Road Fees Subtotal</span>\r\n                                    <span className='special-price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.OnRoadFee || 0)}</span>\r\n                                </div>\r\n                            </React.Fragment>\r\n                        )}\r\n\r\n                        {selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.NewZealand && (\r\n                            <React.Fragment>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Local Registration Costs</span>\r\n                                    <span>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.LocalRegistrationCost || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Local Plate Fee</span>\r\n                                    <span>{rdHelper.currencyFormatWithIncluded(driveawayCostFromStore?.LocalPlateFee || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Tyre Stewardship Fee</span>\r\n                                    <span>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.TyreStewardshipFee || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra'>\r\n                                    <span>Road User Charges</span>\r\n                                    <span>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.RoadUserChargers || 0)}</span>\r\n                                </div>\r\n                                <div className='driveaway-price-row-item extra bold'>\r\n                                    <span>On Road Fees Subtotal</span>\r\n                                    <span>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.OnRoadFee || 0)}</span>\r\n                                </div>\r\n                            </React.Fragment>\r\n                            )}\r\n                    </div>\r\n\r\n\r\n                    <div className='driveaway-price-panel'>\r\n                        <div className='driveaway-price-row-item extra bold'>\r\n                            <span className='special-title'>Driveaway Price<sup>1</sup></span>\r\n                            <span className='special-price'>{rdHelper.currencyFormatWithBlank(driveawayCostFromStore?.DriveawayPrice || 0)}</span>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className='disclaimer-container'>\r\n                        <p>\r\n                            <sup>1</sup>This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), luxury car tax (LCT), stamp duty, compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                        </p>\r\n                    </div>\r\n                   \r\n                </div>\r\n\r\n\r\n            </Dialog>\r\n        </>\r\n\r\n\r\n    )\r\n}\r\n\r\nexport default DriveawayPriceDialog","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport React, { useRef, useState } from 'react'\r\nimport { isNil } from 'lodash';\r\nimport { Button, Card } from 'react-bootstrap';\r\nimport ShareDialog from './ShareDialog';\r\nimport SaveDialog from './SaveDialog';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { hideGlobalPage } from 'stores/MainRightPage';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as checkoutViewModel from 'model/IChekcoutViewModel';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as rdUri from 'helpers/Uri';\r\nimport * as selectedDeliveryStore from 'stores/UserSelectedDelivery';\r\nimport { setScrollPosition } from 'stores/ScrollPosition';\r\nimport DriveawayPriceDialog from 'components/DriveawayPriceDialog';\r\nimport { useSatellite } from 'helpers/useSatellite';\r\n\r\nconst Checkout: React.FC<checkoutViewModel.IMenuClickToScrollProps> = ({ scrollToSection, checkoutFormPage }) => {\r\n\r\n    const dispatch = useDispatch();\r\n    const satellite = useSatellite();\r\n\r\n    //stores\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n    const customerTypeFromStore = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n    const paymentOptionsFromStore = useSelector((state: IAppState) => {\r\n        return state.paymentOptions;\r\n    });\r\n    const linkSourceFromStore = useSelector((state: IAppState) => {\r\n        return state?.linkSource;\r\n    });\r\n\r\n    const handleToCheckoutForm = () => {\r\n        checkoutFormPage();   //call main page toWaitlistPage()\r\n        // dispatch(setScrollPosition('checkoutForm'))\r\n\r\n        if (linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink || selectedVehicleFromStore.HasStock) {\r\n            satellite.trackEvent(\"config-end\");\r\n        }\r\n\r\n    }\r\n\r\n    const getDeliveryAddress = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery) {\r\n            return selectedDeliveryFromStore.SelectedDeliveryFullAddress;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore.SelectedPickupLocation?.LocationAddress;\r\n        }\r\n    }\r\n\r\n    const getDeliveryPrice = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery) {\r\n            let price = selectedDeliveryFromStore.DeliveryPrice;\r\n            if (!isNil(price)) {\r\n                return rdUri.currencyFormat(price);\r\n            }\r\n        }\r\n        return \"\"\r\n    }\r\n\r\n    const optionsTemplate = (optionType: string) => {\r\n        let optionItemsTemplate: any[] = [];\r\n        if (!isNil(selectedVehicleFromStore?.Options) && selectedVehicleFromStore?.Options.length > 0) {\r\n            let selectedOptions = selectedVehicleFromStore?.Options.filter(m => m.OptionType == optionType);\r\n            if (!isNil(selectedOptions) && selectedOptions.length > 0) {\r\n                selectedOptions?.map((addsOnItem: vehicleModel.IVehicleOptions, index: any) => {\r\n                    optionItemsTemplate.push(\r\n                        <div className='adds-on-item-panel' key={optionType + \"_\" + index} >\r\n                            <span>{addsOnItem?.OptionName}</span>\r\n                            <span>{rdUri.currencyFormat(addsOnItem?.OptionPrice)}</span>\r\n                        </div>\r\n                    );\r\n                })\r\n            }\r\n        }\r\n\r\n        let template: any[] = [];\r\n        if (optionItemsTemplate.length == 0) {\r\n            template.push(<React.Fragment key=\"empty\"></React.Fragment>);\r\n        }\r\n        else {\r\n            template.push(\r\n                <div className='inner-item' key={`inner-item-${optionType}`}>\r\n                    <span>{optionType == rdEnum.enumVehicleOptionType.Charge ? rdEnum.enumVehicleOptionTypeName.Charge : rdEnum.enumVehicleOptionTypeName.Accessories}</span>\r\n                    {optionItemsTemplate}\r\n                </div>\r\n            );\r\n        }\r\n        return template;\r\n    }\r\n\r\n    return (\r\n        <div className='checkout-container'>\r\n            <div className='review-order-container'>\r\n                <h3 className='main-page-section-title order-review'>ORDER REVIEW</h3>\r\n                <div className='drive-away-header-panel'>\r\n                    <p className='review-order-desc'>Your Drive Away Price is calculated based on your selected Registration Type in metropolitan areas in your selected State / Territory.</p>\r\n                    <DriveawayPriceDialog source='order-review' />\r\n                </div>\r\n                <div className='car-panel'>\r\n                    <h6>YOUR SELECTION</h6>\r\n                    <div className='inner-item'>\r\n                        <span>Variant</span>\r\n                        <div className=\"adds-on-item-panel\">\r\n                            <span>{selectedVehicleFromStore?.VariantName}</span>\r\n                            <span>{rdUri.currencyFormat(selectedVehicleFromStore?.VariantBasePrice)}</span>\r\n                        </div>\r\n                    </div>\r\n                    <div className='inner-item'>\r\n                        <span>Exterior</span>\r\n                        <div className=\"adds-on-item-panel\">\r\n                            <span>{selectedVehicleFromStore?.Exterior}</span>\r\n                            <span>{rdUri.currencyFormat(selectedVehicleFromStore?.ExteriorPrice)}</span>\r\n                        </div>\r\n                    </div>\r\n                    <div className='inner-item'>\r\n                        <span>Interior</span>\r\n                        <div className=\"adds-on-item-panel\">\r\n                            <span>{selectedVehicleFromStore?.Interior}</span>\r\n                            <span>{rdUri.currencyFormat(selectedVehicleFromStore?.InteriorPrice)}</span>\r\n                        </div>\r\n                    </div>\r\n                    {optionsTemplate(rdEnum.enumVehicleOptionType.Accessories)}\r\n                    {optionsTemplate(rdEnum.enumVehicleOptionType.Charge)}\r\n                    <div className='edit-box' >\r\n                        <span onClick={() => scrollToSection('variant')}\r\n                            className=\"stat-text-link\"\r\n                            data-dtm=\"checkout:order review:your selection\"\r\n                        >\r\n                            Edit\r\n                            <img alt='' src={`${getCMSAssets()}/checkout/arrow-black.svg`} />\r\n                        </span>\r\n                    </div>\r\n                </div>\r\n\r\n                <div className='payment-panel'>\r\n                    <h6>PAYMENT</h6>\r\n                    <div className='inner-item'>\r\n                        <span>Customer Type</span>\r\n                        <p>{customerTypeFromStore}</p>\r\n                    </div>\r\n                    <div className='inner-item'>\r\n                        <span>Payment method</span>\r\n                        <p>{paymentOptionsFromStore?.PaymentOption}</p>\r\n                    </div>\r\n                    <div className='edit-box' >\r\n                        <span onClick={() => scrollToSection('payment')}\r\n                            className=\"stat-text-link\"\r\n                            data-dtm=\"checkout:order review:payment\"\r\n                        >\r\n                            Edit\r\n                            <img alt='' src={`${getCMSAssets()}/checkout/arrow-black.svg`} />\r\n                        </span>\r\n                    </div>\r\n                </div>\r\n\r\n                <div className='delivery-panel'>\r\n                    <h6>{selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery ? \"DELIVERY\" : \"In-store Collection\"}</h6>\r\n                    <div className='inner-item'>\r\n                        <span>Location</span>\r\n                        <p>{getDeliveryAddress()}</p>\r\n                    </div>\r\n                    <div className='inner-item'>\r\n                        <span>Preferred option</span>\r\n                        <div className='adds-on-item-panel'>\r\n                            <span>{selectedDeliveryFromStore.SelectedDeliveryOption}</span>\r\n                            <span>{getDeliveryPrice()}</span>\r\n                        </div>\r\n                    </div>\r\n                    <div className='inner-item'>\r\n                        <span>Estimated delivery</span>\r\n                        {\r\n                             !selectedVehicleFromStore.HasStock && linkSourceFromStore != rdEnum.enumLinkSource.PrivateInterestLink\r\n                             ?\r\n                             <p>Waitlisted</p>\r\n                                :\r\n                                <p>{vehicleFromStore?.SelectedInterior?.Available}</p>\r\n                        }\r\n\r\n                    </div>\r\n                    <div className='edit-box'>\r\n                        <span onClick={() => scrollToSection('delivery')}\r\n                            className=\"stat-text-link\"\r\n                            data-dtm={\"checkout:order review:\" + (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery ? \"delivery\" : \"in-store collection\")}>\r\n                            Edit\r\n                            <img alt='' src={`${getCMSAssets()}/checkout/arrow-black.svg`} />\r\n                        </span>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div className='take-break-container'>\r\n                <div className='take-break-title'>\r\n                    Taking a break? \r\n                </div>\r\n                {/*<div className='take-break-desc'>*/}\r\n                {/*    Share your LYRIQ configuration with a unique link.*/}\r\n                {/*</div>*/}\r\n                <div className='take-break-btn-panel'>\r\n                    <SaveDialog />\r\n                    <ShareDialog />\r\n                </div>\r\n            </div>\r\n\r\n            <div className='checkout-btn-panel'>\r\n                {\r\n                    linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink\r\n                    ?\r\n                    <p className='checkout-reminder'>Important: You're about to proceed to checkout. So we can hold your design, you won't be able to edit your LYRIQ after this point. Please check your configuration before proceeding. </p>\r\n                    :\r\n                    selectedVehicleFromStore.HasStock\r\n                        ?\r\n                        <p className='checkout-reminder'>Important: You're about to proceed to checkout. So we can hold your design, you won't be able to edit your LYRIQ after this point. Please check your configuration before proceeding. </p>\r\n                        :\r\n                        <></>\r\n                }\r\n                <Button className='checkout-btn stat-button-link' onClick={() => handleToCheckoutForm()} data-dtm=\"checkout\">\r\n                    {\r\n                        linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink\r\n                            ?\r\n                            <h6>CONTINUE TO CHECKOUT</h6>\r\n                            :\r\n                            selectedVehicleFromStore.HasStock\r\n                                ?\r\n                                <h6>CONTINUE TO CHECKOUT</h6>\r\n                                :\r\n                                <h6>JOIN THE WAITLIST</h6>\r\n                    }\r\n                </Button>\r\n            </div>\r\n\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Checkout","import { getCMSAssets, getFrontendUrl } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useState, useRef } from 'react';\r\nimport { useSelector } from 'react-redux'\r\nimport PaymentOptions, { ChildRef } from \"components/PaymentOptions\";\r\nimport { IAppState } from 'model/IAppState';\r\n\r\ninterface IPaymentTypeProps {\r\n    paymentType: string,\r\n}\r\n\r\nconst CashFinanceDescDialog = (props: IPaymentTypeProps) => {\r\n    const [isOpen, setIsOpen] = useState(false);\r\n    const paymentOpionsRef = useRef<ChildRef | null>(null);\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const paymentOptionFromStore = useSelector((state: IAppState) => {\r\n        return state.paymentOptions;\r\n    });\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n    }\r\n\r\n    const handleDialogHide = () => {\r\n        setIsOpen(false);\r\n    }\r\n\r\n    const openCashFinanceDialog = () => {\r\n        if (paymentOpionsRef.current) {\r\n            paymentOpionsRef.current.openDialog();\r\n        }\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <div className='cash-finance-desc-container stat-button-link'\r\n                data-dtm=\"checkout\"\r\n                onClick={() => {\r\n                    handleDialogOpen();\r\n                }}\r\n            >\r\n                <span>\r\n                    <img alt='' src={`${getCMSAssets()}/main/File.png`} />\r\n                    What is {props.paymentType}?\r\n                </span>\r\n                <img alt='' src={`${getCMSAssets()}/main/arrow-right-dark-black.svg`} />\r\n            </div>\r\n\r\n            <div className='more-about-price stat-text-link' onClick={() => { openCashFinanceDialog(); }} data-dtm=\"checkout\">\r\n                Calculate Finance\r\n                <img alt='' src={`${getCMSAssets()}/main/arrow-black.svg`} />\r\n            </div>\r\n\r\n            <Dialog className='cash-finance-desc-dialog' visible={isOpen} position='bottom' onHide={() => handleDialogHide()} draggable={false} resizable={true}>\r\n                {\r\n                    props.paymentType == 'Cash'\r\n                    ?\r\n                    <div className='cash-finance-desc-inner'>\r\n                        <div className='title-panel'>\r\n                            <h1>{props.paymentType.toUpperCase()} INFORMATION</h1>\r\n                            <h3 className='sub-title'>WHAT IS {props.paymentType.toUpperCase()}?</h3>\r\n                            <p style={{marginBottom: '1rem'}}>By choosing a Cash purchase, you will be placing an order to buy the vehicle outright. If you are financing your vehicle with your own bank or financier, you should select cash and we will support you with required paperwork.</p>\r\n                            <p>To place an order, you will be asked to pay a deposit. When the vehicle is ready for delivery, you will be invoiced to pay the final balance via wire transfer.</p>\r\n                        </div>\r\n                        <div className='features-panel'>\r\n                            <h3 className='sub-title'>HOW DOES A CASH PURCHASE WORK?</h3>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/variants/vehicle.svg`} />\r\n                                <span>1. Vehicle selection: Design and select your Cadillac.</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/wallet.svg`} />\r\n                                <span>2. Payment type: Select cash purchase.</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/coins.svg`} />\r\n                                <span>3. Deposit: You will be required to pay a deposit, which is deducted from the final payment.</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/text-icon.svg`} />\r\n                                    <span>4. Final Payment: When the car is ready for delivery, you will be sent a final invoice to pay the remaining balance via electronic funds transfer (EFT)</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/file.svg`} />\r\n                                <span>5. Vehicle Registration & Delivery: The final step is to register your vehicle and confirm delivery appointment details.</span>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    :\r\n                    <div className='cash-finance-desc-inner'>\r\n                        <div className='title-panel'>\r\n                            <h1>{props.paymentType.toUpperCase()} INFORMATION</h1>\r\n                            <h3 className='sub-title'>WHAT IS {props.paymentType.toUpperCase()}?</h3>\r\n                            <p>\r\n                                Finance is also known as a car loan to help you get the keys to your Cadillac. Our finance is powered by trusted lenders Plenti (Australia) and MTF (New Zealand) and together we’ve kept it simple to apply and track your loan. \r\n                            </p>\r\n                        </div>\r\n                        <div className='features-panel'>\r\n                            <h3 className='sub-title'>HOW DOES FINANCE WORK?</h3>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/variants/vehicle.svg`} />\r\n                                <span>1. Vehicle selection: Design and select your Cadillac.</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/clock.svg`} />\r\n                                <span>2. Payment type: Select finance purchase.</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/driving.svg`} />\r\n                                <span>3. Deposit: You will be required to pay a deposit, which is deducted from the final amount owed.</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/coins.svg`} />\r\n                                <span>4. Application: You will have the opportunity to apply for your loan online, with the support of our trusted lenders. Finance is subject to an approval process, and terms and conditions apply.</span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/checkout/file.svg`} />\r\n                                <span>\r\n                                    5. Payment: When the car is ready for delivery, we will work with you and our trusted partners to arrange final payment ahead of delivery.\r\n                                    {/* <ul>\r\n                                        <li>Depreciation: Difference between the car's initial value and its expected value at the end of the lease term.</li>\r\n                                        <li>Interest or Financing Costs: Interest on that the financing you obtained from the leasing company.</li>\r\n                                        <li>Various taxes and administrative fees.</li>\r\n                                        <li>Maintenance and Insurance: If applicable to your lease, to ensure the car remains in good condition.</li>\r\n                                    </ul> */}\r\n                                </span>\r\n                            </div>\r\n                            <div className='feature-item'>\r\n                                <img alt='' src={`${getCMSAssets()}/variants/vehicle.svg`} />\r\n                                <span>6. Vehicle Registration & Delivery: The final step is to register your vehicle and confirm delivery appointment details.</span>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='brand-logos-panel'>\r\n                            <img alt='' src={`${getCMSAssets()}/checkout/brand-logos.png`} />\r\n                        </div>\r\n                    </div>\r\n                }\r\n               \r\n                \r\n            </Dialog>\r\n\r\n\r\n            <PaymentOptions ref={paymentOpionsRef}\r\n                isFromLandingPage={true}\r\n                subTotal={selectedVehicleFromStore?.Subtotal || 0}\r\n                estDeliveryDate={vehicleFromStore?.SelectedInterior?.Available || \"\"}\r\n                variantID={selectedVehicleFromStore?.VariantID || \"\"}\r\n                variantName={selectedVehicleFromStore?.VariantName || \"\"}\r\n                variantPrice={selectedVehicleFromStore?.VariantBasePrice || 0}\r\n                exteriorID={selectedVehicleFromStore?.ExteriorID || \"\"}\r\n                exteriorName={selectedVehicleFromStore?.Exterior || \"\"}\r\n                exteriorPrice={selectedVehicleFromStore?.ExteriorPrice || 0}\r\n                interiorID={selectedVehicleFromStore?.InteriorID || \"\"}\r\n                interiorName={selectedVehicleFromStore?.Interior || \"\"}\r\n                interiorPrice={selectedVehicleFromStore?.InteriorPrice || 0}\r\n                options={selectedVehicleFromStore?.Options || []}\r\n            />\r\n        </>\r\n    )\r\n}\r\n\r\nexport default CashFinanceDescDialog\r\n","import React, { useEffect, useRef, useState } from 'react'\r\nimport { Button } from 'react-bootstrap';\r\nimport PaymentOptions, { ChildRef } from '../../../components/PaymentOptions';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { setCustomerTypeAction } from 'stores/CustomerType';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as paymentOptionStore from 'stores/PaymentOptions';\r\nimport CashFinanceDescDialog from './CashFinanceDescDialog';\r\n\r\nconst CustomerPayment = ({ handlePayment }: any) => {\r\n\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n    const [pageState, setPageState] = useState({\r\n        customerType: rdEnum.enumClientTypes.Private.Code,\r\n        paymentType: rdEnum.enumPaymentOptions.Cash,\r\n    });\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const customerType = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n\r\n    const handleCustomerType = (type: any) => {\r\n        setPageState({\r\n            ...pageState,\r\n            customerType: type\r\n        });\r\n        dispatch(setCustomerTypeAction(type));\r\n    }\r\n\r\n    const handlePaymentType = (type: any) => {\r\n        setPageState({\r\n            ...pageState,\r\n            paymentType: type\r\n        });\r\n        handlePayment(type);\r\n        dispatch(paymentOptionStore.updateSelectedPaymentOptionAction(type));\r\n    }\r\n\r\n    useEffect(() => {\r\n        setPageState(({\r\n            ...pageState,\r\n            customerType: customerType || rdEnum.enumClientTypes.Private.Code\r\n        }))\r\n    }, [customerType])\r\n\r\n    const childRef = useRef<ChildRef | null>(null);\r\n\r\n    // Function to open the dialog in the child component\r\n    const openCashFinanceDialog = () => {\r\n        if (childRef.current) {\r\n            childRef.current.openDialog();\r\n        }\r\n    };\r\n\r\n    return (\r\n        <div className='checkout-container'>\r\n            <div className='customer-type-container'>\r\n                <h3 className='main-page-section-title'>CHECKOUT</h3>\r\n                <p className='checkout-desc'>Select the option that works best for you.</p>\r\n                <h5 className='checkout-subtitle'>CUSTOMER TYPE</h5>\r\n                <div className='customer-type-selection'>\r\n                    <div className='variant-btn-panel'>\r\n                        <Button className={pageState?.customerType == rdEnum.enumClientTypes.Private.Code ? 'stat-button-link variant-btn selected' : 'stat-button-link variant-btn'}\r\n                            data-dtm=\"checkout\"\r\n                            onClick={() => {\r\n                                handleCustomerType(rdEnum.enumClientTypes.Private.Code);\r\n                            }}\r\n                        >\r\n                            <span>{rdEnum.enumClientTypes.Private.Text}</span>\r\n                        </Button>\r\n                        <Button className={pageState?.customerType == rdEnum.enumClientTypes.Business.Code ? 'stat-button-link variant-btn selected' : 'stat-button-link variant-btn'}\r\n                            data-dtm=\"checkout\"\r\n                            onClick={() => {\r\n                                handleCustomerType(rdEnum.enumClientTypes.Business.Code);\r\n                            }}\r\n                        >\r\n                            <span>{rdEnum.enumClientTypes.Business.Text}</span>\r\n                        </Button>\r\n                    </div>\r\n                </div>\r\n\r\n            </div>\r\n\r\n            <div className='payment-container'>\r\n                <h3 className='checkout-subtitle'>PAYMENT TYPE</h3>\r\n                {/* <p className='payment-desc'>Please indicate how you intend to pay for your Cadillac. You will complete this process in your account. You can amend your selection in your account.</p> */}\r\n\r\n                <div className='cash-finance-btn-panel'>\r\n                    <Button className={pageState?.paymentType == rdEnum.enumPaymentOptions.Cash ? 'stat-button-link cash-finance-btn selected' : 'stat-button-link cash-finance-btn'}\r\n                        data-dtm=\"checkout\"\r\n                        onClick={() => {\r\n                            handlePaymentType(rdEnum.enumPaymentOptions.Cash)\r\n                        }}\r\n                    >\r\n                        <span>{rdEnum.enumPaymentOptions.Cash}</span>\r\n                    </Button>\r\n                    <Button className={pageState?.paymentType == rdEnum.enumPaymentOptions.Finance ? 'stat-button-link cash-finance-btn selected' : 'stat-button-link cash-finance-btn'}\r\n                        data-dtm=\"checkout\"\r\n                        onClick={() => {\r\n                            handlePaymentType(rdEnum.enumPaymentOptions.Finance)\r\n                        }}\r\n                    >\r\n                        <span>Finance</span>\r\n                    </Button>\r\n                    <PaymentOptions ref={childRef}\r\n                        isFromLandingPage={false}\r\n                        subTotal={selectedVehicleFromStore?.Subtotal || 0}\r\n                        estDeliveryDate={vehicleFromStore?.SelectedInterior?.Available || \"\"}\r\n                        variantID={selectedVehicleFromStore?.VariantID || \"\"}\r\n                        variantName={selectedVehicleFromStore?.VariantName || \"\"}\r\n                        variantPrice={selectedVehicleFromStore?.VariantBasePrice || 0}\r\n                        exteriorID={selectedVehicleFromStore?.ExteriorID || \"\"}\r\n                        exteriorName={selectedVehicleFromStore?.Exterior || \"\"}\r\n                        exteriorPrice={selectedVehicleFromStore?.ExteriorPrice || 0}\r\n                        interiorID={selectedVehicleFromStore?.InteriorID || \"\"}\r\n                        interiorName={selectedVehicleFromStore?.Interior || \"\"}\r\n                        interiorPrice={selectedVehicleFromStore?.InteriorPrice || 0}\r\n                        options={selectedVehicleFromStore?.Options || []}\r\n                    />\r\n\r\n                </div>\r\n\r\n                <CashFinanceDescDialog paymentType={pageState?.paymentType} />\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default CustomerPayment","import { getBackendPath } from 'helpers/Uri';\r\nimport * as deliveryModel from 'model/IDelivery';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const getLocations = async (request: deliveryModel.IGetPickupLocationRequest): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(request),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Location/get-pickup-locations`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getAddress = async (country: string, keywords: string): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            country: country,\r\n            keywords: keywords,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Location/get-address`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getDeliveryPrice = async (\r\n    delivery: deliveryModel.IGetPriceRequest\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(delivery),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Location/get-delivery-price`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getDistance = async (\r\n    delivery: deliveryModel.IGetPriceRequest\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(delivery),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/GoogleAPIs/get-distance`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import React, { useEffect, useRef, useState, forwardRef, useImperativeHandle } from 'react'\r\nimport { Button, Card } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isNil, update } from 'lodash';\r\nimport IsNumberVerification from 'components/IsNumberVerification';\r\nimport { getCMSAssets } from 'helpers/Uri';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { RadioButton } from 'primereact/radiobutton';\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport { AutoComplete } from 'primereact/autocomplete';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport { classNames } from 'primereact/utils';\r\n\r\n\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as rdHelper from 'helpers/Uri';\r\nimport * as checkoutHelper from 'businessHelpers/CheckoutHelper';\r\nimport * as selectedDeliveryStore from 'stores/UserSelectedDelivery';\r\nimport * as paymentOptionsStore from 'stores/PaymentOptions';\r\n\r\nimport * as deliveryModel from 'model/IDelivery';\r\nimport * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as paymentOptionsModel from 'model/IPaymentOptions';\r\nimport * as locationService from 'services/Locations';\r\nimport * as paymentOptionsService from 'services/PaymentOptions';\r\n\r\n/*import { getAddress } from 'services/GoogleApi';*/\r\n\r\n///update store's data once delivery selection changed as driveaway cost need to be updated as well.\r\nconst Delivery = forwardRef(({ handleDelivery }: any, ref: any) => {\r\n    const dispatch = useDispatch();\r\n    //store variables\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n    const customerTypeFromStore = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n    const selectedLocationFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const abortControllerInitialValue: any = new (\r\n        window as any\r\n    ).AbortController();\r\n    const [costAbortController, setCostAbortController] = useState(\r\n        abortControllerInitialValue,\r\n    );\r\n\r\n    //state\r\n    const [addressList, setAddressList] = useState<any>([]);            //address dropdown list\r\n    //selected primary address\r\n    const [primaryAddress, setPrimaryAddressAddress] = useState<any>(null);\r\n    const [primaryAddressAvailabeDetails, setPrimaryAddressAvailabeDetails] = useState<deliveryModel.IDeliveryAddressAvailableDetails>(checkoutHelper.getInitDeliveryAddressAvailableDetails());\r\n    //selected different delivery address\r\n    const [differentDeliveryAddress, setDifferentDeliveryAddress] = useState<any>(null);\r\n    const [differentDeliveryAddressAvailabeDetails, setDifferentDeliveryAddressAvailabeDetails] = useState<deliveryModel.IDeliveryAddressAvailableDetails>(checkoutHelper.getInitDeliveryAddressAvailableDetails());\r\n\r\n    //pickup locations\r\n    const [pickupLocations, setPickupLocations] = useState<deliveryModel.IPickupLocation[] | null>(null);\r\n\r\n\r\n\r\n    const [pageState, setPageState] = useState<deliveryModel.IDelivery>(checkoutHelper.getDeliveryInitState());   //not in use anymore\r\n    const [pageInvalidState, setPageInvalidState] = useState<deliveryModel.IInvalidDelivery>(checkoutHelper.getInitInvalidDelivery());\r\n    const [pickupLocationDataLoadingStatus, setPickupLocationDataLoadingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n\r\n\r\n    //const [errorMessage, setErrorMessage] = useState<any>(null);\r\n\r\n\r\n    const inputRef = useRef<HTMLInputElement>(null);\r\n    const regionalInputRef = useRef<HTMLInputElement>(null);\r\n    const locationCheckboxRef = useRef<HTMLInputElement>(null);\r\n    const differentAddressCheckboxRef = useRef<HTMLInputElement>(null);\r\n    const [isFocused, setIsFocused] = useState(false);\r\n    const [isRegoFocused, setIsRegoFocused] = useState(false);\r\n\r\n    useEffect(() => {\r\n        setPageState({\r\n            ...pageState,\r\n            Country: selectedDeliveryFromStore?.Country?.code || null,\r\n            State: selectedDeliveryFromStore?.State?.code || null\r\n        });\r\n\r\n    }, [selectedDeliveryFromStore]);\r\n\r\n    const validationDelivery = (): boolean => {\r\n\r\n        let invalidDelivery = false;\r\n        let invalidDeliveryOption = false;\r\n        let invalidPrimaryAddress = false;\r\n        let invalidPrimaryPostcode = false;\r\n        let invalidPrimaryState = false;\r\n        let invalidPickupLocation = false;\r\n        let invalidDeliveryAddress = false;\r\n        let invalidDeliveryPostcode = false;\r\n        let invalidDifferentState = false;\r\n\r\n        if (isNullAddress(primaryAddress)) {\r\n            invalidPrimaryAddress = true;\r\n            invalidDelivery = true;\r\n        }\r\n        else {\r\n            if (pageState.Country == rdEnum.enumCountryCode.Australia) {\r\n                if (primaryAddress.state !== pageState?.State) {\r\n                    invalidPrimaryState = true;\r\n                    invalidDelivery = true;\r\n                }\r\n            }\r\n        }\r\n\r\n        if (isNullPostcode(primaryAddress)) {\r\n            invalidPrimaryPostcode = true;\r\n            invalidDelivery = true;\r\n        }\r\n\r\n        if (isNil(pageState?.DeliveryOption) || pageState?.DeliveryOption == \"\") {\r\n            invalidDeliveryOption = true;\r\n            invalidDelivery = true;\r\n        }\r\n\r\n        if (pageState?.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery) {\r\n\r\n            if (pageState.DifferentDeliveryAddress) {\r\n                if (isNullAddress(differentDeliveryAddress)) {\r\n                    invalidDeliveryAddress = true;\r\n                    invalidDelivery = true;\r\n                }\r\n                else {\r\n                    if (pageState.Country == rdEnum.enumCountryCode.Australia) {\r\n                        if (primaryAddress?.state != differentDeliveryAddress?.state) {\r\n                            invalidDifferentState = true;\r\n                            invalidDelivery = true;\r\n                        }\r\n                    } else if (pageState.Country == rdEnum.enumCountryCode.NewZealand) {\r\n                        if (!differentDeliveryAddress.postcode || isNil(differentDeliveryAddress.postcode)) {\r\n                            invalidDeliveryPostcode = true;\r\n                            invalidDelivery = true;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        else if (pageState?.DeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            if (!pageState?.PickupAddressConfirm) {\r\n                invalidPickupLocation = true;\r\n                invalidDelivery = true;\r\n            }\r\n        }\r\n\r\n\r\n        setPageInvalidState({\r\n            ...pageInvalidState,\r\n            InvalidPrimaryAddress: invalidPrimaryAddress,\r\n            InvalidPrimaryPostcode: invalidPrimaryPostcode,\r\n            InvalidPrimaryState: invalidPrimaryState,\r\n            InvalidDeliveryType: invalidDeliveryOption,\r\n            InvalidPickupLocation: invalidPickupLocation,\r\n            InvalidDeliveryAddress: invalidDeliveryAddress,\r\n            InvalidDeliveryPostcode: invalidDeliveryPostcode,\r\n            InvalidDeliveryState: invalidDifferentState,\r\n        });\r\n\r\n        if (pageState?.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery) {\r\n            if (!pageState.DifferentDeliveryAddress) {\r\n                //comment below code if delivery fee has error, still able to process checkout\r\n                //if (!isNullAddress(primaryAddress)\r\n                //    && !isNil(primaryAddressAvailabeDetails.DeliveryPriceError) && primaryAddressAvailabeDetails.DeliveryPriceError != \"\") {\r\n                //    invalidDelivery = true;\r\n                //}\r\n            }\r\n            else {\r\n                //different address\r\n                if (!isNullAddress(differentDeliveryAddress)) {\r\n                    if (!differentDeliveryAddressAvailabeDetails.DeliveryAvailable) {\r\n                        const deliveryError = document.getElementsByClassName(\"delivery-error\");\r\n                        if (deliveryError != null && deliveryError.length > 0 && deliveryError[0] != null) {\r\n                            deliveryError[0].innerHTML = \"The address you've entered is not eligible for regional delivery. It falls within the minimum distance required from an Experience Centre. Please select In-store collection or enter a different address\";\r\n                        }\r\n                        invalidDelivery = true;\r\n                    }\r\n\r\n                    //comment below code if delivery fee has error, still able to process checkout\r\n                    //if (!isNil(differentDeliveryAddressAvailabeDetails.DeliveryPriceError) && differentDeliveryAddressAvailabeDetails.DeliveryPriceError != \"\") {\r\n                    //    invalidDelivery = true;\r\n                    //}\r\n                }\r\n            }\r\n        }\r\n\r\n        return invalidDelivery;\r\n    }\r\n\r\n    const isNullAddress = (address: any) => {\r\n        if (!isNil(address) && !isNil(address.fullAddress) && address.fullAddress != \"\")\r\n            return false;\r\n        return true;\r\n    }\r\n\r\n    const isNullPostcode = (address: any) => {\r\n        if (!isNil(address?.postcode) && address?.postcode != \"\")\r\n            return false;\r\n        return true;\r\n    }\r\n\r\n\r\n    const showDeliveryAddressError = () => {\r\n\r\n        if (!isNullAddress(primaryAddress) && !isNullAddress(differentDeliveryAddress) && pageState.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery && pageState.DifferentDeliveryAddress) {\r\n            if (pageState.Country == rdEnum.enumCountryCode.Australia && pageInvalidState?.InvalidDeliveryState) {\r\n                return (<div className=\"text-error delivery-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>Different State from primary address is not allowed. Please try again or select In-store Collection.</div>);\r\n            } else if (pageState.Country == rdEnum.enumCountryCode.NewZealand && pageInvalidState?.InvalidDeliveryPostcode){\r\n                return (<div className=\"text-error delivery-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>Delivery Postcode is required, Please change another address</div>);\r\n            }\r\n        } \r\n\r\n        if (pageState?.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery) {\r\n            if (!pageState.DifferentDeliveryAddress) {\r\n                if (!isNullAddress(primaryAddress)) {\r\n                    let error = rdEnum.enumDeliveryPriceError.find(m => m.ErrorCode == primaryAddressAvailabeDetails.DeliveryPriceError);\r\n                    if (error != null) {\r\n                        return (<div className=\"text-error delivery-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>{error.ErrorMessage}</div>);\r\n                    }\r\n                }\r\n            }\r\n            else {\r\n\r\n                //different address\r\n                if (!isNullAddress(differentDeliveryAddress) && !isNil(differentDeliveryAddressAvailabeDetails.DeliveryAvailable)) {\r\n                    if (!differentDeliveryAddressAvailabeDetails.DeliveryAvailable) {\r\n                        return (<div className=\"text-error delivery-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>Your Delivery Address is not eligible for Regional Delivery.</div>);\r\n                    }\r\n                    else {\r\n                        let error = rdEnum.enumDeliveryPriceError.find(m => m.ErrorCode == differentDeliveryAddressAvailabeDetails.DeliveryPriceError);\r\n                        if (error != null) {\r\n                            return (<div className=\"text-error delivery-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>{error.ErrorMessage}</div>);\r\n                        }\r\n                    }\r\n\r\n                }\r\n                else {\r\n                    return <></>;\r\n                }\r\n            }\r\n        }\r\n\r\n        return <></>;\r\n    }\r\n\r\n    useImperativeHandle(ref, () => ({\r\n\r\n        getValidate: () => {\r\n            return validationDelivery();\r\n        },\r\n\r\n        dispatchRegoAddress: () => {\r\n            //dispatch(selectedDeliveryStore.updateRegoAddressAction(\r\n            //    pageState.PrimaryAddress,\r\n            //    pageState.PrimarySuburb,\r\n            //    pageState.PrimaryPostcode,\r\n            //    pageState.PrimaryState));\r\n        }\r\n\r\n    }));\r\n\r\n\r\n    const handleDeliveryType = async (type: string) => {\r\n        setPageState({\r\n            ...pageState,\r\n            DeliveryOption: type\r\n        });\r\n        handleDelivery(type)\r\n\r\n        setPageInvalidState({\r\n            ...pageInvalidState,\r\n            InvalidDeliveryType: false,\r\n        });\r\n\r\n\r\n        let updatedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n            ...selectedDeliveryFromStore,\r\n            SelectedDeliveryOption: type,\r\n        };\r\n\r\n        //update delivery location in store\r\n        if (type == rdEnum.enumDeliveryOptions.HomeDelivery) {\r\n\r\n            //Regional Delivery\r\n            if (pageState?.DifferentDeliveryAddress) {\r\n                //Regional Delivery and different address\r\n                updatedDelivery = {\r\n                    ...updatedDelivery,\r\n                    SelectedDeliveryFullAddress: differentDeliveryAddress?.fullAddress,\r\n                    SelectedDeliveryPostcode: differentDeliveryAddress?.postcode,\r\n                    SelectedDeliverySuburb: differentDeliveryAddress?.suburb,\r\n                    SelectedDeliveryState: differentDeliveryAddress?.state,\r\n                    DeliveryPrice: differentDeliveryAddressAvailabeDetails.DeliveryPrice || 0,\r\n                    DeliveryDistance: differentDeliveryAddressAvailabeDetails.Distance,\r\n                    PickupLocationName: null,\r\n                    //DeliveryAvailable: differentDeliveryAddressAvailable,   //todo: show error\r\n                    //DeliveryPriceErrorCode: differentDeliveryAddressErrorCode || null\r\n                };\r\n            }\r\n            else {\r\n                //Regional Delivery and primary address\r\n                updatedDelivery = {\r\n                    ...updatedDelivery,\r\n                    SelectedDeliveryFullAddress: primaryAddress?.fullAddress,\r\n                    SelectedDeliveryPostcode: primaryAddress?.postcode,\r\n                    SelectedDeliverySuburb: primaryAddress?.suburb,\r\n                    SelectedDeliveryState: primaryAddress?.state,\r\n                    DeliveryDistance: primaryAddressAvailabeDetails.Distance || 0, //selectedPickuplocation?.Distance,\r\n                    DeliveryPrice: primaryAddressAvailabeDetails.DeliveryPrice, // selectedPickuplocation?.DeliveryPrice,\r\n                    PickupLocationName: null,\r\n                    //DeliveryAvailable: availabe,\r\n                    //DeliveryPriceErrorCode: errorCode,\r\n                };\r\n\r\n            }\r\n        }\r\n        else {\r\n            if (!isNil(pickupLocations)) {\r\n                let selectedPickuplocation = pickupLocations.find(m => m.IsSelected);\r\n                if (!isNil(selectedPickuplocation)) {\r\n                    //if pickup, set as pickup location address as delivery address\r\n                    updatedDelivery = {\r\n                        ...updatedDelivery,\r\n                        SelectedDeliveryFullAddress: selectedPickuplocation?.LocationAddress,\r\n                        SelectedDeliveryPostcode: selectedPickuplocation?.LocationPostcode,\r\n                        SelectedDeliverySuburb: selectedPickuplocation?.LocationSuburb,\r\n                        SelectedDeliveryState: selectedPickuplocation?.LocationState,\r\n                        DeliveryDistance: 0, //selectedPickuplocation?.Distance,\r\n                        DeliveryPrice: 0, // selectedPickuplocation?.DeliveryPrice,\r\n                        PickupLocationName: selectedPickuplocation?.LocationName,\r\n                        //DeliveryAvailable: selectedPickuplocation?.DeliveryAvailable,\r\n                        //DeliveryPriceErrorCode: selectedPickuplocation?.DeliveryErrorCode,\r\n                    };\r\n                }\r\n            }\r\n        }\r\n        dispatch(selectedDeliveryStore.updateDeliveryAction(updatedDelivery));\r\n\r\n    }\r\n\r\n    //get address dropdown items\r\n    const doGetAddress = async (event: any) => {\r\n\r\n        let keywords = event.query;\r\n\r\n        if (keywords.length > 4) {\r\n            let result = await locationService.getAddress(\r\n                selectedDeliveryFromStore?.Country?.code || rdEnum.enumCountryCode.Australia,\r\n                keywords,\r\n            );\r\n            if (result.status) {\r\n                setAddressList(result.data);\r\n            }\r\n        }\r\n    }\r\n\r\n    const onAddressSelect = (e: any) => {\r\n        //Check the special scenario '1001 Scenic Drive, Auckland' which without the postcode\r\n        //If postcode unavailable, then when user onSelect the Item within <AutoComplete />'s addressList, \r\n        //the postcode's error message will appear\r\n        let invalidPrimaryState = false;\r\n        if (pageState.Country == rdEnum.enumCountryCode.Australia) {\r\n            if (!isNil(e.value) && !isNil(e.value.state) && pageState.State != e.value.state) {\r\n                invalidPrimaryState = true;\r\n            }\r\n        }\r\n        if (!isNil(e.value?.postcode) && e.value?.postcode != '') {\r\n            setPageInvalidState({\r\n                ...pageInvalidState,\r\n                InvalidPrimaryAddress: false,\r\n                InvalidPrimaryPostcode: false,\r\n                InvalidPrimaryState: invalidPrimaryState\r\n            })\r\n        } else {\r\n            setPageInvalidState({\r\n                ...pageInvalidState,\r\n                InvalidPrimaryAddress: false,\r\n                InvalidPrimaryPostcode: true,\r\n                InvalidPrimaryState: invalidPrimaryState\r\n            })\r\n        }\r\n    }\r\n\r\n\r\n    const onAddressChange = (e: any) => {\r\n\r\n        setPageInvalidState({\r\n            ...pageInvalidState,\r\n            InvalidPrimaryAddress: false,\r\n            InvalidPrimaryPostcode: false,\r\n            InvalidPrimaryState: false\r\n        })\r\n       \r\n        setPrimaryAddressAddress(e.value);   //will trigger in useEffect to get locations and available details\r\n        setPickupLocationDataLoadingStatus(rdEnum.enumProcessingStatus.Processing);\r\n\r\n        //let type = rdEnum.enumDeliveryOptions.Pickup;   //default selected as pick up\r\n        //setPageState({\r\n        //    ...pageState,\r\n        //    DeliveryOption: type,\r\n        //});\r\n    }\r\n\r\n    const onDeliveryAddressSelect = (e: any) => {\r\n        //Check the special scenario '1001 Scenic Drive, Auckland' which without the postcode\r\n        //If postcode unavailable, then when user onSelect the Item within <AutoComplete />'s addressList, \r\n        //the postcode's error message will appear\r\n        let invalidDeliveryState = false;\r\n        let invalidDeliveryPostcode = false;\r\n        if (pageState.Country == rdEnum.enumCountryCode.Australia) {\r\n            if (!isNil(e.value) && !isNil(e.value.state) && pageState.State != e.value.state) {\r\n                invalidDeliveryState = true;\r\n            }\r\n        }\r\n        if (pageState.Country == rdEnum.enumCountryCode.NewZealand) {\r\n            if (isNil(e.value) || isNil(e.value.postcode)) {\r\n                invalidDeliveryPostcode = true;\r\n            }\r\n        }\r\n        setPageInvalidState({\r\n            ...pageInvalidState,\r\n            InvalidDeliveryAddress: isNil(e.value),\r\n            InvalidDeliveryPostcode: invalidDeliveryPostcode,\r\n            InvalidDeliveryState: invalidDeliveryState  //Customers is not allowed to select a delivery address that is not in the same state as their registration address\r\n        });\r\n    }\r\n\r\n    //enter different delivery address\r\n    const onDeliveryAddressChange = async (e: any) => {\r\n        setPageInvalidState({\r\n            ...pageInvalidState,\r\n            InvalidDeliveryAddress: false,\r\n            InvalidDeliveryPostcode: false,\r\n            InvalidDeliveryState: false  //Customers is not allowed to select a delivery address that is not in the same state as their registration address\r\n        });\r\n\r\n        setDifferentDeliveryAddress(e.value);\r\n    }\r\n\r\n\r\n    //primary address change, call get pick up locations and primary address aviablable details\r\n    useEffect(() => {\r\n        if (isNil(primaryAddress) || isNil(primaryAddress.fullAddress) || primaryAddress.fullAddress == \"\"\r\n            || (pageState.Country == rdEnum.enumCountryCode.Australia && pageInvalidState.InvalidPrimaryState)\r\n        ) {\r\n            clearPrimaryState();\r\n            return;\r\n        }\r\n        else {\r\n            doGetLocations(primaryAddress.postcode || \"\",\r\n                primaryAddress?.suburb || \"\",\r\n                primaryAddress?.state || \"\",\r\n                primaryAddress.fullAddress || \"\");\r\n        }\r\n\r\n\r\n    }, [primaryAddress,\r\n        selectedVehicleFromStore.VariantName,\r\n        selectedVehicleFromStore?.Exterior,\r\n        selectedVehicleFromStore?.Interior,\r\n        selectedVehicleFromStore?.Subtotal,\r\n        customerTypeFromStore\r\n    ]);\r\n\r\n    //different address change, get different address aviablable details\r\n    useEffect(() => {\r\n\r\n        if (isNil(differentDeliveryAddress) || isNil(differentDeliveryAddress.fullAddress) || differentDeliveryAddress.fullAddress == \"\") {\r\n            setDifferentDeliveryAddressAvailabeDetails(checkoutHelper.getInitDeliveryAddressAvailableDetails());\r\n            return;\r\n        }\r\n        if (pageState.DifferentDeliveryAddress && !isNil(pickupLocations) && pickupLocations.length > 0\r\n            && !isNil(differentDeliveryAddress) && !isNil(differentDeliveryAddress.fullAddress) && differentDeliveryAddress.fullAddress != \"\"\r\n        ) {\r\n            doGetDeliveryPrice();\r\n        }\r\n        else {\r\n            setDifferentDeliveryAddress(null);\r\n            setDifferentDeliveryAddressAvailabeDetails(checkoutHelper.getInitDeliveryAddressAvailableDetails());\r\n\r\n            //let updateSelectedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n            //    ...selectedDeliveryFromStore,\r\n            //    SelectedDeliveryOption: null,\r\n            //    SelectedDeliveryFullAddress: null,\r\n            //    SelectedDeliveryPostcode: null,\r\n            //    SelectedDeliveryState: null,\r\n            //    SelectedDeliverySuburb: null,\r\n            //}\r\n            //dispatch(selectedDeliveryStore.updateDeliveryAction(updateSelectedDelivery));\r\n        }\r\n\r\n    }, [differentDeliveryAddress,\r\n        selectedVehicleFromStore.VariantName,\r\n        selectedVehicleFromStore?.Exterior,\r\n        selectedVehicleFromStore?.Interior,\r\n        selectedVehicleFromStore?.Subtotal,\r\n        customerTypeFromStore\r\n    ]);\r\n\r\n\r\n    //useEffect(() => {\r\n    //    dispatch(driveawayCostDataVersionStore.setDriveawayDataVersionAction());\r\n\r\n    //}, [selectedDeliveryFromStore?.PrimaryAddress, selectedDeliveryFromStore?.SelectedDeliveryFullAddress])\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        if (!isNil(inputRef.current)) {\r\n            inputRef.current.setAttribute(\"autocomplete\", \"new\");\r\n            inputRef.current.setAttribute('data-dtm', 'checkout:taking delivery');\r\n        }\r\n    }, [inputRef]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(regionalInputRef.current)) {\r\n            regionalInputRef.current.setAttribute(\"autocomplete\", \"new\");\r\n        }\r\n    }, [regionalInputRef, pageState.DifferentDeliveryAddress]);\r\n\r\n    useEffect(() => {\r\n        if (locationCheckboxRef.current) {\r\n            locationCheckboxRef.current.setAttribute('data-dtm', 'checkout:taking delivery');\r\n            locationCheckboxRef.current.classList.add('stat-checkbox');\r\n        }\r\n    }, [locationCheckboxRef.current]);\r\n\r\n    useEffect(() => {\r\n        if (differentAddressCheckboxRef.current) {\r\n            differentAddressCheckboxRef.current.setAttribute('data-dtm', 'checkout:taking delivery');\r\n            differentAddressCheckboxRef.current.classList.add('stat-checkbox');\r\n        }\r\n    }, [differentAddressCheckboxRef.current]);\r\n\r\n\r\n    //must be triggered by userEffect as variant,exterior,interior,vehicle subtotal price from store\r\n    const doGetLocations = async (postcode: string, suburb: string, state: string, address: string) => {\r\n        if (isNil(pageState.Country) || pageState.Country == \"\") {\r\n            return;\r\n        }\r\n\r\n        let variantName = selectedVehicleFromStore?.VariantName || \"\";\r\n        let exteriorName = selectedVehicleFromStore?.Exterior || \"\";\r\n        let interiorName = selectedVehicleFromStore?.Interior || \"\";\r\n\r\n        let request: deliveryModel.IGetPickupLocationRequest = {\r\n            Country: pageState.Country,\r\n            State: pageState.State || \"\",\r\n            PrimaryPostcode: postcode,\r\n            PrimarySuburb: suburb,\r\n            PrimaryState: state,\r\n            PrimaryAddress: address,\r\n            VariantName: variantName,\r\n            ExteriorName: exteriorName,\r\n            InteriorName: interiorName,\r\n            CustomerType: customerTypeFromStore,\r\n            VehicleSubTotal: selectedVehicleFromStore.Subtotal || 0\r\n        };\r\n\r\n        setPickupLocationDataLoadingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await locationService.getLocations(request);\r\n        setPickupLocationDataLoadingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            let locatiions: deliveryModel.IPickupLocation[] = [];\r\n            //let hasExistedSelected = false;\r\n            response.data.pickupLocations.map((item: any, index: number) => {\r\n                locatiions.push({\r\n                    IsSelected: index==0,\r\n                    LocationName: item.pickupLocationName,\r\n                    LocationAddress: item.pickupLocationAddress,\r\n                    LocationSuburb: item.pickupLocationSuburb,\r\n                    LocationPostcode: item.pickupLocationPostcode,\r\n                    LocationState: item.pickupLocationState,\r\n                    LocationAvailable: item.pickupLocationAvailable,\r\n                    Distance: item.deliveryPrice.distance,\r\n                    DeliveryPrice: item.deliveryPrice.deliveryPrice,\r\n                    DeliveryAvailable: item.deliveryPrice.deliveryAvailable,\r\n                    DeliveryErrorCode: item.deliveryPrice.deliveryPriceErrorCode\r\n                });\r\n                //if (item.pickupLocationAvailable) {\r\n                //    hasExistedSelected = true;\r\n                //}\r\n            });\r\n            setPickupLocations(locatiions);\r\n            //console.log(locatiions);\r\n            let selectedPickuplocation = locatiions.find((m: deliveryModel.IPickupLocation) => m.IsSelected);\r\n            if (!isNil(selectedPickuplocation)) {\r\n\r\n                //if has pick up availabe, default is pick up\r\n                let type = null;   \r\n                if (selectedPickuplocation.LocationAvailable) {\r\n                    type = rdEnum.enumDeliveryOptions.Pickup;                  \r\n                }\r\n                else {\r\n                    //if has not pickup, but delivery is available\r\n                    if (selectedPickuplocation.DeliveryAvailable) {\r\n                        type = rdEnum.enumDeliveryOptions.HomeDelivery;\r\n                    }\r\n                }\r\n                setPageState({\r\n                    ...pageState,\r\n                    PickupAddressConfirm: true,\r\n                    DeliveryOption: type\r\n                });\r\n\r\n                //set primary address available details\r\n                let primaryAddressAvailabe: deliveryModel.IDeliveryAddressAvailableDetails = {\r\n                    PickupLocationAvailable: selectedPickuplocation.LocationAvailable,\r\n                    DeliveryAvailable: selectedPickuplocation.DeliveryAvailable,\r\n                    Distance: selectedPickuplocation.Distance,\r\n                    DeliveryPrice: selectedPickuplocation.DeliveryPrice,\r\n                    DeliveryPriceError: selectedPickuplocation.DeliveryErrorCode\r\n                }\r\n                setPrimaryAddressAvailabeDetails(primaryAddressAvailabe);\r\n\r\n\r\n                let updatedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n                    ...selectedDeliveryFromStore,\r\n                    SelectedDeliveryOption: type,\r\n                    SelectedPickupLocation: selectedPickuplocation,\r\n                    SelectedDeliveryFullAddress: type == rdEnum.enumDeliveryOptions.Pickup ? selectedPickuplocation?.LocationAddress : address,\r\n                    SelectedDeliveryPostcode: type == rdEnum.enumDeliveryOptions.Pickup ? selectedPickuplocation?.LocationPostcode : postcode,\r\n                    SelectedDeliverySuburb: type == rdEnum.enumDeliveryOptions.Pickup ? selectedPickuplocation?.LocationSuburb : suburb,\r\n                    SelectedDeliveryState: type == rdEnum.enumDeliveryOptions.Pickup ? selectedPickuplocation?.LocationState : state,\r\n                    PickupLocationName: selectedPickuplocation?.LocationName,\r\n                    PrimaryAddress: response.data.homeDeliveryAddress,\r\n                    PrimaryPostcode: response.data.homeDeliveryPostcode,\r\n                    PrimarySuburb: response.data.homeDeliverySuburb,\r\n                    PrimaryState: response.data.homeDeliveryState,\r\n                    InvalidPrimaryAddress: false,\r\n                    DeliveryPrice: type == rdEnum.enumDeliveryOptions.Pickup ? 0 : response.data.pickupLocations[0].deliveryPrice.deliveryPrice,\r\n                    DeliveryAvailable: response.data.pickupLocations[0].deliveryPrice.deliveryAvailable,\r\n                    DeliveryPriceErrorCode: response.data.pickupLocations[0].deliveryPrice.deliveryPriceErrorCode,\r\n                    //DeliveryDistance: response.data.pickupLocations[0].deliveryPrice.distance,\r\n                }\r\n                dispatch(selectedDeliveryStore.updateDeliveryAction(updatedDelivery));\r\n            }\r\n            else {\r\n                setPageState({ ...pageState, PickupAddressConfirm: false });\r\n            }\r\n        }\r\n        else {\r\n            clearPrimaryState();\r\n        }\r\n    }\r\n\r\n\r\n    const clearPrimaryState = () => {\r\n\r\n        setPickupLocations(null);\r\n        setPrimaryAddressAvailabeDetails(checkoutHelper.getInitDeliveryAddressAvailableDetails());\r\n\r\n        let updateSelectedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n            ...selectedDeliveryFromStore,\r\n            SelectedPickupLocation: null,\r\n            SelectedDeliveryOption: null,\r\n            SelectedDeliveryFullAddress: null,\r\n            SelectedDeliveryPostcode: null,\r\n            SelectedDeliveryState: null,\r\n            SelectedDeliverySuburb: null,\r\n            PrimaryAddress: null,\r\n            PrimaryPostcode: null,\r\n            PrimarySuburb: null,\r\n            PrimaryState: null,\r\n            InvalidPrimaryAddress: null,\r\n            DeliveryAvailable: null,\r\n            DeliveryPrice: null,\r\n            DeliveryPriceErrorCode: null,\r\n            DeliveryDistance: null,\r\n            PickupLocationName: null,\r\n        }\r\n        dispatch(selectedDeliveryStore.updateDeliveryAction(updateSelectedDelivery));\r\n    }\r\n\r\n    const doGetDeliveryPrice = async () => {\r\n        if (isNil(pickupLocations) || pickupLocations.length == 0) return;\r\n\r\n        let selectedLocation = pickupLocations.find(m => m.IsSelected);\r\n        if (selectedLocation == null) return;\r\n\r\n\r\n        let request: deliveryModel.IGetPriceRequest = {\r\n            Country: selectedDeliveryFromStore?.Country?.code || \"\",\r\n            DeliveryAddress: differentDeliveryAddress.fullAddress,\r\n            DeliveryState: differentDeliveryAddress.state,\r\n            DeliveryPostcode: differentDeliveryAddress.postcode,\r\n            DeliverySuburb: differentDeliveryAddress.suburb,\r\n            PickupAddress: selectedLocation.LocationAddress || \"\",\r\n            PickupState: selectedLocation.LocationState || \"\",\r\n            PickupPostcode: selectedLocation.LocationPostcode || \"\",\r\n            PickupSuburb: selectedLocation.LocationSuburb || \"\",\r\n            CustomerType: customerTypeFromStore || \"\",\r\n            VariantName: selectedVehicleFromStore.VariantName || \"\",\r\n            VehicleSubTotal: selectedVehicleFromStore?.Subtotal || 0,\r\n        };\r\n\r\n        let priceResponse = await locationService.getDeliveryPrice(request);\r\n        if (priceResponse.status) {\r\n            let priceResponseData = priceResponse.data;\r\n\r\n            let deliveryAddressAvailabe: deliveryModel.IDeliveryAddressAvailableDetails = {\r\n                PickupLocationAvailable: null,\r\n                DeliveryAvailable: priceResponseData.deliveryAvailable,\r\n                Distance: priceResponseData.distance,\r\n                DeliveryPrice: priceResponseData.deliveryPrice || 0,\r\n                DeliveryPriceError: priceResponseData.deliveryPriceErrorCode,\r\n            };\r\n            setDifferentDeliveryAddressAvailabeDetails(deliveryAddressAvailabe);\r\n\r\n            let updatedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n                ...selectedDeliveryFromStore,\r\n                SelectedDeliveryFullAddress: differentDeliveryAddress.fullAddress,\r\n                SelectedDeliverySuburb: differentDeliveryAddress.suburb,\r\n                SelectedDeliveryPostcode: differentDeliveryAddress.postcode,\r\n                SelectedDeliveryState: differentDeliveryAddress.state,\r\n                DeliveryPrice: priceResponseData.deliveryPrice,\r\n                DeliveryDistance: priceResponseData.distance,\r\n                DeliveryAvailable: priceResponseData.deliveryAvailable,\r\n                DeliveryPriceErrorCode: priceResponse.deliveryPriceErrorCode,\r\n            }\r\n\r\n            dispatch(selectedDeliveryStore.updateDeliveryAction(updatedDelivery));\r\n\r\n        }\r\n\r\n    }\r\n\r\n\r\n\r\n    const getHomeDeliveryPrice = () => {\r\n        //if regional +different address, from differentDeliveryAddressPrice\r\n        //if regional and same primary address, show the price in pickup location store\r\n        if (pageState.DifferentDeliveryAddress) {\r\n            if (differentDeliveryAddressAvailabeDetails.DeliveryPriceError != \"\") {\r\n                return rdHelper.currencyFormatWithZeroBlank(differentDeliveryAddressAvailabeDetails.DeliveryPrice);\r\n            }\r\n            else {\r\n                return rdHelper.currencyFormatWithZeroBlank(differentDeliveryAddressAvailabeDetails.DeliveryPrice);  //show include if price is 0\r\n            }\r\n        }\r\n        else {\r\n            if (primaryAddressAvailabeDetails.DeliveryPriceError != \"\") {\r\n                return rdHelper.currencyFormatWithZeroBlank(primaryAddressAvailabeDetails.DeliveryPrice);\r\n            }\r\n            else {\r\n                return rdHelper.currencyFormatWithZeroBlank(primaryAddressAvailabeDetails.DeliveryPrice);  //show include if price is 0\r\n            }\r\n        }\r\n    }\r\n\r\n    const homeDeliverOptionTemplate = () => {\r\n        if (primaryAddressAvailabeDetails?.DeliveryAvailable) {\r\n            return (\r\n                <Button data-dtm=\"checkout:taking delivery\"\r\n                    className={pageState?.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery ? 'stat-button-link variant-btn selected' : 'stat-button-link variant-btn'}\r\n                    onClick={() => {\r\n                        handleDeliveryType(rdEnum.enumDeliveryOptions.HomeDelivery);\r\n                    }}\r\n                >\r\n                    <span>{rdEnum.enumDeliveryOptions.HomeDelivery}</span>\r\n                    <span>{getHomeDeliveryPrice()}</span>\r\n                </Button>\r\n            );\r\n        }\r\n        return (<></>);\r\n    }\r\n\r\n\r\n\r\n\r\n    const handleFocus = () => {\r\n        setIsFocused(true);\r\n    };\r\n\r\n    const handleBlur = (e: any) => {\r\n        if (e.target.value != '' ) {\r\n            setIsFocused(true)\r\n        } else {\r\n            setIsFocused(false)\r\n        }\r\n    };\r\n\r\n    const handleRegoFocus = () => {\r\n        setIsRegoFocused(true);\r\n    };\r\n\r\n    const handleRegoBlur = (e: any) => {\r\n        // if (isNil(differentDeliveryAddress?.fullAddress) || differentDeliveryAddress?.fullAddress == '') {\r\n        //     setIsRegoFocused(false);\r\n        // }\r\n        if (e.target.value != '') {\r\n            setIsRegoFocused(true);\r\n        } else {\r\n            setIsRegoFocused(false);\r\n        }\r\n    };\r\n\r\n    const eligibleForPickupLocation = (): boolean => {\r\n        let pickupAvailable: boolean = primaryAddressAvailabeDetails.PickupLocationAvailable || false;\r\n        return pickupAvailable && !isNil(pickupLocations) && pickupLocations.length > 0;\r\n\r\n    }\r\n\r\n\r\n\r\n    const eligibleNoteTemplate = () => {\r\n\r\n        let hasInStoreEligible = false;\r\n        let hasDeliveryEligible = false\r\n\r\n        if (pickupLocationDataLoadingStatus == rdEnum.enumProcessingStatus.Processed) {\r\n            if (eligibleForPickupLocation()) {\r\n                hasInStoreEligible = true;\r\n            }\r\n        }\r\n\r\n        hasDeliveryEligible = primaryAddressAvailabeDetails.DeliveryAvailable || false;\r\n\r\n        //if (pageState.DeliveryOption == rdEnum.enumDeliveryOptions.Pickup && primaryAddressAvailabeDetails.DeliveryAvailable) {\r\n        //    hasDeliveryEligible = true;\r\n        //}\r\n        //else if (pageState.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery\r\n        //    && pageState.DifferentDeliveryAddress\r\n        //    && differentDeliveryAddressAvailabeDetails.DeliveryAvailable) {\r\n        //    hasDeliveryEligible = true;\r\n        //}\r\n\r\n        if (hasInStoreEligible && hasDeliveryEligible) {\r\n            return (\r\n                <p className='fine-note' style={{ marginTop: pageInvalidState.InvalidPrimaryAddress ? '1rem' : '8px' }}>You are eligible for in-store collection or regional delivery</p>\r\n            );\r\n        }\r\n        else if (hasInStoreEligible && !hasDeliveryEligible) {\r\n            return (\r\n                <p className='fine-note' style={{ marginTop: pageInvalidState.InvalidPrimaryAddress ? '1rem' : '8px' }}>You are eligible for in-store collection</p>\r\n            );\r\n        }\r\n        else if (!hasInStoreEligible && hasDeliveryEligible) {\r\n            return (\r\n                <p className='fine-note' style={{ marginTop: pageInvalidState.InvalidPrimaryAddress ? '1rem' : '8px' }}>This address is only eligible for Regional Delivery</p>\r\n            );\r\n        }\r\n\r\n        return (<></>)\r\n\r\n    }\r\n\r\n\r\n    return (\r\n        <div className='checkout-container'>\r\n            <div className='delivery-container'>\r\n                <h3 className='main-page-section-title'>TAKING DELIVERY</h3>\r\n                <p className='delivery-desc'>Enter your primary address to help us determine accurate on-road pricing along with available delivery options.</p>\r\n                {/*primary address*/}\r\n                <span className=\"p-input-icon-left\">\r\n                    {\r\n                        pageState.Country == rdEnum.enumCountryCode.Australia\r\n                            ?\r\n                            <img className=\"image\" src={`${getCMSAssets()}/checkout/AU.svg`} />\r\n                            :\r\n                            <img className=\"image\" src={`${getCMSAssets()}/checkout/NZ.svg`} />\r\n                    }\r\n                    <div className='input-item'>\r\n                        <span className=\"wrapper-box\">\r\n                            <AutoComplete\r\n                                {...{ autoComplete: \"new\" }}\r\n                                inputRef={inputRef}\r\n                                onFocus={handleFocus}\r\n                                onBlur={handleBlur}\r\n                                field=\"fullAddress\"\r\n                                className=\"address-input\"\r\n                                placeholder=\"\"\r\n                                inputClassName=\"stat-input-field\"\r\n                                value={primaryAddress}\r\n                                suggestions={addressList}\r\n                                completeMethod={(e: any) => { doGetAddress(e); }}\r\n                                onSelect={(e: any) => {\r\n                                    onAddressSelect(e);\r\n                                }}\r\n                                onChange={(e: any) => {\r\n                                    onAddressChange(e);\r\n                                    //setPageInvalidState({...pageInvalidState, InvalidPickupLocation: false})\r\n                                }}\r\n                            />\r\n                            {/*onChange={(e: any) => { onAddressChange(e); }}*/}\r\n                            <label htmlFor=\"myInput\" className={isFocused ? 'autocomplete focused' : 'autocomplete'}>Primary Address</label>\r\n                        </span>\r\n                        {eligibleNoteTemplate()}\r\n                        {pageInvalidState.InvalidPrimaryAddress ? (\r\n                            <div className=\"text-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>Primary Address is required.</div>\r\n                        )\r\n                        : pageInvalidState.InvalidPrimaryPostcode ? (\r\n                            <div className=\"text-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>Primary Postcode is required.</div>\r\n                        )\r\n                            : pageState.Country == rdEnum.enumCountryCode.Australia && pageInvalidState.InvalidPrimaryState ? (\r\n                                <div className=\"text-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>You can only enter {pageState.State} address or refresh page to re-select state.</div>\r\n                            )\r\n                                : <></>\r\n                        }\r\n                    </div>\r\n                    {!isNil(primaryAddress) && !isNil(primaryAddress.fullAddress) && primaryAddress.fullAddress != \"\" && (\r\n                        <img className=\"image-success\"\r\n                            src={`${getCMSAssets()}/checkout/tick.svg`}\r\n                        />\r\n                    )}\r\n                </span>\r\n                {\r\n                    pickupLocationDataLoadingStatus == rdEnum.enumProcessingStatus.Processed && !pageInvalidState.InvalidPrimaryAddress && !pageInvalidState.InvalidPrimaryPostcode\r\n                        ?\r\n                        <div className='preferred-location-container'>\r\n                            {/* <span>Preferred option</span> */}\r\n\r\n                            <div className='variant-btn-panel'>\r\n                                {eligibleForPickupLocation() && (\r\n                                    <Button data-dtm=\"checkout:taking delivery\"\r\n                                        className={pageState?.DeliveryOption == rdEnum.enumDeliveryOptions.Pickup ? 'stat-button-link variant-btn selected' : 'stat-button-link variant-btn'}\r\n                                        onClick={() => {\r\n                                            handleDeliveryType(rdEnum.enumDeliveryOptions.Pickup);\r\n                                        }}\r\n                                    >\r\n                                        <span>{rdEnum.enumDeliveryOptionsDisplayName.Pickup}</span>\r\n                                    </Button>\r\n                                )}\r\n                                {homeDeliverOptionTemplate()}\r\n                            </div>\r\n\r\n                            {\r\n                                pageState.DeliveryOption == rdEnum.enumDeliveryOptions.Pickup && !pageInvalidState.InvalidPrimaryAddress\r\n                                    && primaryAddressAvailabeDetails.PickupLocationAvailable && !isNil(pickupLocations) && pickupLocations.length > 0\r\n                                    ?\r\n                                    <>\r\n                                        <h6>Pick-up location</h6>\r\n                                        {pickupLocations.map((item: deliveryModel.IPickupLocation, index: number) => {\r\n                                            return (\r\n                                                <div className='card-info-selection' key={\"location_\" + index}>\r\n                                                    <Card\r\n                                                        style={{\r\n                                                            padding: '.3rem',\r\n                                                            border: pageState.PickupAddressConfirm ? '2px solid #282828' : '1px solid #d2d2d2'\r\n                                                        }}\r\n                                                    >\r\n                                                        <div className='location-top'>\r\n                                                            <div className='location-top-inner'>\r\n                                                                <Checkbox\r\n                                                                    inputRef={locationCheckboxRef} \r\n                                                                    name=\"chkPickupAddress\"\r\n                                                                    inputId={\"location_\" + item.LocationName}\r\n                                                                    onChange={(e: any) => {\r\n                                                                        setPageState({\r\n                                                                            ...pageState,\r\n                                                                            PickupAddressConfirm: e.checked,\r\n                                                                        })\r\n\r\n                                                                        setPageInvalidState({ ...pageInvalidState, InvalidPickupLocation: false });\r\n                                                                    }}\r\n                                                                    checked={pageState?.PickupAddressConfirm}\r\n                                                                ></Checkbox>\r\n                                                                <label htmlFor={\"location_\" + item.LocationName} className=\"location_name\">{item.LocationName}</label>\r\n                                                            </div>\r\n                                                            <label htmlFor={\"location_\" + item.LocationName} className=\"location_distance\">{item.Distance} km</label>\r\n                                                        </div>\r\n                                                        <label className='location-address' htmlFor={\"location_\" + item.LocationName}>\r\n                                                            <span>{item.LocationAddress}</span>\r\n                                                        </label>\r\n                                                    </Card>\r\n                                                </div>\r\n                                            );\r\n\r\n                                        })}\r\n                                        {pageInvalidState.InvalidPickupLocation && (\r\n                                            <div className=\"text-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>Please select pick up location.</div>\r\n                                        )}\r\n                                    </>\r\n                                    :\r\n                                    <></>\r\n                            }\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                }\r\n                {\r\n                    pickupLocationDataLoadingStatus == rdEnum.enumProcessingStatus.Processed\r\n                        && pageState.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery && !pageInvalidState.InvalidPrimaryAddress && !pageInvalidState.InvalidPrimaryPostcode\r\n                        ?\r\n                        (\r\n                            <div className=\"delivery-address-wrapper\">\r\n                                <div className=\"different-delivery-address\">\r\n                                    <Checkbox\r\n                                        inputRef={differentAddressCheckboxRef} \r\n                                        name=\"chkDifferentDelivaryAddress\"\r\n                                        inputId=\"chkDifferentDelivaryAddress\"\r\n                                        onChange={(e: any) => {\r\n                                            setPageState({\r\n                                                ...pageState,\r\n                                                DifferentDeliveryAddress: e.checked,\r\n                                            })\r\n                                            if (e.checked) {\r\n\r\n                                                setPageInvalidState({\r\n                                                    ...pageInvalidState,\r\n                                                    InvalidDeliveryState: primaryAddress?.state != differentDeliveryAddress?.state\r\n                                                });\r\n\r\n                                                let updatedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n                                                    ...selectedDeliveryFromStore,\r\n                                                    SelectedDeliveryFullAddress: differentDeliveryAddress?.fullAddress,\r\n                                                    SelectedDeliveryPostcode: differentDeliveryAddress?.postcode,\r\n                                                    SelectedDeliverySuburb: differentDeliveryAddress?.suburb,\r\n                                                    SelectedDeliveryState: differentDeliveryAddress?.state,\r\n                                                    DeliveryPrice: primaryAddressAvailabeDetails.DeliveryPrice,\r\n                                                    DeliveryDistance: primaryAddressAvailabeDetails.Distance,\r\n                                                };\r\n                                                dispatch(selectedDeliveryStore.updateDeliveryAction(updatedDelivery));\r\n                                            }\r\n                                            else {\r\n                                                setPageInvalidState({ ...pageInvalidState, InvalidDeliveryState: false });\r\n\r\n                                                let updatedDelivery: selectedConfigModel.ISelectedDelivery = {\r\n                                                    ...selectedDeliveryFromStore,\r\n                                                    SelectedDeliveryFullAddress: primaryAddress?.fullAddress,\r\n                                                    SelectedDeliveryPostcode: primaryAddress?.postcode,\r\n                                                    SelectedDeliverySuburb: primaryAddress?.suburb,\r\n                                                    SelectedDeliveryState: primaryAddress?.state,\r\n                                                    DeliveryDistance: primaryAddressAvailabeDetails.Distance,\r\n                                                    DeliveryPrice: primaryAddressAvailabeDetails.DeliveryPrice,\r\n                                                };\r\n                                                dispatch(selectedDeliveryStore.updateDeliveryAction(updatedDelivery));\r\n                                            }\r\n                                        }}\r\n                                        checked={pageState?.DifferentDeliveryAddress}\r\n                                    ></Checkbox>\r\n                                    <label htmlFor=\"chkDifferentDelivaryAddress\" className=\"p-checkbox-label\">\r\n                                        I would like my vehicle delivered to a location that is different to my primary address. This will re-calculate your delivery fee.\r\n                                    </label>\r\n                                </div>\r\n                                {pageState.DifferentDeliveryAddress && (\r\n                                    <span className=\"p-input-icon-left regional-delivery\">\r\n                                        {\r\n                                            selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                                ?\r\n                                                <img className=\"image\" src={`${getCMSAssets()}/checkout/AU.svg`} />\r\n                                                :\r\n                                                <img className=\"image\" src={`${getCMSAssets()}/checkout/NZ.svg`} />\r\n                                        }\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <AutoComplete\r\n                                                    inputRef={regionalInputRef}\r\n                                                    {...{ autoComplete: \"new\" }}\r\n                                                    onFocus={handleRegoFocus}\r\n                                                    onBlur={handleRegoBlur}\r\n                                                    field=\"fullAddress\"\r\n                                                    className=\"address-input\"\r\n                                                    placeholder=\"\"\r\n                                                    value={differentDeliveryAddress}\r\n                                                    suggestions={addressList}\r\n                                                    completeMethod={(e: any) => {\r\n                                                        doGetAddress(e);\r\n                                                    }}\r\n                                                    onSelect={(e: any) => { \r\n                                                        onDeliveryAddressSelect(e)     \r\n                                                    }}\r\n                                                    onChange={(e: any) => { onDeliveryAddressChange(e); }}\r\n                                                />\r\n                                                <label htmlFor=\"myInput\" className={isRegoFocused ? 'autocomplete focused' : 'autocomplete'}>Delivery Address</label>\r\n                                            </span>\r\n                                            {pageInvalidState.InvalidDeliveryAddress && (\r\n                                                <div className=\"text-error\" style={{ marginTop: \"10px\", marginBottom: \"5px\" }}>Delivery Address is required.</div>\r\n                                            )}\r\n                                        </div>\r\n                                        {!isNil(differentDeliveryAddress) && !isNil(differentDeliveryAddress.fullAddress) && differentDeliveryAddress.fullAddress != \"\" && (\r\n                                            <img className=\"image-success\" src={`${getCMSAssets()}/checkout/tick.svg`}\r\n                                            />\r\n                                        )}\r\n\r\n                                    </span>\r\n                                )}\r\n                            </div>\r\n                        )\r\n                        : (<></>)\r\n                }\r\n\r\n            </div>\r\n            {showDeliveryAddressError()}\r\n        </div>\r\n    )\r\n});\r\n\r\nexport default Delivery","import * as checkOutWaitlstViewModel from 'model/ICheckoutWaitlistViewModel';\r\nimport * as deliveryModel from 'model/IDelivery';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as configModel from 'model/IUserSelectedConfig';\r\n\r\nexport const getCheckoutInitPageState = (): checkOutWaitlstViewModel.ICheckoutWaitlistProps => {\r\n    let isDev = `${process.env.REACT_APP_DevModel}`;\r\n    if (isDev == \"1\") {\r\n        let initPageState: checkOutWaitlstViewModel.ICheckoutWaitlistProps = {\r\n            businessname: \"\",\r\n            abn: \"\",\r\n            firstname: \"sharon\",\r\n            lastname: \"huang\",\r\n            email: \"SharonH@resultsdirect.com.au\",\r\n            confirmEmail: \"SharonH@resultsdirect.com.au\",\r\n            mobile: \"1234567901\",\r\n            address: \"43 Dalgety Street\",\r\n            address2: \"ccc\",\r\n            suburb: \"Oakleigh\",\r\n            states: null,\r\n            postcode: \"3166\",\r\n            agreement: true,\r\n            comment: \"\",\r\n            invalidBusinessname: false,\r\n            invalidABN: false,\r\n            invalidABNLength: false,\r\n            invalidFirstname: false,\r\n            invalidLastname: false,\r\n            invalidEmail: false,\r\n            invalidConfirmEmail: false,\r\n            invalidMobile: false,\r\n            invalidAddress: false,\r\n            invalidSuburb: false,\r\n            emailMismatch: false,\r\n            emailDuplicated: false,\r\n            invalidAgreement: false,\r\n            invalidState: false,\r\n            invalidPostcode: false\r\n        };\r\n        return initPageState;\r\n    }\r\n    else {\r\n        let initPageState: checkOutWaitlstViewModel.ICheckoutWaitlistProps = {\r\n            businessname: \"\",\r\n            abn: \"\",\r\n            firstname: \"\",\r\n            lastname: \"\",\r\n            email: \"\",\r\n            confirmEmail: \"\",\r\n            mobile: \"\",\r\n            address: \"\",\r\n            address2: \"\",\r\n            suburb: \"\",\r\n            states: null,\r\n            postcode: \"\",\r\n            agreement: true,\r\n            comment: \"\",\r\n            invalidBusinessname: false,\r\n            invalidABN: false,\r\n            invalidABNLength: false,\r\n            invalidFirstname: false,\r\n            invalidLastname: false,\r\n            invalidEmail: false,\r\n            invalidConfirmEmail: false,\r\n            invalidMobile: false,\r\n            invalidAddress: false,\r\n            invalidSuburb: false,\r\n            emailMismatch: false,\r\n            emailDuplicated: false,\r\n            invalidAgreement: false,\r\n            invalidState: false,\r\n            invalidPostcode: false\r\n        };\r\n        return initPageState;\r\n    }\r\n\r\n\r\n};\r\n\r\nexport const getOrderInitState = (): orderModel.IOrderRequest => {\r\n    let initState: orderModel.IOrderRequest = {\r\n        Country: \"\",\r\n        State: null,\r\n        VariantName: \"\",\r\n        VariantPrice: null,\r\n        ExteriorName: \"\",\r\n        ExteriorPrice: null,\r\n        InteriorName: \"\",\r\n        InteriorPrice: null,\r\n        VehicleImages: [],\r\n        VehicleThumbnail: null,\r\n        Options: null,\r\n        DeliveryLocationState: null,\r\n        DeliveryLocationSuburb: null,\r\n        DeliveryLocationPostcode: null,\r\n        DeliveryLocationAddress: null,\r\n        DeliveryOption: null,\r\n        PickupLocationName: null,\r\n        Available: null,\r\n        PaymentOption: null,\r\n        DriveawayCost: null,\r\n        Finance: null,\r\n        Email: null,\r\n        FirstName: null,\r\n        LastName: null,\r\n        Mobile: null,\r\n        ABN: null,\r\n        BusinessName: null,\r\n        CustomerCountry: null,\r\n        CustomerType: null,\r\n        BillingAddress: null,\r\n        BillingSuburb: null,\r\n        BillingPostcode: null,\r\n        BillingState: null,\r\n        RegoAddress: null,\r\n        RegoSuburb: null,\r\n        RegoPostcode: null,\r\n        RegoState: null,\r\n        NameOnCreditCard: null,\r\n        PrivacyStatement: null,\r\n        RDAcountID: null,\r\n        RDPaymentID: null,\r\n        OrderID: null,\r\n        YanaOrderReservationID: null,\r\n        YanaOrderReservationNo: null,\r\n        YanaOrderID: null,\r\n        YanaOrderNo: null,\r\n        YanaCustomerID: null,\r\n        YanaCustomerNo: null,\r\n        FromLinkSource: null,\r\n        PaymentHistory: null,\r\n        DownPayment: null,\r\n        PaymentDueDate: null,\r\n        FinalPaymentAmount: null,\r\n        Total: null,\r\n        Balance: null,\r\n        PaymentAmount: null,\r\n        Comments: null\r\n    };\r\n\r\n    return initState;\r\n}\r\n\r\n\r\nexport const getPaymentInitState = (): checkOutWaitlstViewModel.IPaymentProps => {\r\n    let isDev = `${process.env.REACT_APP_DevModel}`;\r\n    if (isDev == \"1\") {\r\n        let initPaymentState: checkOutWaitlstViewModel.IPaymentProps = {\r\n            nameOnCard: \"sharon\",\r\n            cardNumber: \"5555555555554444\",\r\n            expiryMonth: null,\r\n            expiryYear: null,\r\n            cvv: \"737\",\r\n            invalidNameOnCard: false,\r\n            invalidCardNumber: false,\r\n            invalidExpiryMonth: false,\r\n            invalidExpiryYear: false,\r\n            invalidCVV: false,\r\n        };\r\n        return initPaymentState;\r\n\r\n    }\r\n    else {\r\n        let initPaymentState: checkOutWaitlstViewModel.IPaymentProps = {\r\n            nameOnCard: \"\",\r\n            cardNumber: \"\",\r\n            expiryMonth: null,\r\n            expiryYear: null,\r\n            cvv: \"\",\r\n            invalidNameOnCard: false,\r\n            invalidCardNumber: false,\r\n            invalidExpiryMonth: false,\r\n            invalidExpiryYear: false,\r\n            invalidCVV: false,\r\n        };\r\n        return initPaymentState;\r\n    }\r\n}\r\n\r\nexport const getDeliveryInitState = (): deliveryModel.IDelivery => {\r\n    let initState: deliveryModel.IDelivery = {\r\n        Country: \"\",\r\n        State: \"\",\r\n        //PrimaryAddress: \"\",\r\n        //PrimaryPostcode: \"\",\r\n        //PrimarySuburb: \"\",\r\n        //PrimaryState: \"\",\r\n        //PickupLocations: [],\r\n        DeliveryOption: \"\",\r\n        DifferentDeliveryAddress: null,\r\n        //DeliveryAddress: \"\",\r\n        //DeliverySuburb: \"\",\r\n        //DeliveryPostcode: \"\",\r\n        //DeliveryState: \"\",\r\n        PickupAddressConfirm: null,\r\n        //DeliveryAvailable: null,\r\n        //DeliveryPrice: null,\r\n        //DeliveryDistance: null,\r\n    };\r\n\r\n    return initState;\r\n\r\n}\r\n\r\nexport const getInitDeliveryAddress = (): deliveryModel.IDeliveryAddress => {\r\n    let initState: deliveryModel.IDeliveryAddress = {\r\n        fullAddress: \"\",\r\n        postcode: \"\",\r\n        suburb: \"\",\r\n        state: \"\",\r\n    };\r\n\r\n    return initState;\r\n}\r\n\r\nexport const getInitDeliveryAddressAvailableDetails = (): deliveryModel.IDeliveryAddressAvailableDetails => {\r\n    let initState: deliveryModel.IDeliveryAddressAvailableDetails = {\r\n        PickupLocationAvailable: null,\r\n        DeliveryAvailable: null,\r\n        Distance: null,\r\n        DeliveryPrice: null,\r\n        DeliveryPriceError: null,\r\n    };\r\n\r\n    return initState;\r\n}\r\n\r\n\r\n\r\nexport const getInitInvalidDelivery = (): deliveryModel.IInvalidDelivery => {\r\n    let initState: deliveryModel.IInvalidDelivery = {\r\n        InvalidDeliveryType: false,\r\n        InvalidPrimaryAddress: false,\r\n        InvalidPrimaryPostcode: false,\r\n        InvalidPrimaryState: false,\r\n        InvalidPickupLocation: false,\r\n        InvalidDeliveryAddress: false,\r\n        InvalidDeliveryPostcode: false,\r\n        InvalidDeliveryState: false,\r\n    };\r\n\r\n    return initState;\r\n}\r\n\r\nexport const getAdyenInitState = (): checkOutWaitlstViewModel.IAdyenSession => {\r\n    let initState: checkOutWaitlstViewModel.IAdyenSession = {\r\n        SessionID: null,\r\n        SessionData: null,\r\n        SessionResult: null,\r\n        ResultCode: null,\r\n        ErrorMessage: null\r\n    };\r\n\r\n    return initState;\r\n}\r\n","import { getFrontendUrl, getCMSAssets } from 'helpers/Uri'\r\nimport React from 'react'\r\nimport { useNavigate } from 'react-router-dom'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\n\r\nconst NoInventoryReminder = () => {\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n\r\n    const navigate = useNavigate();\r\n\r\n    const handleToInventoryPage = () => {\r\n        let url = `${getFrontendUrl()}/inventory?inventory?shopfront=1`;\r\n        //let url = `${getFrontendUrl()}/inventory?variant=${selectedVehicleFromStore.VariantName}`;\r\n        //url += `&exterior=${selectedVehicleFromStore.Exterior}&interior=${selectedVehicleFromStore.Interior}`;\r\n        //url += `&outOfStockBoxLocation=1`;  \r\n        navigate(url);\r\n    }\r\n\r\n    return (\r\n        <div className='inventory-unavailable-reminder-container'>\r\n            <div className='inventory-unavailable-reminder'>\r\n                {/* <p>\r\n                    The configuration you have\r\n                </p>\r\n                <p>\r\n                    selected is currently exhausted\r\n                </p> */}\r\n                <p>\r\n                    Your design is currently sold out, but you can continue and join a waitlist. There are a selection of configurations available sooner\r\n                </p>\r\n\r\n                <div className='search-inventory stat-text-link' onClick={() => handleToInventoryPage()} data-dtm=\"checkout:announcement\">\r\n                    <h5>\r\n                        View Available Inventory\r\n                    </h5>\r\n                    <img alt='' src={`${getCMSAssets()}/home/arrow-white.svg`} />\r\n                </div>\r\n            </div>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default NoInventoryReminder","import { getBackendPath } from 'helpers/Uri';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as checkOutViewModel from 'model/ICheckoutWaitlistViewModel';\r\nimport * as rdHelper from 'helpers/Uri';\r\nexport const payment = async (\r\n    payment: any,\r\n    currency: any,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            payment: payment,\r\n            currency: currency,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/payment`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getNewPaymentIDs = async (\r\n    orderID: any,\r\n    Country: any,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            orderID: orderID,\r\n            Country: Country,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Payment/get-new-payment-ids`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const savePaymentLog = async (\r\n    order: orderModel.IOrderRequest,\r\n    adyenSession: checkOutViewModel.IAdyenSession\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            order: order,\r\n            adyenSession: adyenSession,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Payment/save-payment-log`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n//export const getNewRDTransactionID = async (\r\n//    orderID: any,\r\n//    Country: any,\r\n//): Promise<any> => {\r\n//    const requestOptions: any = {\r\n//        method: 'POST',\r\n//        headers: {\r\n//            'Content-Type': 'application/json',\r\n//        },\r\n//        body: JSON.stringify({\r\n//            orderID: orderID,\r\n//            Country: Country,\r\n//        }),\r\n//        credentials: 'include',\r\n//    };\r\n//    const response = await fetch(\r\n//        `${getBackendPath()}/api/Payment/get-new-rdtransactionid`,\r\n//        requestOptions,\r\n//    );\r\n//    const json = await response.json();\r\n//    return json;\r\n//};","import { getBackendPath } from 'helpers/Uri';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as checkOutViewModel from 'model/ICheckoutWaitlistViewModel';\r\nimport * as orderCustomerDetailsModel from 'model/IOrderCustomerDetails';\r\nimport * as contractModel from 'model/IContract';\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport * as docModel from 'model/IDocuments';\r\nimport * as callBackRequestModel from 'model/ICallBackRequest';\r\nimport * as financeStatusModel from 'model/IFinanceStatus';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const placeReservation = async (\r\n    order: orderModel.IOrderRequest,\r\n    hasLogin: boolean,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            order: order,\r\n            hasLogin: hasLogin\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/place-reservation`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const placeOrder = async (\r\n    order: orderModel.IOrderRequest,\r\n    adyenSession: checkOutViewModel.IAdyenSession\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            order: order,\r\n            adyenSession: adyenSession\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/place-order`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getOrderByYanaCustomerID = async (\r\n    customerID: string,\r\n    customerNo: string,\r\n    nzCustomerID: string,\r\n    nzCustomerNo: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            customerID: customerID,\r\n            customerNo: customerNo,\r\n            nzCustomerID: nzCustomerID,\r\n            nzCustomerNo: nzCustomerNo\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-orders-by-customerID`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n//export const getMyOrderByYanaCustomerID = async (\r\n//    customerID: string,\r\n//    customerNo: string,\r\n//): Promise<any> => {\r\n//    const requestOptions: any = {\r\n//        method: 'POST',\r\n//        headers: {\r\n//            'Content-Type': 'application/json',\r\n//        },\r\n//        body: JSON.stringify({\r\n//            customerID: customerID,\r\n//            customerNo: customerNo\r\n//        }),\r\n//        credentials: 'include',\r\n//    };\r\n//    const response = await fetch(\r\n//        `${getBackendPath()}/api/Order/get-my-orders-by-customerID`,\r\n//        requestOptions,\r\n//    );\r\n//    const json = await response.json();\r\n//    rdHelper.noActivityRedirectHomePage(json);\r\n//    return json;\r\n//};\r\n\r\n\r\nexport const getOrderByRDOrderID = async (\r\n    rdOrderID: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            rdOrderID: rdOrderID,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-orders-by-rd-orderid`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getOrderDetailsByYanaIDs = async (\r\n    yanaCustomerID: string,\r\n    yanaCustomerNo: string,\r\n    yanaOrderID: string,\r\n    yanaOrderNo: string,\r\n    country: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            yanaCustomerID: yanaCustomerID,\r\n            yanaCustomerNo: yanaCustomerNo,\r\n            yanaOrderID: yanaOrderID,\r\n            yanaOrderNo: yanaOrderNo,\r\n            country: country\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-order-details-by-yana-ids`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getMyOrderDetailsByYanaIDs = async (\r\n    yanaCustomerID: string,\r\n    yanaCustomerNo: string,\r\n    yanaOrderID: string,\r\n    yanaOrderNo: string\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            yanaCustomerID: yanaCustomerID,\r\n            yanaCustomerNo: yanaCustomerNo,\r\n            yanaOrderID: yanaOrderID,\r\n            yanaOrderNo: yanaOrderNo\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-my-order-details-by-yana-ids`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const updateOrderDetails = async (\r\n    customerDetails: orderCustomerDetailsModel.IOrderCustomerDetails,\r\n    docs: docModel.IDocumentItem[],\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            customerDetails: customerDetails,\r\n            docs: docs\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/update-order-details`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const confirmContract = async (\r\n    contract: contractModel.IContract\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(contract),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/sign-contract`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getScheduleAvailabeTime = async (\r\n    scheduleDelivery: scheduleDeliveryModel.IOrderScheduleDelivery\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(scheduleDelivery),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-available-delivery-time`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const saveScheduleAvailabeTime = async (\r\n    scheduleDelivery: scheduleDeliveryModel.IOrderScheduleDelivery\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(scheduleDelivery),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/save-schedule-delivery`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\n//export const retryPayment = async (\r\n//    order: orderModel.IOrderRequest\r\n//): Promise<any> => {\r\n//    const requestOptions: any = {\r\n//        method: 'POST',\r\n//        headers: {\r\n//            'Content-Type': 'application/json',\r\n//        },\r\n//        body: JSON.stringify({\r\n//            order: order,\r\n//        }),\r\n//        credentials: 'include',\r\n//    };\r\n//    const response = await fetch(\r\n//        `${getBackendPath()}/api/Order/retry-payment`,\r\n//        requestOptions,\r\n//    );\r\n//    const json = await response.json();\r\n//    return json;\r\n//};\r\n\r\n\r\nexport const saveRetryPayment = async (\r\n    order: orderModel.IOrderRequest,\r\n    adyenSession: checkOutViewModel.IAdyenSession\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            order: order,\r\n            adyenSession: adyenSession,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/save-retry-payment`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getLMCT = async (\r\n    Country: string,\r\n    State: string\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            Country: Country,\r\n            State: State,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-lmct`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const callBackRequest = async (\r\n    requestData: callBackRequestModel.ICallBackRequest\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(requestData),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/call-back-request`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getFinanceStatus = async (\r\n    requestData: financeStatusModel.IFinanceStatus\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(requestData),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-finance-status`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getReservationStatus = async (\r\n    orderID: any\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({ orderID: orderID}),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/get-reservation-status`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\n\r\nexport const setReservationCountdown = async (\r\n    country: any\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({ country: country }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/set-reservation-countdown`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const extendReservationCountdown = async (\r\n    country: any\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({ country: country }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Order/extend-reservation-countdown`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { useState } from 'react'\r\n\r\nconst TermsConditionsDialog = ({props}: any) => {\r\n\r\n    const [isShowDialog, setIsShowDialog] = useState(false);\r\n\r\n    const onDialogOpen = () => {\r\n        setIsShowDialog(true);\r\n    }\r\n\r\n    const onDialogHide = () => {\r\n        setIsShowDialog(false);\r\n    }\r\n\r\n    const toJetchange = () => {\r\n        window.open('https://jetcharge.com.au/standard-installation/');\r\n    }\r\n\r\n    const toChargeFox = () => {\r\n        window.open('https://www.chargefox.com/legal/terms-conditions');\r\n    }\r\n\r\n    const toChargeFoxNZ = () => {\r\n        window.open('https://charge.net.nz/terms-conditions');\r\n    }\r\n\r\n    const toOwnershipService = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/ownership-service');\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {\r\n                props == 'special'\r\n                ?\r\n                    <div className='checkbox-privacy-btn stat-text-link' onClick={() => onDialogOpen()} data-dtm=\"checkout\">\r\n                    <span>Order Terms & Conditions</span>\r\n                    <img alt='' src={`${getCMSAssets()}/checkout/right-black-arrow.svg`} />\r\n                </div>\r\n                    :\r\n                    <a style={{ cursor: 'pointer', textDecoration: 'underline' }} className=\"stat-text-link\" data-dtm=\"checkout\"\r\n                        onClick={() => onDialogOpen()}>Order Terms & Conditions</a>\r\n            }\r\n\r\n             <Dialog className='terms-conditions-dialog' visible={isShowDialog} position='bottom' onHide={() => onDialogHide()} draggable={false} resizable={true}>\r\n                <div className='terms-conditions-container'>\r\n                    <h6>IMPORTANT INFORMATION</h6>\r\n                    <div className='terms-conditions-title'>\r\n                        <h1>ORDER TERMS </h1>\r\n                        <h1>& CONDITIONS </h1>\r\n                    </div>\r\n                  \r\n                    <div className='terms-conditions-content'>\r\n                        <p>\r\n                            These order terms (“Terms”) should be reviewed before you submit your order for the vehicle you have configured in the vehicle configurator (“Configured Vehicle”). \r\n                        </p>\r\n                        <p>\r\n                            Subject to availability and these Terms, General Motors Australia and New Zealand Pty Ltd / General Motors New Zealand Limited (hereinafter referred to as “Cadillac”) is offering to let you reserve the Configured Vehicle (“Order”).\r\n                        </p>\r\n                        <div className='terms-conditions-section'>\r\n                            <h5>DEPOSIT</h5>\r\n                            <p>\r\n                                A deposit of $1,000.00 (“Security Deposit”) is payable to Cadillac at the time of submitting your Order. The Deposit will be processed when you submit your Order. \r\n                            </p>\r\n                        </div>\r\n                        <div className='terms-conditions-section'>\r\n                            <h5>CANCELLATIONS</h5>\r\n                            <p>\r\n                                If you change your mind, you may cancel your Order by contacting Cadillac on 1800 CADILLAC (223 455) / au.care@cadillac.com (Australia) or 0800 CADILLAC (223 455) / nz.care@cadillac.com directly or via your account once your account has been set up and before you sign the Contract of Sale.\r\n                            </p>\r\n                            <p>\r\n                                The Security Deposit is fully refundable until you sign the Contract of Sale, after which the Security Deposit will be subject to the terms of the Contract of Sale. Security Deposits will only be refunded to the same credit or debit card that was used to pay the Security Deposit. Once a refund request is confirmed as received by Cadillac, please allow up to 5 business days for a cancellation and refund to be processed. \r\n                            </p>\r\n                            <span>\r\n                                Cadillac reserves the right to cancel your Order if:\r\n                            </span>\r\n                            <ul>\r\n                                <li>(a)\tyou do not complete the setup of your account within 10 days of you receiving account set up details; or</li>\r\n                                <li>(b)\tyou do not sign the Contract of Sale within 10 days of receiving the final Contract of Sale.</li>\r\n                            </ul>\r\n                            <p>\r\n                                If Cadillac cancels your Order pursuant to these Terms, Cadillac will take reasonable steps to inform you and will refund the Security Deposit to you in full within 10 business days.\r\n                            </p>\r\n                        </div>\r\n                        <div className='terms-conditions-section'>\r\n                            <h5>ACCOUNT SET UP</h5>\r\n                            <p>\r\n                                By proceeding with and submitting your Order you acknowledge that you will be required to provide Cadillac with your information and set up an account. Details for how you can set up an account will be sent to your nominated email address, or can be obtained by contacting Cadillac on 1800 CADILLAC (223 455) / au.care@cadillac.com (Australia) or 0800 CADILLAC (223 455) / nz.care@cadillac.com. The details in this account are required to track the status of your vehicle order and prepare and issue you with a Contract of Sale.\r\n                            </p>\r\n                        </div>\r\n                        <div className='terms-conditions-section'>\r\n                            <h5>SUBJECT TO CHANGE</h5>\r\n                            <p>\r\n                                Vehicle design, equipment, features, specifications, options and availability of the Configured Vehicle may be subject to change and are not guaranteed at the time of placing your Order.\r\n                            </p>\r\n                        </div> \r\n                        <div className='terms-conditions-section'>\r\n                            <h5>Cadillac Authorised Service Centres – important notification</h5>\r\n                            <p>\r\n                            Cadillac authorised services centres are currently limited in Australia and New Zealand and may not be available near to your location. Whilst Cadillac continues to establish a permanent presence in Australia and New Zealand, the network of authorised Cadillac service centres will continue to expand. To see a list of available locations for all service centres in Australia and New Zealand, please visit this <a onClick={() => toOwnershipService()}>link</a> to view the available service facilities prior to completing the purchase of a Cadillac vehicle. \r\n                            </p>\r\n                        </div> \r\n                        <div className='terms-conditions-section'>\r\n                            <h5>DELIVERY</h5>\r\n                            <p>\r\n                                The estimated date of delivery provided when you submit your Order is an estimate only and is subject to change once Cadillac has processed your order. The estimated delivery date may also be impacted by supply shortages and shipping delays outside of Cadillac’s control.\r\n                            </p>\r\n                        </div> \r\n                        <div className='terms-conditions-section'>\r\n                            <h5>CONTRACT OF SALE</h5>\r\n                            <p>\r\n                                These Terms are not a vehicle purchase agreement and submitting your Order does not guarantee delivery of any vehicle within any particular time period. These Terms do not require you to make a vehicle purchase.\r\n                            </p>\r\n                            <p>\r\n                                In order to purchase the Configured Vehicle, Cadillac will provide you with a contract of sale (“Contract of Sale”). The Contract of Sale will be made available to you via your account. The Contract of Sale must be signed by you within 10 days. Once the Contract of Sale is signed by you, Cadillac will provide you with confirmation of your Order.\r\n                            </p>\r\n                        </div> \r\n                        <div className='terms-conditions-section'>\r\n                            <h5>THIRD PARTIES</h5>\r\n                            <p>\r\n                                Cadillac may engage third parties to perform all or any portion of its obligations relating to these Terms.\r\n                            </p>\r\n                        </div> \r\n                        {/* <div className='terms-conditions-section'>\r\n                            <h5>MISCELLANEOUS</h5>\r\n                            <p>\r\n                                Cadillac may engage third parties to perform all or any portion of its obligations relating to these Terms.\r\n                            </p>\r\n                            <p>\r\n                                These Terms are governed by the state and federal laws of Australia / laws of New Zealand.\r\n                            </p>\r\n                        </div>  */}\r\n                        <div className='terms-conditions-section'>\r\n                            <h5>CHARGING PARTNERS</h5>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title nation'>\r\n                                    Australia\r\n                                </p>\r\n                                <p className='sub-section-title'>\r\n                                    Offers\r\n                                </p>\r\n                                <p>\r\n                                    When you purchase a Cadillac vehicle your vehicle comes with complimentary access to Chargefox public chargers for a period of 1 year from the date you receive your Cadillac vehicle.\r\n                                </p>\r\n                                <span>\r\n                                    When placing this order you may have selected one of the following Cadillac charging offers:\r\n                                </span>\r\n                                <ol className='list-number'>\r\n                                    <li>two (2) years of complimentary access to Chargefox public chargers (in addition to the first year of public complimentary charging offered on all Cadillac vehicles); or</li>\r\n                                    <li>one (1) complimentary 7.4kW Autel MaxiCharger AC Lite home charging unit provided and installed by JET Charge.</li>\r\n                                </ol>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Information sharing with charging partners\r\n                                </p>\r\n                                <p>\r\n                                    In order to take advantage of the Cadillac charging offers, Cadillac will be required to share the Vehicle Identification Number (VIN) and your name and contact details with its third party electric vehicle charging partners so that the partner can provide you with the charging offer. The charging partners are Chargefox Pty Ltd (public charging services) and JET Charge Pty Ltd (home charging services).\r\n                                </p>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Terms and conditions of charging partners\r\n                                </p>\r\n                                <p>\r\n                                    Please be aware that you will be required to agree to the terms and conditions, fair use policy and privacy policy of each of these charging partners in order to receive their charging services.\r\n                                </p>\r\n                                <p>\r\n                                    If one of our charging partners becomes insolvent or otherwise ceases to operate, Cadillac will contact you and the applicable offer will come to an end.\r\n                                </p>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Home charging offer\r\n                                </p>\r\n                                <p>\r\n                                    If you elected to install a complimentary home charger, Cadillac will be required to share your first and last name, provided email address and post code with JET Charge to enable them to contact you and provide you with this home charging hardware and installation.\r\n                                </p>\r\n                                <p>\r\n                                    JET Charge will be in touch with you directly via email to arrange a virtual assessment – the provision of relevant images of your property to JET Charge (or a site visit if required). This option includes complimentary standard installation. The standard installation scope includes a single-phase, dedicated electrical circuit with up to 15 metres of copper cable, installation of an isolation switch near the charging unit and installation of electrical circuit protection. More information on standard installation with JET Charge can be found here. If the infrastructure available at your home does not meet the criteria for a standard installation, your installation will be treated as nonstandard. Cadillac will cover costs for nonstandard installs up to the value of a standard installation, and JET Charge will provide you with a quote for any additional costs or variations. Apartment installations are excluded from this offer.\r\n                                </p>\r\n                                <p>\r\n                                    You acknowledge and agree that JET Charge is solely responsible for providing the home charging unit and the installation services in accordance with their terms and conditions, which can be found <a onClick={() => toJetchange()}>here</a>. Cadillac is not liable for any loss, cost, expense, liability or demand of any nature whatsoever caused directly or indirectly by the home charging unit or any services provided by JET Charge.\r\n                                </p>\r\n                                <p>\r\n                                    Cadillac makes no representations or warranties as to the suitability or compatibility of JET Charge products or services for your requirements.\r\n                                </p>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Public charging offer – Australia \r\n                                </p>\r\n                                <p>\r\n                                    All Cadillacs come with 12 months free public charging. Cadillac will be required to share your personal or company details such as, the Vehicle Identification Number (VIN), registration and your selected charging inclusion (1 or 3 years) with Chargefox Pty Ltd (Chargefox) to enable them to provide you with the charging offer. In order to activate this offer with Chargefox, you need to register with Chargefox as a Chargefox user and may also be required to share additional information and must agree with their terms and conditions at time of activating this charging inclusion (typically this will be when you take delivery of your vehicle and download their application). This also applies if you opt for an additional 2 years of public charging (totalling 3 years). Please contact the Cadillac Sales team prior to your delivery to opt out of the default charging inclusion. Chargefox subscriptions will remain with the vehicle in the event of a change of ownership. A subscription can only be activated by one nominated owner at any time.\r\n                                </p>\r\n                                <p>\r\n                                    Notwithstanding that your purchase of a Cadillac vehicle entitles you to complimentary charging, if you connect your vehicle to a charger within the Chargefox network and leave the car connected to the charger once it is fully charged which prevents other customers from using the charger, you may be charged idle fees in line with Chargefox’s terms and conditions. In addition to these terms and conditions, your use of the Chargefox network is subject to the Chargefox network terms and conditions, which can be accessed <a onClick={() => toChargeFox()}>here</a>.\r\n                                </p>\r\n                                <p>\r\n                                    For the avoidance of any doubt, you are solely responsible to pay such idle fees, Cadillac will not pay idle fees.\r\n                                </p>\r\n                                <p>\r\n                                    The complimentary charging offer must not be used for commercial purposes including if you operate any form of rideshare business using your Cadillac vehicle, including but not limited to Uber, DiDi, taxi, courier or other commercial use or any other use that is not in accordance with Chargefox’s fair use policy or network terms and conditions. Chargefox will require payment for charging services and/or suspend your registration if you attempt to charge your Cadillac vehicle whilst using your vehicle or Chargefox network for the aforementioned purposes. Please refer to Chargefox terms and conditions for further details.\r\n                                </p>\r\n                                <p>\r\n                                    You acknowledge and agree that the charging services are provided by Chargefox through its Chargefox network of chargers. Cadillac is not liable for any loss, cost, expense, liability or demand of any nature whatsoever caused directly or indirectly by any public charging facilities or any services provided by Chargefox.\r\n                                </p>\r\n                            </div>\r\n\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title nation'>\r\n                                    New Zealand\r\n                                </p>\r\n                                <p className='sub-section-title'>\r\n                                    Offers\r\n                                </p>\r\n                                <p>\r\n                                    When you purchase a Cadillac vehicle, it comes with $400 complimentary charging credit for use exclusively across the ChargeNet national public charging network. \r\n                                </p>\r\n                                <p>\r\n                                    If you do not want to take up this offer please ensure that you contact Cadillac support via 0800 CADILLAC (223 455) or nz.care@cadillac.\r\n                                </p>\r\n                                <span>\r\n                                    When placing this order you will have selected one of the following Cadillac charging offers: \r\n                                </span>\r\n                                <ol className='list-number'>\r\n                                    <li>$800 complimentary charging credit for use exclusively across the ChargeNet national public charging network (in addition to the standard $400 complimentary charging credit offered on all Cadillac vehicles); or</li>\r\n                                    <li>one (1) complimentary 7.4kW Evnex E2 home charging unit provided. This includes a standard installation by Evnex. See below for further details.</li>\r\n                                </ol>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Information sharing with charging partners\r\n                                </p>\r\n                                <p>\r\n                                    In order to take advantage of the Cadillac charging offers, Cadillac may be required to share the Vehicle Identification Number (<b>VIN</b>), order number, registration and/or your name and contact details with its third-party electric vehicle charging partners so that the partner can provide you with the charging offer. The charging partners are ChargeNet NZ Limited (public charging services) and Evnex Limited (home charging services). \r\n                                </p>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Terms and conditions of charging partners\r\n                                </p>\r\n                                <p>\r\n                                    Please be aware that you will be required to agree to the terms and conditions, fair use policy and privacy policy of each of these charging partners in order to receive their charging services.\r\n                                </p>\r\n                                <p>\r\n                                    If one of our charging partners becomes insolvent or otherwise ceases to operate, Cadillac will contact you and the applicable offer will come to an end. \r\n                                </p>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Home charging offer – New Zealand \r\n                                </p>\r\n                                <p>\r\n                                    If you elected to install a home charger, Evnex will be in touch with you directly to arrange a remote site survey form via email. If the infrastructure available at your home address is capable of supporting a home charging unit, you will then be eligible to receive a complimentary home charging unit with the standard installation services. Standard installation is defined by Evnex and includes a cable run up to 25m between your distribution board and home charger, installation of circuit protection and home overload protection in the available space in your distribution board, mounting of the charger onto an internal or external wall, and charger testing, commissioning and certification. You will be required to agree to Evnex’s terms and conditions, privacy policy and download an app to use this home charger.\r\n                                </p>\r\n                                <p>\r\n                                    Any costs associated with the variation to these standard installation inclusions, or any improvements to your home infrastructure to accommodate the home charging unit are your sole responsibility. Payment will be arranged directly with Evnex.\r\n                                </p>\r\n                                <p>\r\n                                    You acknowledge and agree that Evnex is solely responsible for providing the home charger and the installation services. Cadillac is not liable for any loss, cost, expense, liability or demand of any nature whatsoever caused directly or indirectly by the home charging unit or any services provided by Evnex. If you encounter any issues with the ChargeNet services or products you will be required to contact ChargeNet.\r\n                                </p>\r\n                                <p>\r\n                                    Cadillac makes no representations or warranties as to the suitability or compatibility of Evnex products or services for your requirements.\r\n                                </p>\r\n                                <p>\r\n                                    Standard installation exclusions:\r\n                                    <ul className='list-circle'>\r\n                                        <li>\r\n                                        \tNo ceiling or underfloor access - *If there is no access it will result in a variation\r\n                                        </li>\r\n                                        <li>\r\n                                        \tUpgrades to infrastructure\r\n                                        </li>\r\n                                        <li>\r\n                                        \tUpgrades to switchboard\r\n                                        </li>\r\n                                        <li>\r\n                                        \tAdditional cable over 25m\r\n                                        </li>\r\n                                        <li>\r\n                                        \tCases where the charger is installed away from the building that the main switchboard is located within\r\n                                        </li>\r\n                                        <li>\r\n                                        \tRectifying of non-compliant existing works\r\n                                        </li>\r\n                                        <li>\r\n                                        \tWork that takes place in commercial buildings \r\n                                        </li>\r\n                                        <li>\r\n                                        \tTag-outs for apartment buildings (RFID) \r\n                                        </li>\r\n                                        <li>\r\n                                        \tExtensive travel cost\r\n                                        </li>\r\n                                    </ul>\r\n                                </p>\r\n                            </div>\r\n                            <div className='sub-section-box'>\r\n                                <p className='sub-section-title'>\r\n                                    Public charging offer – New Zealand \r\n                                </p>\r\n                                <p>\r\n                                    All Cadillac vehicles come with $400 complimentary charging credit for use exclusively across the ChargeNet national public charging network. Cadillac may be required to share your personal or company details such as, the Vehicle Identification Number (VIN), registration and your selected charging inclusion ($400 or $1,200 complimentary charging credit) with ChargeNet NZ Limited (ChargeNet) to enable them to provide you with the charging offer. In order to activate this offer with ChargeNet, you need to register with ChargeNet as a ChargeNet user and may also be required to share additional information with ChargeNet and you will be required to agree with ChargeNet’s terms and conditions at time of activating this charging inclusion (typically this will be when you take delivery of your vehicle and download their application).\r\n                                </p>\r\n                                <p>\r\n                                    If you do not want to proceed with this offer, please contact the Cadillac Sales team prior to your delivery to opt out of the default charging inclusion. ChargeNet credit will remain with the RFID (key fob) issued to you at the time of delivery. Once this RFID is linked to your account, the credit moves to (and is tracked in) your account. Credit is not transferable in the event of a change of ownership. You can continue to use credit assigned to your ChargeNet account independent of a transfer of ownership. Cadillac does not manage this process.\r\n                                </p>\r\n                                <p>\r\n                                    Notwithstanding that your purchase of a Cadillac vehicle entitles you to complimentary charging credit, if you connect your vehicle to a charger within the ChargeNet network and leave the car connected to the charger once it is fully charged (which prevents other customers from using the charger), you may be charged overstay fees in line with ChargeNet’s terms and conditions. In addition to these terms and conditions, your use of the ChargeNet network is subject to the ChargeNet network terms and conditions, which can be accessed <a onClick={() => toChargeFoxNZ()}>here</a>.\r\n                                </p>\r\n                                <p>\r\n                                    For the avoidance of any doubt, you are solely responsible to pay such overstay fees, Cadillac will not pay for overstay idle fees.\r\n                                </p>\r\n                                <p>\r\n                                    You acknowledge and agree that the charging services are provided by ChargeNet through its ChargeNet network of chargers. Cadillac is not liable for any loss, cost, expense, liability or demand of any nature whatsoever caused directly or indirectly by any public charging facilities or any services provided by ChargeNet. If you encounter any issues with the ChargeNet services or products you will be required to contact ChargeNet. \r\n                                </p>\r\n                            </div>\r\n                        </div> \r\n                        <br/>\r\n                        <br/>\r\n                        <p>\r\n                            These Terms are governed by the state and federal laws of Australia / laws of New Zealand.\r\n                        </p>\r\n                    </div>\r\n                </div>\r\n            </Dialog>\r\n\r\n        </>\r\n    )\r\n}\r\n\r\nexport default TermsConditionsDialog","/*\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\r\n\r\nimport { LogLevel } from \"@azure/msal-browser\";\r\n\r\n/**\r\n * Enter here the user flows and custom policies for your B2C application\r\n * To learn more about user flows, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/user-flow-overview\r\n * To learn more about custom policies, visit: https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-overview\r\n */\r\nexport const b2cPolicies = {\r\n    names: {\r\n        signUpSignIn: `${process.env.REACT_APP_SignUpSignIn}`,\r\n        forgotPassword: `${process.env.REACT_APP_ForgotPassword}`\r\n    },\r\n    authorities: {\r\n        signUpSignIn: {\r\n            authority: `${process.env.REACT_APP_SignUpSignIn_Url}`,\r\n        },\r\n        forgotPassword: {\r\n            authority: `${process.env.REACT_APP_ForgotPassword_Url}`,\r\n        }\r\n    },\r\n    authorityDomain: `${process.env.REACT_APP_Domain}`,\r\n};\r\n\r\n\r\n/**\r\n * Configuration object to be passed to MSAL instance on creation. \r\n * For a full list of MSAL.js configuration parameters, visit:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/configuration.md \r\n */\r\nexport const msalConfig = {\r\n    auth: {\r\n        clientId: `${process.env.REACT_APP_ClientId}`, // This is the ONLY mandatory field that you need to supply.\r\n        authority: b2cPolicies.authorities.signUpSignIn.authority, // Choose SUSI as your default authority.\r\n        knownAuthorities: [b2cPolicies.authorityDomain], // Mark your B2C tenant's domain as trusted.\r\n        redirectUri: `${process.env.REACT_APP_IAMReturnLink}`, // You must register this URI on Azure Portal/App Registration. Defaults to window.location.origin\r\n        postLogoutRedirectUri: `/${process.env.REACT_APP_VIRTUAL_DIR_FRONTEND}`, // Indicates the page to navigate after logout.\r\n        navigateToLoginRequestUrl: false, // If \"true\", will navigate back to the original request location before processing the auth code response.\r\n    },\r\n    cache: {\r\n        cacheLocation: 'sessionStorage', // 'sessionStorage', // Configures cache location. \"sessionStorage\" is more secure, but \"localStorage\" gives you SSO between tabs.\r\n        storeAuthStateInCookie: true, // Set this to \"true\" if you are having issues on IE11 or Edge\r\n    },\r\n    system: {\r\n        loggerOptions: {\r\n            loggerCallback: (level: any, message: any, containsPii: any) => {\r\n                if (containsPii) {\r\n                    return;\r\n                }\r\n                switch (level) {\r\n                    case LogLevel.Error:\r\n                        console.error(message);\r\n                        return;\r\n                    case LogLevel.Info:\r\n                        console.info(message);\r\n                        return;\r\n                    case LogLevel.Verbose:\r\n                        console.debug(message);\r\n                        return;\r\n                    case LogLevel.Warning:\r\n                        console.warn(message);\r\n                        return;\r\n                    default:\r\n                        return;\r\n                }\r\n            },\r\n        },\r\n    },\r\n};\r\n\r\n/**\r\n * Add here the endpoints and scopes when obtaining an access token for protected web APIs. For more information, see:\r\n * https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-browser/docs/resources-and-scopes.md\r\n */\r\nexport const protectedResources = {\r\n    apiTodoList: {\r\n        endpoint: 'https://localhost:5001/api/hello',\r\n        scopes: {\r\n            read: [`${process.env.REACT_APP_ScopeRead}`],\r\n            write: [`${process.env.REACT_APP_ScopeWrite}`],\r\n        },\r\n    },\r\n};\r\n\r\n/**\r\n * Scopes you add here will be prompted for user consent during sign-in.\r\n * By default, MSAL.js will add OIDC scopes (openid, profile, email) to any login request.\r\n * For more information about OIDC scopes, visit: \r\n * https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes\r\n */\r\nexport const loginRequest = {\r\n    scopes: [...protectedResources.apiTodoList.scopes.read, ...protectedResources.apiTodoList.scopes.write],\r\n};\r\n","import { useMsal, useIsAuthenticated } from '@azure/msal-react';\r\nimport { InteractionType, InteractionStatus } from '@azure/msal-browser';\r\nimport { loginRequest } from 'helpers/authConfig';\r\nimport { isNil } from 'lodash';\r\n\r\nexport const useAzureB2C = () => {\r\n    const { instance } = useMsal(); \r\n    const isAuthenticated = useIsAuthenticated();\r\n\r\n    const signIn = () => {\r\n        instance.loginRedirect(loginRequest).catch((error) => console.log(error));\r\n    }\r\n    const signOut = () => {\r\n        instance.logoutRedirect();\r\n    }\r\n\r\n    const isAuthAndLogin = (inProgress:any) => {\r\n        if (inProgress !== InteractionStatus.None) return;\r\n        if (!isAuthenticated && instance.getAllAccounts.length === 0) {\r\n            instance.loginRedirect(loginRequest).catch((error) => console.log(error));\r\n            return false;\r\n        } else {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    const isAuth= (inProgress: any) => {\r\n        if (inProgress !== InteractionStatus.None) return;\r\n        if (!isAuthenticated && instance.getAllAccounts.length === 0) {\r\n            return false;\r\n        } else {\r\n            return true;\r\n        }\r\n    }\r\n\r\n    return {\r\n        signIn,\r\n        signOut,\r\n        isAuth,\r\n        isAuthAndLogin\r\n    };\r\n}\r\n","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { useState } from 'react'\r\n\r\nconst AccountGuidelines = () => {\r\n\r\n    const [isShowDialog, setIsShowDialog] = useState(false);\r\n\r\n    const onDialogOpen = () => {\r\n        setIsShowDialog(true);\r\n    }\r\n\r\n    const onDialogHide = () => {\r\n        setIsShowDialog(false);\r\n    }\r\n\r\n    const toPrivacy = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/privacy')\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className='checkbox-privacy-btn stat-text-link' data-dtm=\"checkout\" onClick={() => onDialogOpen()}>\r\n                <span>Account Guidelines</span>\r\n                <img alt='' src={`${getCMSAssets()}/checkout/right-black-arrow.svg`} />\r\n            </div>\r\n               \r\n             <Dialog className='account-guidelines-dialog' visible={isShowDialog} position='bottom' onHide={() => onDialogHide()} draggable={false} resizable={true}>\r\n                <div className='account-guidelines-container'>\r\n                    {/* <h6>IMPORTANT INFORMATION</h6> */}\r\n                    <div className='account-guidelines-title'>\r\n                        <h1>ACCOUNT GUIDELINES</h1>\r\n                    </div>\r\n                  \r\n                    <div className='account-guidelines-content'>\r\n                        <p>\r\n                            These Guidelines govern your use of accounts across certain websites, mobile apps, and connected vehicle services provided by General Motors Australia and New Zealand Pty Ltd (Australia) \r\n                            and General Motors New Zealand Ltd (New Zealand), companies incorporated under the laws of Australia and New Zealand, and its affiliates (collectively “GM”, “our”,  “we”, or “Cadillac.”)  \r\n                            By creating or using an account, you agree and accept the following, subject to our <i>Privacy Statement</i> found at  <a onClick={() => toPrivacy()}>www.cadillacanz.com/au-en/privacy</a>. If you do not agree you may not create or use an account.\r\n                        </p>\r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Account</h5>\r\n                            <p>\r\n                                In order to access secure features on our websites, mobile apps, and through connected vehicle services you may be asked to create an account.\r\n                            </p>\r\n                            <p>\r\n                                Please provide accurate and complete information when creating an account. During the creation process, we may send you notifications to verify your e-mail address and telephone number. We may also use your contact information to send you notices and to verify purchases and send you important alerts. Data or messaging rates may apply when receiving notifications via SMS.  For more details, see our Privacy Statement at  <a onClick={() => toPrivacy()}>https://www.cadillacanz.com/au-en/privacy</a>.   \r\n                            </p>\r\n                            <p>\r\n                                You are solely responsible for any activity that occurs with your account, and you must keep your account password secure.  \r\n                            </p>\r\n                            <p>\r\n                                After creating your account, you should notify GM immediately of any breach of security or unauthorized use. GM will not be liable for any losses caused by any unauthorized use of your account. However, you may be liable for losses to GM or other parties due to such unauthorized use.\r\n                            </p>\r\n                            <p>\r\n                                Accounts may be unavailable from time to time and functionally may vary depending on the country where you are attempting to access your account. If you change your country of residence you should notify us and may need to setup a new account where available.\r\n                            </p>\r\n                            <p>\r\n                                If GM reasonably suspects a risk of fraud or misuse by a third party accessing your account, GM may immediately suspend your access.\r\n                            </p>\r\n                        </div>\r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Eligibility</h5>\r\n                            <p>\r\n                                By creating an account, you represent and warrant that you have reached the age of 18 and have full legal capacity to enter into binding contracts. If you do not satisfy these eligibility requirements, you may not create or use an account. You are not permitted to use any account until such time as you satisfy these eligibility requirements. \r\n                            </p>                         \r\n                        </div>\r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Security and Customer Identity</h5>\r\n                            <p>\r\n                                You may need to set up security passwords, passwords, security questions, and similar information (\"Security Information\").\r\n                            </p>\r\n                            <span>You agree to:</span>\r\n                            <ul>\r\n                                <li>not share your security information with anyone;</li>\r\n                                <li>not write down your safety information in a way that could be understood by others; and</li>\r\n                                <li>ensure no one sees you enter your security details when making a payment on any website or application, which is associated with GM.</li>\r\n                            </ul>\r\n                            <span>Let us know as soon as possible if:</span>\r\n                            <ul>\r\n                                <li>someone else knows your security information or you believe they do;</li>\r\n                                <li>you discover errors or unauthorized payments; or</li>\r\n                                <li>you believe someone else used or tried to use your payment method.</li>\r\n                            </ul>\r\n                        </div>\r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Additional Terms</h5>\r\n                            <p>\r\n                                On occasion, GM may provide additional terms for products and services that you may obtain through websites, mobile apps, or connected vehicle services provided by GM. When you accept these additional terms, they will govern products and services that you receive through your account.  \r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>License</h5>\r\n                            <p>\r\n                                Subject to your compliance with these Guidelines, GM grants you a limited, personal, noncommercial (unless a permitted use in connection with Fleet Vehicles), non-transferable, non-sublicensable, revocable, non-exclusive license to create and lawfully use an account for its intended purpose as described in these Guidelines.  You agree to abide by this license when creating and using an account. GM reserves all rights not expressly granted.\r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Restrictions </h5>\r\n                            <ul>\r\n                                <li>You agree not to access an account through any technology or any unauthorized means other than your personal user interactions with our websites, mobile apps, and connected vehicle services;</li>\r\n                                <li>You agree not to use or launch any automated systems, including without limitation, \"robots,\" \"spiders,\" or \"offline readers,\" to accesses our websites, mobile apps, or connected vehicle services through an account; </li>\r\n                                <li>You agree not to use communication systems provided through an account (e.g. SMS text notifications, email alerts, or user comments) to harass other users or for any commercial solicitation; </li>\r\n                                <li>You agree not to circumvent, disable or otherwise interfere with any security-related features or features designed to prevent unauthorized use of an account; and</li>\r\n                                <li>You agree to comply with these Guidelines and all applicable local, national, and international laws and regulations.</li>\r\n                            </ul>\r\n                            <p>\r\n                                Violations of these Guidelines may result in a warning or termination of your account in our sole discretion. \r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Feedback</h5>\r\n                            <p>\r\n                                To help improve the quality of our websites, mobile apps, and connected vehicle services we may provide user feedback channels to allow you to share your experiences.\r\n                            </p>\r\n                            <span>\r\n                                By submitting feedback, you accept the following and agree that you will not use or attempt to use feedback channels for any unlawful purpose, including any purpose that:\r\n                            </span>\r\n                            <ul>\r\n                                <li>Promotes violence, abuse, or harassment to an individual or group of people;</li>\r\n                                <li>Transmits any advertisements, solicitations, schemes, or other unsolicited commercial communications;</li>\r\n                                <li>Encourages child exploitation or otherwise harms minors in any way;</li>\r\n                                <li>Impersonates or otherwise misrepresents your affiliation with any person or entity;</li>\r\n                                <li>Incites illegal or unlawful activities;</li>\r\n                                <li>Violates any third party's intellectual property rights;</li>\r\n                                <li>Infringes any third party's right of privacy; or</li>\r\n                                <li>Unlawfully transmits or uploads any confidential, proprietary or trade secret information.</li>\r\n                            </ul>\r\n                            <p>\r\n                                By submitting feedback, you grant GM a worldwide, non-exclusive, royalty-free license to use, copy, reproduce, process, adapt, modify, publish, transmit, display, and distribute such feedback in any and all media or distribution methods now known or later developed. You agree that this license includes the right for GM to promote and improve our services and make any feedback you submit available to our affiliates and third parties for syndication, broadcast, distribution, promotion, and publication. No compensation will be paid to you with respect to any feedback you submit and your use of our websites, mobile apps, and connected vehicle services are hereby agreed as being sufficient compensation for the rights granted.\r\n                            </p>\r\n                            <p>\r\n                                You acknowledge and agree that you are solely responsible for any feedback you provide, including compliance with applicable laws, rules, and regulations. \r\n                            </p>\r\n                            <p>\r\n                                GM does not take responsibility for any user feedback and does not endorse any user feedback or opinions expressed.\r\n                            </p>\r\n                            <p>\r\n                                GM reserves the right at all times, in its sole discretion and without notice to you, to remove any objectionable feedback and to revoke your account for violating these Guidelines.\r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Third-Party Links</h5>\r\n                            <p>\r\n                                Certain services provided through your account may contain links to third-party websites that are not owned or controlled by GM, including but not limited to links to websites for GM dealers (collectively “Third-Party Website(s).”) GM has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any Third-Party Website. By clicking on links to third-party websites, you expressly relieve GM from all liability arising from your use of any Third-Party Website, or from the content of any Third-Party Website.\r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Warranty Disclaimer</h5>\r\n                            <p>\r\n                                SUBJECT TO ANY NON-EXCLUDABLE CONSUMER GUARANTEES AND OTHER CONSUMER PROTECTION PROVISIONS SET OUT IN THE COMPETITION AND CONSUMER ACT 2010 (CTH) (AUSTRALIA) OR THE CONSUMER GUARANTEES ACT 1993 (NEW ZEALAND) (“NON-EXCLUDABLE CONSUMER GUARANTES”) OR SIMILAR LEGISLATION WHICH CANNOT BE EXCLUDED OR LIMITED, YOU AGREE THAT YOUR USE OF AN ACCOUNT SHALL BE AT YOUR SOLE RISK. TO THE FULLEST EXTENT PERMITTED BY APPLICABLE LAW OR ANY NON-EXCLUDABLE CONSUMER GUARANTEES GM AND THEIR RESPECTIVE AFFILIATES AND THE EMPLOYEES, OFFICERS, DIRECTORS, AND AGENTS THEREOF (COLLECTIVELY “PROVIDER PARTY”) DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED, IN CONNECTION WITH ACCOUNT SERVICES AND YOUR USE THEREOF. GM MAKES NO WARRANTIES OR REPRESENTATIONS ABOUT ACCOUNT SERVICES AND ASSUMES NO LIABILITY OR RESPONSIBILITY FOR ANY (I) ERRORS, MISTAKES, OR INACCURACIES OF CONTENT, (II) PERSONAL INJURY OR PROPERTY DAMAGE, OF ANY NATURE WHATSOEVER, RESULTING FROM YOUR ACCESS TO AND USE OF ACCOUNT SERVICES, (III) ANY UNAUTHORIZED ACCESS TO OR USE OF OUR SECURE SERVERS AND ANY AND ALL PERSONAL INFORMATION AND FINANCIAL INFORMATION STORED THEREIN, (IV) ANY INTERRUPTION, (IV) ANY BUGS, VIRUSES, TROJAN HORSES, OR THE LIKE WHICH MAY BE TRANSMITTED THROUGH ACCOUNT SERVICES BY ANY THIRD-PARTY, OR (V) ANY ERRORS OR OMISSIONS OR FOR ANY LOSS OR DAMAGE OF ANY KIND INCURRED AS A RESULT OF CONTENT POSTED, EMAILED, TRANSMITTED, OR OTHERWISE MADE AVAILABLE THROUGH ACCOUNT SERVICES. \r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Limitation of Liability</h5>\r\n                            <p>\r\n                                SUBJECT TO ANY NON-EXCLUDABLE CONSUMER GUARANTEES AND OTHER APPLICABLE LAW, PROVIDER PARTY SHALL NOT BE LIABLE IN ANY WAY IN CONNECTION WITH ANY ACCOUNT SERVICES FOR ANY INDIRECT, SPECIAL, PUNITIVE, OR CONSEQUENTIAL DAMAGES OR AMOUNTS FOR LOSS OF INCOME, PROFITS, OR SAVINGS ARISING OUT OF OR RELATED TO ACCOUNT SERVICES.  \r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Indemnity</h5>\r\n                            <p>\r\n                                You agree to defend, indemnify and hold harmless GM, and their parent corporations, subsidiaries, officers, directors, employees and agents, from and against any and all claims, damages, obligations, losses, liabilities, reasonable costs or debt, and reasonable expenses (including but not limited to attorney's fees) arising from: (i) your improper, inappropriate or unlawful use  of an account; (ii) your violation of any term of these Guidelines; or (iii) your violation of any third party rights, including without limitation any copyright, trademark, property, publicity or privacy right. This defense and indemnification obligation will survive these Guidelines.\r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Assignment</h5>\r\n                            <p>\r\n                                These Guidelines, and any rights granted hereunder, may not be transferred or assigned by you, but may be assigned by GM without restriction.\r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>General</h5>\r\n                            <p>\r\n                                If any provision of these Guidelines is deemed invalid by a court of competent jurisdiction, the invalidity of such provision shall not affect the validity of the remaining provisions of these Guidelines, which shall remain in full force and effect. No waiver of any term of these Guidelines shall be deemed a further or continuing waiver of such term, and GM's failure to assert any right or provision under these Guidelines shall not constitute a waiver of such right or provision. GM reserves the right to amend these Guidelines at any time and without notice, and it is your responsibility to review these Guidelines for any changes. Your use of an account following any amendment of these Guidelines will signify your assent to and acceptance of any revised terms. \r\n                            </p>\r\n                        </div> \r\n                        <div className='account-guidelines-section'>\r\n                            <h5>Governing Law and Jurisdiction</h5>\r\n                            <p>\r\n                                These Guidelines are governed by the laws of Australia and New Zealand and the Parties agree that the courts of Australia and New Zealand shall have exclusive jurisdiction.\r\n                            </p>\r\n                        </div> \r\n                    </div>\r\n                </div>\r\n            </Dialog>\r\n\r\n        </>\r\n    )\r\n}\r\n\r\nexport default AccountGuidelines","import ScrollToTop from 'components/ScrollToTop'\r\nimport { setCustomerTypeAction } from 'stores/CustomerType';\r\nimport { getCMSAssets, getFrontendUrl, currencyFormatWithBlank } from 'helpers/Uri'\r\nimport { IAppState } from 'model/IAppState';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport { RadioButton } from 'primereact/radiobutton';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport { Button } from 'react-bootstrap';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport IsNumberVerification from 'components/IsNumberVerification';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport AdyenCheckout from '@adyen/adyen-web';\r\nimport '@adyen/adyen-web/dist/adyen.css';\r\nimport { useMsal } from \"@azure/msal-react\";\r\nimport moment from 'moment';\r\nimport SaveDialog from 'pages/Main/checkout/SaveDialog';\r\nimport NoStorageReminder from 'components/NoInventoryReminder';\r\n\r\nimport * as Uri from 'helpers/Uri';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as checkoutHelper from 'businessHelpers/CheckoutHelper';\r\nimport * as commonModel from 'model/ICommon';\r\nimport * as checkOutViewModel from 'model/ICheckoutWaitlistViewModel';\r\nimport * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as interestModel from 'model/IInterest';\r\nimport * as paymentService from 'services/AdyenPayment';\r\nimport * as orderService from 'services/Order';\r\nimport * as interestService from 'services/Interest';\r\nimport * as checkoutCustomerStore from 'stores/CheckoutCustomer';\r\n//import * as orderStore from 'stores/Order';\r\n\r\nimport TermsConditionsDialog from './TermsConditionsDialog';\r\nimport { Dialog } from 'primereact/dialog';\r\n\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\nimport PrivacyPolicyLink from 'components/PrivacyPolicyLink';\r\nimport PrivacyCollectionDialog from './PrivacyCollectionDialog';\r\nimport AccountGuidelines from './AccountGuidelines';\r\nimport { InputTextarea } from 'primereact/inputtextarea';\r\n\r\nconst CheckoutWaitlist = (props: any) => {\r\n    const azureB2C = useAzureB2C();\r\n    const { instance } = useMsal();\r\n    const [isOverflown, setIsOverflown] = useState(false);\r\n\r\n    const textAreaRef = useRef<any>(null);\r\n\r\n    //store variables\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectVehFromStore = useSelector((appState: IAppState) => {\r\n        return appState.selectedVehicle;\r\n    });\r\n    const selectedPaymentOptions = useSelector((appState: IAppState) => {\r\n        return appState.paymentOptions;\r\n    });\r\n    const customerTypeForStore = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n    const checkOutCustomerFromStore = useSelector((state: IAppState) => {\r\n        return state.checkoutCustomer;\r\n    });\r\n    const mainPageNumber = useSelector((state: IAppState) => {\r\n        return state.mainPageNumber.mainPageNumber;\r\n    });\r\n    const driveawayFromStore = useSelector((state: IAppState) => {\r\n        return state.paymentOptions.DriveAwayCost;\r\n    });\r\n    const linkSourceFromStore = useSelector((state: IAppState) => {\r\n        return state?.linkSource;\r\n    });\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n\r\n    const { paymentPageStatus, toConfiguration } = props;\r\n\r\n    const [clientType, setClientType] = useState(rdEnum.enumClientTypes.Private.Code);\r\n\r\n    const saveDiaglogRef = useRef<any>(null);\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n    const watchlistRef = useRef<HTMLDivElement>(null);\r\n    const joinConsentRef1 = useRef<HTMLInputElement>(null);\r\n    const joinConsentRef2 = useRef<HTMLInputElement>(null);\r\n    //const firstNameRef = useRef<HTMLInputElement>(\"\");\r\n\r\n    //const [billingAddresss, setBillingAddresss] = useState(\"\");\r\n    const [pageState, setPageState] = useState<checkOutViewModel.ICheckoutWaitlistProps>(checkoutHelper.getCheckoutInitPageState());\r\n    const [reserverationSubmittingStatus, setReservationSubmittingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n    const [confirmOrderSubmittingStatus, setConfirmOrderSubmittingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n    const [submittingToYana, setSubmittingToYana] = useState(rdEnum.enumProcessingStatus.Init);\r\n\r\n    const [order, setOrder] = useState<orderModel.IOrderRequest>(checkoutHelper.getOrderInitState());\r\n    const [placeReservationMessage, setPlaceReservationMessage] = useState<string>(\"\");\r\n    const [placeOrderMessage, setPlaceOrderMessage] = useState<string>(\"\");\r\n\r\n    const [isShowPaymentPanel, setIsShowPaymentPanel] = useState(false);\r\n\r\n    //adyen drop in way\r\n    const paymentContainer = useRef<HTMLDivElement>(null);\r\n    //const [customCardInstance, setCustomCardInstance] = useState<any>();\r\n    const customCardInstance = useRef<any>(null);\r\n    const [adyenSession, setAdyenSession] = useState<checkOutViewModel.IAdyenSession>(checkoutHelper.getAdyenInitState());\r\n    const [isShowAdyenRetryButton, setIsShowAdyenRetryButton] = useState(false);\r\n    const [adyenFailedMessage, setAdyenFailedMessage] = useState(\"\");\r\n\r\n    //reservation time\r\n    const reservationExpiryMin = 10;\r\n    const reservationExendMaxCount = 2;\r\n    const [reservationCountDownSeconds, setReservationCountDownSeconds] = useState(reservationExpiryMin * 60);   //minutes\r\n    const [reservationCountdownStage, setReservationCountdownStage] = useState(1);\r\n    const [reservationExtendCount, setReservationExtendCount] = useState(0);\r\n    const [showCountdownDialog, setShowCountdownDialog] = useState(false);\r\n\r\n    //LMCT\r\n    const [lmctText, setLMCTText] = useState<string>(\"\");\r\n\r\n\r\n    //show out of stock box\r\n    const [showOutOfStock, setShowOutOfStock] = useState<boolean>(false);\r\n\r\n\r\n    const selectedLocationFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const [confirmed, setConfirmed] = useState({\r\n        confirm: false,\r\n        invalidConfirm: false,\r\n        agreement: false,\r\n    })\r\n\r\n    const paymentErrorMessage = \"Your credit card details have been refused, please re-enter your details.\";\r\n\r\n    //https://github.com/Adyen/adyen-web/blob/c6c19ac646a8a211d0416a462b2c2a2a722eff29/packages/lib/src/language/locales/en-US.json\r\n    const translations = {\r\n        \"en_AU\": {\r\n            \"creditCard.numberField.title\": \"\",\r\n            /* \"creditCard.numberField.title\": \"Card Number *\",*/\r\n            \"creditCard.numberField.placeholder\": \"1234 5678 9012 3456\",\r\n            \"creditCard.expiryDateField.title\": \"\",\r\n            \"creditCard.expiryDateField.placeholder\": \"MM/YY\",\r\n            \"creditCard.cvcField.title\": \"\",\r\n            \"creditCard.cvcField.placeholder\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.4digits\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.3digits\": \"CVV *\",\r\n            \"creditCard.holderName\": \"\",\r\n            \"creditCard.holderName.placeholder\": \"Name on card\",\r\n            \"billingAddress\": \"\",\r\n            \"country\": \"\",\r\n            \"city\": \"\",\r\n            \"city.errors.incomplete\": \"Enter Suburb\",\r\n            \"state\": \"\",\r\n            \"postalCode\": \"\",\r\n            \"postalCode.errors.incomplete\": \"Enter Postcode\",\r\n            \"address\": \"\",\r\n            \"address.enterManually\": \"Address\",\r\n            \"address.errors.incomplete\": \"Enter Address to continue\",\r\n        },\r\n        \"en_NZ\": {\r\n            \"creditCard.numberField.title\": \"\",\r\n            \"creditCard.numberField.placeholder\": \"1234 5678 9012 3456\",\r\n            \"creditCard.expiryDateField.title\": \"\",\r\n            \"creditCard.expiryDateField.placeholder\": \"MM/YY\",\r\n            \"creditCard.cvcField.title\": \"\",\r\n            \"creditCard.cvcField.placeholder\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.4digits\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.3digits\": \"CVV *\",\r\n            \"creditCard.holderName\": \"\",\r\n            \"creditCard.holderName.placeholder\": \"Name on card\",\r\n            \"billingAddress\": \"\",\r\n            \"country\": \"\",\r\n            \"city\": \"\",\r\n            \"city.errors.incomplete\": \"Enter Suburb\",\r\n            \"state\": \"\",\r\n            \"postalCode\": \"\",\r\n            \"postalCode.errors.incomplete\": \"Enter Postcode\",\r\n            \"address\": \"\",\r\n            \"street\": \"\",\r\n            \"address.enterManually\": \"Address\",\r\n            \"address.errors.incomplete\": \"Enter Address to continue\",\r\n            \"houseNumberOrName\": \"\",\r\n        }\r\n    };\r\n\r\n\r\n    useEffect(() => {\r\n        if (selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n            doGetLMCT();\r\n        }\r\n\r\n    }, [selectedDeliveryFromStore?.Country?.code, selectedDeliveryFromStore?.PrimaryState])\r\n\r\n    useEffect(() => {\r\n\r\n        //todo: potential change, \r\n        //1. change vehicle to place a new reservation, show \"Proceed payment\" button\r\n        //2. if vehicle not changed, use same orderid, reservation no, still show payment credeit card section\r\n        //Need to thinking:  do i need to change RD payment id? it's better to change a new payment id as user could have tried one payment, and got failure\r\n        setIsShowPaymentPanel(false);\r\n    }, [selectedDeliveryFromStore, selectVehFromStore, selectedPaymentOptions, customerTypeForStore]);\r\n\r\n    const checkOverflow = () => {\r\n        const textarea = textAreaRef.current;\r\n\r\n        if (textarea) {\r\n            const rowHeight = parseInt(window.getComputedStyle(textarea).lineHeight, 12);\r\n\r\n            const maxVisibleHeight = rowHeight * 8;\r\n            console.log(textarea?.scrollHeight, maxVisibleHeight)\r\n            if (textarea?.scrollHeight > maxVisibleHeight) {\r\n                setIsOverflown(true);\r\n            } else {\r\n                setIsOverflown(false);\r\n            }\r\n        }\r\n    };\r\n\r\n    const doGetLMCT = async () => {\r\n        let country = selectedDeliveryFromStore?.Country?.code || \"\";\r\n        let state = selectedDeliveryFromStore?.PrimaryState;\r\n        if (isNil(state) || state == \"\") {\r\n            state = selectedDeliveryFromStore?.State?.code || \"\";\r\n        }\r\n\r\n        if (country == \"\" || state == \"\") return;\r\n        let response = await orderService.getLMCT(country, state);\r\n        if (response.status) {\r\n            setLMCTText(response.data.partnerLMCT);\r\n        }\r\n        else {\r\n            setLMCTText(\"\");\r\n        }\r\n    }\r\n\r\n\r\n\r\n    const doGetAdyenConfig = () => {\r\n        //console.log(adyenSession.SessionID);\r\n        let env = Uri.getAdyenEnv(selectedDeliveryFromStore?.Country?.code || \"\");\r\n        let configuration = {\r\n            locale: selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.NewZealand ? \"en_NZ\" : \"en_AU\",\r\n            environment: env, // \"test\", // env, //Uri.getAdyenEnv(selectedDeliveryFromStore?.Country?.code),   // Australia: \tlive-au\r\n            clientKey: Uri.getAdyenKey(selectedDeliveryFromStore?.Country?.code || \"\"),\r\n            translations: translations,\r\n            session: {\r\n                id: adyenSession.SessionID, // Unique identifier for the payment session.\r\n                sessionData: adyenSession.SessionData // The payment session data.\r\n            },\r\n            //setStatusAutomatically: false,  //Do not use this flag. We have to a get new session id as RD reference id need be changed for each pay action\r\n            onPaymentCompleted: async (result: any, component: any) => {\r\n                setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n                let localBilling = localStorage.getItem(\"billing\");\r\n                let paymentID = localStorage.getItem(\"paymentID\");\r\n                let strPaymentOrder = localStorage.getItem(\"order\");\r\n                let orderComment = localStorage.getItem(\"ordercomments\");\r\n                //console.log(orderComment);\r\n                let postAdyenSession: checkOutViewModel.IAdyenSession = {\r\n                    SessionID: adyenSession.SessionID,\r\n                    SessionData: result.sessionData,\r\n                    SessionResult: result.sessionResult,\r\n                    ResultCode: result.resultCode,\r\n                    ErrorMessage: null\r\n                };\r\n\r\n                if (!isNil(result)) {\r\n                    if (result.resultCode == \"Authorised\") {\r\n                        setAdyenFailedMessage(\"\");\r\n\r\n                        if (isNil(localBilling) || localBilling == \"\") return;\r\n                        if (isNil(strPaymentOrder) || strPaymentOrder == \"\") return;\r\n                        let billingData: checkOutViewModel.IAdyenTempPaymentData = JSON.parse(localBilling);\r\n                        let paymentOrder: orderModel.IOrderRequest = JSON.parse(strPaymentOrder);\r\n                        let postOrder: orderModel.IOrderRequest = {\r\n                            ...paymentOrder,\r\n                            BillingAddress: billingData.Address1,\r\n                            BillingPostcode: billingData.PostCode,\r\n                            BillingState: billingData.State,\r\n                            BillingSuburb: billingData.Suburb,\r\n                            RDPaymentID: paymentID,\r\n                            NameOnCreditCard: billingData.NameOnCard,\r\n                            Comments: orderComment\r\n                        };\r\n                        //console.log(postOrder);\r\n                        doPlaceOrder(postOrder, postAdyenSession);\r\n\r\n                    }\r\n                    else if (result.resultCode == \"Refused\") {\r\n                        if (isNil(strPaymentOrder) || strPaymentOrder == \"\") return;\r\n                        let paymentOrder: orderModel.IOrderRequest = JSON.parse(strPaymentOrder);\r\n                        let postOrder: orderModel.IOrderRequest = {\r\n                            ...paymentOrder,\r\n                            RDPaymentID: paymentID,\r\n                        };\r\n                        await doSavePaymentLog(postOrder, postAdyenSession);\r\n\r\n                        await doGetPaymentIDs(postOrder?.OrderID, postOrder?.Country);\r\n                        setOrder(postOrder);\r\n                        setAdyenFailedMessage(paymentErrorMessage);\r\n                        setIsShowAdyenRetryButton(true);\r\n                    }\r\n                }\r\n            },\r\n            beforeSubmit: (data: any, component: any, actions: any): Promise<void> => {\r\n                //state or store changed here, are not updated in onPaymentCompleted\r\n                //so have to use local storage to temp store billing data and card holder name.\r\n                let tempData: checkOutViewModel.IAdyenTempPaymentData = {\r\n                    Address1: data.billingAddress.street,\r\n                    Address2: data.billingAddress.houseNumberOrName,\r\n                    PostCode: data.billingAddress.postalCode,\r\n                    Suburb: data.billingAddress.city,\r\n                    State: data.billingAddress.stateOrProvince,\r\n                    NameOnCard: data.paymentMethod.holderName,\r\n                };\r\n                localStorage.setItem(\"billing\", JSON.stringify(tempData));\r\n                setAdyenFailedMessage(\"\");\r\n                setPlaceOrderMessage(\"\");\r\n                return actions.resolve(data);\r\n            },\r\n            //onSubmit: (state: any, element: any)=> {\r\n            //    console.log(state.data);\r\n            //   need to setup payments api on the backend\r\n            //},\r\n            onChange: (state: any, component: any) => {\r\n                //console.log('Form validity:', state.isValid);\r\n                //console.log(state);\r\n                //// Check specific fields\r\n                //if (!state.valid) {\r\n                //    Object.keys(state.valid).forEach(field => {\r\n                //        if (!state.valid[field]) {\r\n                //            console.log(`Invalid field: ${field}`);\r\n                //        }\r\n                //    });\r\n                //}\r\n\r\n                //if (state.data.houseNumberOrName) {\r\n                //    // Make postal code optional\r\n                //    if (state.data.billingAddress.houseNumberOrName === '') {\r\n                //        delete state.data.billingAddress.houseNumberOrName;\r\n                //    }\r\n                //}\r\n\r\n                //console.log(state);\r\n                //setPaymentState(state);\r\n                //console.log(state);\r\n                //console.log(\"state on change.\" + JSON.stringify(state));\r\n                //console.log(\"pageState in validateBillingInfo:\" + JSON.stringify(pageState));\r\n            },\r\n            //onFieldValid: (state: any) => {\r\n            //    console.log(state);\r\n            //},\r\n            onError: async (error: any, component: any) => {\r\n                let strPaymentOrder = localStorage.getItem(\"order\");\r\n                if (isNil(strPaymentOrder) || strPaymentOrder == \"\") return;\r\n                let paymentOrder: orderModel.IOrderRequest = JSON.parse(strPaymentOrder);\r\n                let paymentID = localStorage.getItem(\"paymentID\");\r\n                let postOrder: orderModel.IOrderRequest = {\r\n                    ...paymentOrder,\r\n                    RDPaymentID: paymentID,\r\n                };\r\n\r\n                let postAdyenSession: checkOutViewModel.IAdyenSession = {\r\n                    SessionID: adyenSession.SessionID,\r\n                    SessionData: adyenSession.SessionData,\r\n                    SessionResult: null,\r\n                    ResultCode: \"Error\",\r\n                    ErrorMessage: error.message\r\n                };\r\n                await doSavePaymentLog(postOrder, postAdyenSession);\r\n\r\n                await doGetPaymentIDs(postOrder?.OrderID, postOrder?.Country);\r\n                setOrder(postOrder);\r\n                setAdyenFailedMessage(paymentErrorMessage);\r\n                setIsShowAdyenRetryButton(true);\r\n\r\n            },\r\n            // Any payment method specific configuration. Find the configuration specific to each payment method:  https://docs.adyen.com/payment-methods\r\n            // For example, this is 3D Secure configuration for cards:\r\n            paymentMethodsConfiguration: {\r\n                card: {\r\n                    hasHolderName: true,\r\n                    holderNameRequired: true,\r\n                    billingAddressRequired: true,\r\n                    //billingAddressAllowedCountries: [\"AU\", \"NZ\"],\r\n                    data: {\r\n                        billingAddress: {\r\n                            country: selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.NewZealand ? \"NZ\" : \"AU\",\r\n                            houseNumberOrName: \"N/A\"\r\n                            //placeholder: {\r\n                            //    //\"postalCode\": \"Postcode\",\r\n                            //    \"postalCode.placeholder\": \"Postcode\",\r\n                            //},\r\n                        },\r\n                        //placeholder: {\r\n                        //    \"postalCode\": \"Postcode\",\r\n                        //},\r\n                    },\r\n                    brands: ['mc', 'visa', 'amex']\r\n                },\r\n                //threeDS2: { // Web Components 4.0.0 and above: sample configuration for the threeDS2 action type\r\n                //    challengeWindowSize: '05'\r\n                //    // Set to any of the following:\r\n                //    // '02': ['390px', '400px'] -  The default window size\r\n                //    // '01': ['250px', '400px']\r\n                //    // '03': ['500px', '600px']\r\n                //    // '04': ['600px', '400px']\r\n                //    // '05': ['100%', '100%']\r\n                //},\r\n            },\r\n            showPayButton: false\r\n        };\r\n\r\n        return configuration;\r\n\r\n    }\r\n\r\n    const doGetPaymentIDs = async (orderID: any, country: any) => {\r\n        let response = await paymentService.getNewPaymentIDs(orderID, country);\r\n        if (response.status) {\r\n            let responseData = response.data;\r\n            setAdyenSession({\r\n                ...adyenSession,\r\n                SessionID: responseData.adyenSessionID,\r\n                SessionData: responseData.adyenSessionData\r\n            });\r\n            localStorage.setItem(\"paymentID\", responseData.rdPaymentTransactionID);\r\n        }\r\n        else {\r\n            localStorage.setItem(\"paymentID\", \"\");\r\n            setAdyenFailedMessage(response.message);\r\n            setAdyenSession(checkoutHelper.getAdyenInitState());\r\n        }\r\n    }\r\n\r\n    const doPlaceOrder = async (order: orderModel.IOrderRequest, adyenSession: checkOutViewModel.IAdyenSession) => {\r\n        setSubmittingToYana(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await orderService.placeOrder(order, adyenSession);\r\n        setSubmittingToYana(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            console.log(response.data);\r\n            let yanaIds = response.data.yanaOrderIDs;\r\n            let paymentID = response.data.rdPaymentTransactionID;\r\n            let country = response.data.orderVehicle.country;\r\n            let url = `${getFrontendUrl()}/order-success/${yanaIds.yanaCustomerID}/${yanaIds.yanaCustomerNo}/${yanaIds.yanaOrderID}/${yanaIds.yanaOrderNo}/${paymentID}`;\r\n            url += `/${country}`;\r\n            //console.log(url);\r\n            navigate(url);\r\n        }\r\n        else {\r\n            setPlaceOrderMessage(response.message);\r\n        }\r\n    }\r\n\r\n    const doSavePaymentLog = async (order: orderModel.IOrderRequest, adyenSession: checkOutViewModel.IAdyenSession) => {\r\n        let response = await paymentService.savePaymentLog(order, adyenSession);\r\n        if (response.status) {\r\n\r\n        }\r\n        else {\r\n\r\n        }\r\n    }\r\n\r\n\r\n    ///init adyen drop-in component\r\n    useEffect(() => {\r\n        let ignore = false;\r\n        const doInitPayment = async (isRefresh: boolean) => {\r\n            let adyenConfig = doGetAdyenConfig();\r\n            const checkout = await AdyenCheckout(adyenConfig);\r\n            if (!isNil(paymentContainer?.current) && !ignore) {\r\n                customCardInstance.current = checkout.create('dropin', {    //securedfields, card,dropin\r\n                    onReady: () => {\r\n                    },\r\n                }).mount(paymentContainer.current);\r\n\r\n                //todo: seems to work, still need to double check\r\n                //if (isRefresh) {\r\n                //    customCardInstance.current.update();\r\n                //    customCardInstance.current.remount();\r\n                //}\r\n\r\n                //setCustomCardInstance(customCard);\r\n            }\r\n        }\r\n\r\n        if (!isNil(adyenSession?.SessionID) && adyenSession?.SessionID != \"\"\r\n            && !isNil(adyenSession?.SessionData) && adyenSession?.SessionData != \"\") {\r\n            if (customCardInstance.current) {\r\n                //console.log(\"refresh adyen\");\r\n                doInitPayment(true);\r\n            }\r\n            else {\r\n                //console.log(\"init payment\");\r\n                doInitPayment(false);\r\n            }\r\n\r\n        }\r\n\r\n        return () => {\r\n            ignore = true;\r\n        }\r\n    }, [paymentContainer.current, adyenSession]);\r\n\r\n    setTimeout(() => {\r\n        const streetRef = document.getElementsByName(\"street\");\r\n        if (streetRef != null && streetRef.length > 0) {\r\n            streetRef[0]?.setAttribute(\"placeHolder\", \"Address\");\r\n        }\r\n        const cityRef = document.getElementsByName(\"city\");\r\n        if (cityRef != null && cityRef.length > 0) {\r\n            cityRef[0]?.setAttribute(\"placeHolder\", \"Suburb\");\r\n        }\r\n\r\n        const postcodeRef = document.getElementsByName(\"postalCode\");\r\n        if (postcodeRef != null && postcodeRef.length > 0) {\r\n            postcodeRef[0]?.setAttribute(\"placeHolder\", \"PostCode\");\r\n        }\r\n\r\n\r\n\r\n        const houseNumberOrNameRef = document.getElementsByName(\"houseNumberOrName\");\r\n        if (houseNumberOrNameRef != null && houseNumberOrNameRef.length > 0) {\r\n            houseNumberOrNameRef[0]?.setAttribute(\"placeHolder\", \"House Number\");\r\n            //houseNumberOrNameRef[0]?.nodeValue = \"N/A\";\r\n        }\r\n\r\n    }, 1000);\r\n\r\n    //if email already exists, show confirm diaglog if go to login page\r\n    const [showConfirmPopup, setShowConfirmPopup] = useState(false);\r\n    //const [placeOrderWithoutLogin, setPlaceOrderWithoutLogin] = useState(false);\r\n    const [confirmPopupMessage, setConfirmPopupMessage] = useState(\"\");\r\n\r\n\r\n    const scrollToSectionRef = (ref: React.RefObject<HTMLDivElement>) => {\r\n        if (ref.current) {\r\n            ref.current.scrollIntoView({\r\n                behavior: 'smooth',\r\n                block: 'start', // or 'center', 'end', 'nearest'\r\n                //inline: 'end', // or 'start', 'center', 'end'\r\n            });\r\n        }\r\n    };\r\n\r\n\r\n    useEffect(() => {\r\n        setClientType(customerTypeForStore || rdEnum.enumClientTypes.Private.Code);\r\n    }, [customerTypeForStore]);\r\n\r\n    //page load\r\n    useEffect(() => {\r\n        clearMessage();\r\n    }, [mainPageNumber]);\r\n\r\n    useEffect(() => {\r\n        //redirect from login page\r\n        if (!isNil(checkOutCustomerFromStore)) {\r\n            setPageState(checkOutCustomerFromStore);\r\n        }\r\n\r\n    }, [checkOutCustomerFromStore])\r\n\r\n\r\n    const clearMessage = () => {\r\n        setPlaceReservationMessage(\"\");\r\n        //setPaymentFailedMessage(\"\");\r\n\r\n        setConfirmPopupMessage(\"\");\r\n        setPlaceOrderMessage(\"\");\r\n        setAdyenFailedMessage(\"\");\r\n    }\r\n\r\n\r\n    const isNumberKey = (e: any) => {\r\n        IsNumberVerification(e);\r\n    }\r\n\r\n    const validateAccount = (): boolean => {\r\n        let isInvalid = false;\r\n\r\n        let invalidABN = false;\r\n        let invalidABNLength = false;\r\n        let invalidBusinessName = false;\r\n        if (clientType == rdEnum.enumClientTypes.Business.Code) {\r\n            if (isNil(pageState.abn) || pageState.abn == \"\") {\r\n                invalidABN = true;\r\n                isInvalid = true;\r\n            }\r\n            else {\r\n                if (selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n                    if (pageState.abn.length != 11) {\r\n                        invalidABNLength = true;\r\n                        isInvalid = true;\r\n                    }\r\n                }\r\n                else {\r\n                    if (pageState.abn.length != 13) {\r\n                        invalidABNLength = true;\r\n                        isInvalid = true;\r\n                    }\r\n                }\r\n            }\r\n\r\n\r\n\r\n            if (isNil(pageState.businessname) || pageState.businessname == \"\") {\r\n                invalidBusinessName = true;\r\n                isInvalid = true;\r\n            }\r\n        }\r\n\r\n        let invalidFirstName = false;\r\n        if (isNil(pageState.firstname) || pageState.firstname == \"\") {\r\n            invalidFirstName = true;\r\n            isInvalid = true;\r\n        }\r\n\r\n        let invalidLastName = false;\r\n        if (isNil(pageState.lastname) || pageState.lastname == \"\") {\r\n            invalidLastName = true;\r\n            isInvalid = true;\r\n        }\r\n\r\n        let invalidEmail = false;\r\n        if (isNil(pageState.email) || pageState.email == \"\") {\r\n            invalidEmail = true;\r\n            isInvalid = true;\r\n        }\r\n        else {\r\n            if (!Uri.validateEmail(pageState.email)) {\r\n                invalidEmail = true;\r\n                isInvalid = true;\r\n            }\r\n        }\r\n        let invalidConfirmEmail = false;\r\n        if (isNil(pageState.confirmEmail) || pageState.confirmEmail == \"\") {\r\n            invalidConfirmEmail = true;\r\n            isInvalid = true;\r\n        }\r\n        else {\r\n            if (!Uri.validateEmail(pageState.confirmEmail)) {\r\n                invalidConfirmEmail = true;\r\n                isInvalid = true;\r\n            }\r\n        }\r\n\r\n        let emailMisMatch = false;\r\n        if (!isNil(pageState.email) && pageState.email != \"\" && !isNil(pageState.confirmEmail) && pageState.confirmEmail != \"\"\r\n            && pageState.email != pageState.confirmEmail) {\r\n            emailMisMatch = true;\r\n            isInvalid = true;\r\n        }\r\n\r\n        let invalidMobile = false;\r\n        if (isNil(pageState.mobile) || pageState.mobile == \"\") {\r\n            invalidMobile = true;\r\n            isInvalid = true;\r\n        }\r\n\r\n        setPageState({\r\n            ...pageState,\r\n            invalidABN: invalidABN,\r\n            invalidABNLength: invalidABNLength,\r\n            invalidBusinessname: invalidBusinessName,\r\n            invalidFirstname: invalidFirstName,\r\n            invalidLastname: invalidLastName,\r\n            invalidEmail: invalidEmail,\r\n            invalidConfirmEmail: invalidConfirmEmail,\r\n            invalidMobile: invalidMobile,\r\n            emailMismatch: emailMisMatch,\r\n        });\r\n\r\n        return isInvalid;\r\n    }\r\n\r\n\r\n    //place reservation\r\n    const onClickPaymentButton = async (withoutLogin: boolean) => {\r\n\r\n        let invalidAccount = validateAccount();\r\n        if (invalidAccount) return;\r\n\r\n        setIsShowAdyenRetryButton(false);\r\n        setAdyenFailedMessage(\"\");\r\n        setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Init);\r\n        setPageState({ ...pageState, agreement: false });\r\n        setShowOutOfStock(false);\r\n\r\n\r\n        let orderData: orderModel.IOrderRequest = {\r\n            Country: selectedDeliveryFromStore?.Country?.code || \"AU\",\r\n            State: selectedDeliveryFromStore?.State?.code || \"\",\r\n            VariantName: selectVehFromStore.VariantName || \"\",\r\n            VariantPrice: selectVehFromStore.VariantBasePrice || 0,\r\n            ExteriorName: selectVehFromStore.Exterior || \"\",\r\n            ExteriorPrice: selectVehFromStore.ExteriorPrice || 0,\r\n            InteriorName: selectVehFromStore.Interior || \"\",\r\n            InteriorPrice: selectVehFromStore.InteriorPrice || 0,\r\n            VehicleImages: [],\r\n            VehicleThumbnail: null,\r\n            Options: selectVehFromStore.Options || [],\r\n            DeliveryLocationState: getDeliveryLocationState() || \"\",\r\n            DeliveryLocationSuburb: getDeliveryLocationSuburb() || \"\",\r\n            DeliveryLocationPostcode: getDeliveryLocationPostcode() || \"\",\r\n            DeliveryLocationAddress: getDeliveryLocationFullAddress(),\r\n            DeliveryOption: selectedDeliveryFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.HomeDelivery,\r\n            PickupLocationName: selectedDeliveryFromStore?.PickupLocationName,\r\n            Available: vehicleFromStore?.SelectedInterior?.Available || \"\",\r\n            PaymentOption: selectedPaymentOptions?.PaymentOption || rdEnum.enumPaymentOptions.Cash,\r\n            DriveawayCost: selectedPaymentOptions?.DriveAwayCost,\r\n            Finance: selectedPaymentOptions?.Finance,\r\n            Email: pageState.email,\r\n            FirstName: pageState.firstname,\r\n            LastName: pageState.lastname,\r\n            Mobile: pageState.mobile,\r\n            ABN: pageState.abn || \"\",\r\n            BusinessName: pageState.businessname || \"\",\r\n            CustomerCountry: '',\r\n            CustomerType: clientType || rdEnum.enumClientTypes.Private.Code,\r\n            BillingAddress: null,\r\n            BillingSuburb: null,\r\n            BillingPostcode: null,\r\n            BillingState: null,\r\n            RegoAddress: selectedDeliveryFromStore?.PrimaryAddress || \"\",\r\n            RegoSuburb: selectedDeliveryFromStore?.PrimarySuburb || \"\",\r\n            RegoPostcode: selectedDeliveryFromStore?.PrimaryPostcode || \"\",\r\n            RegoState: selectedDeliveryFromStore?.PrimaryState || \"\",\r\n            NameOnCreditCard: null,\r\n            PrivacyStatement: true,\r\n            RDAcountID: null,\r\n            OrderID: null,\r\n            YanaOrderReservationID: null,\r\n            YanaOrderReservationNo: null,\r\n            YanaOrderID: null,\r\n            YanaOrderNo: null,\r\n            YanaCustomerID: null,\r\n            YanaCustomerNo: null,\r\n            RDPaymentID: null,\r\n            FromLinkSource: linkSourceFromStore,\r\n            PaymentHistory: null,\r\n            DownPayment: null,\r\n            PaymentDueDate: null,\r\n            FinalPaymentAmount: null,\r\n            Total: null,\r\n            Balance: null,\r\n            PaymentAmount: null,\r\n            Comments: pageState.comment\r\n        };\r\n        //return;\r\n        let activeAccount = instance.getActiveAccount();\r\n        //let hasLogin = !isNil(activeAccount) || withoutLogin;\r\n\r\n        clearMessage();\r\n        setReservationSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await orderService.placeReservation(orderData, true);   //scope changed:no need to check email exists anymore\r\n        setReservationSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            let responseOrderData = response.data.order;\r\n\r\n            orderData = {\r\n                ...orderData,\r\n                RDAcountID: responseOrderData.rdAccountID,\r\n                OrderID: responseOrderData.orderID,\r\n                YanaOrderReservationID: responseOrderData.yanaReservationID,\r\n                YanaOrderReservationNo: responseOrderData.yanaReservationNumber,\r\n                RDPaymentID: responseOrderData.rdPaymentTransactionID,\r\n                PaymentAmount: responseOrderData.paymentAmount,\r\n            }\r\n            setOrder(orderData);\r\n            localStorage.setItem(\"paymentID\", responseOrderData.rdPaymentTransactionID);\r\n            localStorage.setItem(\"order\", JSON.stringify(orderData));    //not able to get the latest order state value in adyen payment drop-in, have temp store it in localstorage\r\n\r\n            setIsShowPaymentPanel(true);\r\n            dispatch(checkoutCustomerStore.clearCheckoutCustomerDetailsAction());\r\n\r\n            setAdyenSession({\r\n                ...adyenSession,\r\n                SessionID: responseOrderData.adyenSessionID,\r\n                SessionData: responseOrderData.adyenSessionData\r\n            });\r\n\r\n            //setPlaceReservationTime(new Date());\r\n\r\n            setReservationCountDownSeconds(response.data.reservationCountDown);\r\n            setReservationCountdownStage(response.data.reservationCountDownStage);\r\n            setReservationExtendCount(response.data.reservationExtensionCount);\r\n            if (response.data.reservationCountDownStage == 2) {\r\n                setShowCountdownDialog(true);\r\n            }\r\n        }\r\n        else {\r\n\r\n            if (response.errorCode == rdEnum.enumRDErrorCode.ExistedEmail) {\r\n                setShowConfirmPopup(true);\r\n                setPageState({\r\n                    ...pageState,\r\n                    emailDuplicated: true\r\n                })\r\n                setConfirmPopupMessage(response.message);\r\n                dispatch(checkoutCustomerStore.setCheckoutCustomerDetailsAction(pageState));\r\n            }\r\n            else if (response.errorCode == rdEnum.enumRDErrorCode.OutOfStock) {\r\n                setShowOutOfStock(true);\r\n                dispatch(checkoutCustomerStore.clearCheckoutCustomerDetailsAction());\r\n            }\r\n            else {\r\n                setPlaceReservationMessage(response.message);\r\n                dispatch(checkoutCustomerStore.clearCheckoutCustomerDetailsAction());\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    const getDeliveryLocationState = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationState;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryState || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationPostcode = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationPostcode;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryPostcode || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationSuburb = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationSuburb;\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliverySuburb || \"\";\r\n        }\r\n    }\r\n\r\n    const getDeliveryLocationFullAddress = () => {\r\n        if (selectedDeliveryFromStore.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            return selectedDeliveryFromStore?.SelectedPickupLocation?.LocationAddress || \"\";\r\n        }\r\n        else {\r\n            return selectedDeliveryFromStore?.SelectedDeliveryFullAddress || \"\";\r\n        }\r\n\r\n    }\r\n\r\n\r\n    const onClickWaitlist = async () => {\r\n        let invalidAccount = validateAccount();\r\n        if (invalidAccount) return;\r\n\r\n        let interestData: interestModel.IInterest = {\r\n            Country: selectedDeliveryFromStore?.Country?.code || \"\",\r\n            State: selectedDeliveryFromStore?.State?.code || \"\",\r\n            VariantName: selectVehFromStore.VariantName || \"\",\r\n            VariantBasePrice: selectVehFromStore.VariantBasePrice || 0,\r\n            ExteriorName: selectVehFromStore.Exterior || \"\",\r\n            ExteriorPrice: selectVehFromStore.ExteriorPrice || 0,\r\n            InteriorName: selectVehFromStore.Interior || \"\",\r\n            InteriorPrice: selectVehFromStore.InteriorPrice || 0,\r\n            PaymentOption: selectedPaymentOptions?.PaymentOption || rdEnum.enumPaymentOptions.Cash,\r\n            Email: pageState.email,\r\n            FirstName: pageState.firstname,\r\n            LastName: pageState.lastname,\r\n            Mobile: pageState.mobile,\r\n            ABN: pageState.abn || \"\",\r\n            BusinessName: pageState.businessname || \"\",\r\n            CustomerType: clientType || rdEnum.enumClientTypes.Private.Code,\r\n            DeliveryAddress: getDeliveryLocationFullAddress(),\r\n            DeliveryLocationState: getDeliveryLocationState() || \"\",\r\n            DeliveryLocationSuburb: getDeliveryLocationSuburb() || \"\",\r\n            DeliveryLocationPostcode: getDeliveryLocationPostcode() || \"\",\r\n            DeliveryOption: selectedDeliveryFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup,\r\n            EstDeliveryDate: vehicleFromStore?.SelectedInterior?.Available || \"\",\r\n            PrivacyStatement: confirmed?.confirm,\r\n            Marketing: confirmed?.agreement,\r\n            InterestType: rdEnum.enumInterestType.WaitingList,\r\n            Comments: pageState.comment,\r\n            WebUniqueKey: null,\r\n            Options: selectVehFromStore.Options || [],\r\n            VehicleThumbnail: \"\"\r\n        };\r\n\r\n        clearMessage();\r\n        setReservationSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await interestService.saveInterest(interestData, true);\r\n        setReservationSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            //console.log(response.data);\r\n            //let waitlistNo = encodeURIComponent(response.data.yanaWaitlistNumber);\r\n            let url = `order-waitlisted/${response.data.webUniqueKey}`;\r\n            navigate(url);\r\n        }\r\n        else {\r\n            setPlaceReservationMessage(response.message);\r\n        }\r\n    }\r\n\r\n    const handleBackToConfiguration = () => {\r\n        if (submittingToYana != rdEnum.enumProcessingStatus.Processing) {\r\n            toConfiguration();\r\n            setIsShowPaymentPanel(false);\r\n        }\r\n    }\r\n\r\n    const openPrivacy = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/privacy')\r\n    }\r\n\r\n    const toLearnMore = () => {\r\n        window.open('https://sd.gm.com/')\r\n    }\r\n\r\n    const toThirdParty = () => {\r\n        window.open('https://www.adyen.com/en_AU/')\r\n    }\r\n\r\n    const proceedPaymentJoinWaitlistButtonTemplate = () => {\r\n\r\n        if (reserverationSubmittingStatus == rdEnum.enumProcessingStatus.Processing) {\r\n            return (\r\n                <Button type=\"button\" className='progress-btn' disabled={true}>\r\n                    <ProgressSpinner\r\n                        style={{ width: '16px', height: '16px' }}\r\n                        strokeWidth=\"5\"\r\n                        animationDuration=\".8s\"\r\n                    />\r\n                </Button>\r\n            );\r\n        }\r\n        if (mainPageNumber == rdEnum.enumPage.JoinWaitList) {\r\n            return (\r\n                <Button className=\"generic-button stat-button-link\" data-dtm=\"your info\"\r\n                    disabled={!confirmed?.confirm || false}\r\n                    style={{ border: 'none', background: !confirmed?.confirm || false ? '#CCCCCC' : '#282828' }}\r\n                    onClick={() => onClickWaitlist()}>\r\n                    <h6>JOIN THE WAITLIST</h6>\r\n                </Button>\r\n            );\r\n        }\r\n        else {\r\n            return (\r\n                <Button className=\"generic-button stat-button-link\" data-dtm=\"your info\"\r\n                    onClick={() => onClickPaymentButton(false)}>\r\n                    <h6>PROCEED WITH PAYMENT</h6>\r\n                </Button>\r\n            );\r\n        }\r\n\r\n    }\r\n\r\n    const handleCopy = (e: React.ClipboardEvent<HTMLInputElement>) => {\r\n        e.preventDefault();  // Prevents copying\r\n    };\r\n\r\n    const handlePaste = (e: React.ClipboardEvent<HTMLInputElement>) => {\r\n        e.preventDefault();  // Prevents pasting\r\n    };\r\n\r\n    const handleCut = (e: React.ClipboardEvent<HTMLInputElement>) => {\r\n        e.preventDefault();  // Prevents cutting\r\n    };\r\n\r\n    setTimeout(() => {\r\n        let chargingCheckbox = document.getElementsByName(\"cb-ack-last\");\r\n        for (let i = 0; i < chargingCheckbox.length; i++) {\r\n            chargingCheckbox[i].setAttribute('data-dtm', 'checkout');\r\n            chargingCheckbox[i].classList.add('stat-checkbox');\r\n        }\r\n\r\n    }, 200);\r\n\r\n\r\n    const doSetReservationCountdown = async () => {\r\n        let response = await orderService.setReservationCountdown(order.Country);\r\n        if (response.status) {\r\n            setReservationCountDownSeconds(response.data.reservationCountDown);\r\n            setReservationCountdownStage(response.data.reservationCountDownStage);\r\n        }\r\n    }\r\n\r\n\r\n    useEffect(() => {\r\n        if (reservationCountDownSeconds > 0) {\r\n            const interval = setInterval(() => {\r\n                //console.log(mainPageNumber);\r\n                //console.log(isShowPaymentPanel);\r\n                //console.log(confirmOrderSubmittingStatus);\r\n                if (mainPageNumber == rdEnum.enumPage.CheckoutPayment && isShowPaymentPanel\r\n                    && confirmOrderSubmittingStatus == rdEnum.enumProcessingStatus.Init) {\r\n                    let newCountdownSecond = reservationCountDownSeconds - 1;\r\n                    if (newCountdownSecond == 0) {\r\n                        if (reservationCountdownStage == 1) {\r\n                            if (reservationExtendCount >= reservationExendMaxCount) {\r\n                                setShowCountdownDialog(false);\r\n                                let url = Uri.getFrontendOrigin();\r\n                                window.location.href = url;\r\n                            }\r\n                            else {\r\n                                //call get popup count down\r\n                                setShowCountdownDialog(true);\r\n                                doSetReservationCountdown();\r\n                            }\r\n                        }\r\n                        else {\r\n                            //extend popup is showning up, which means it's in extend period\r\n                            //then refresh the page\r\n                            setShowCountdownDialog(false);\r\n                            let url = Uri.getFrontendOrigin();\r\n                            window.location.href = url;\r\n                        }\r\n                    }\r\n\r\n                    setReservationCountDownSeconds(newCountdownSecond);\r\n                }\r\n\r\n            }, 1000);\r\n\r\n            return () => clearInterval(interval); // Clean up interval on component unmount\r\n        }\r\n    }, [reservationCountDownSeconds, isShowPaymentPanel]);\r\n\r\n    const countDownTimeTemplate = (sec: any) => {\r\n        const minutes = Math.floor(sec / 60);\r\n        const seconds = sec % 60;\r\n        return (<div><span className='time-text'>{minutes}</span> minutes <span className='time-text'>{seconds}</span> seconds</div>);\r\n    };\r\n\r\n    return (\r\n        <React.Fragment>\r\n            <div className={classNames({\r\n                'account-details-container': true,\r\n                \"submitting-to-yana\": submittingToYana == rdEnum.enumProcessingStatus.Processing,\r\n            })} ref={watchlistRef}>\r\n                {\r\n                    mainPageNumber == 2\r\n                        ?\r\n                        <div className='back-to-configuration stat-button-link'\r\n                            data-dtm={mainPageNumber == rdEnum.enumPage.JoinWaitList ? \"join the waitlist\" : \"account details\"}\r\n                            onClick={() => handleBackToConfiguration()}>\r\n                            <img alt='' src={`${getCMSAssets()}/checkout/arrow-gray.svg`} />\r\n                            <h6>BACK TO CONFIGURATION</h6>\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                }\r\n                <div className='account-details'>\r\n                    {mainPageNumber == rdEnum.enumPage.CheckoutPayment ? (<h2>ENTER ACCOUNT DETAILS</h2>) : (<h2>JOIN THE WAITLIST</h2>)}\r\n                </div>\r\n\r\n                {/* <div className='customer-type-selection'>\r\n                    <div className='variant-btn-panel'>\r\n                        <Button className={clientType == rdEnum.enumClientTypes.Private.Code ? 'variant-btn selected' : 'variant-btn'}\r\n                            onClick={() => handleChangeType(rdEnum.enumClientTypes.Private.Code)}\r\n                            data-pr-tooltip=\"Luxury\"\r\n                        >\r\n                            {rdEnum.enumClientTypes.Private.Text}\r\n                        </Button>\r\n                        <Button className={clientType == rdEnum.enumClientTypes.Business.Code ? 'variant-btn selected' : 'variant-btn'}\r\n                            onClick={() => handleChangeType(rdEnum.enumClientTypes.Business.Code)}\r\n                            data-pr-tooltip=\"Sport\"\r\n                        >\r\n                            {rdEnum.enumClientTypes.Business.Text}\r\n                        </Button>\r\n                    </div>\r\n                </div> */}\r\n\r\n                {\r\n                    mainPageNumber == rdEnum.enumPage.JoinWaitList\r\n                        ?\r\n                        <div className=''>\r\n                            <span>This particular LYRIQ configuration is  currently sold out.  Please enter your details below and to be notified when it is available to order.</span>\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                }\r\n\r\n\r\n                <div className='customer-info-container'>\r\n                    {clientType == rdEnum.enumClientTypes.Business.Code && (\r\n                        <React.Fragment>\r\n                            <div className='input-item'>\r\n                                <span className=\"wrapper-box\">\r\n                                    <InputText id=\"businessname\" aria-describedby=\"businessname-help\"\r\n                                        {...{ autoComplete: \"new\" }}\r\n                                        className={classNames({\r\n                                            \"stat-input-field\": true,\r\n                                            \"p-invalid\": pageState?.invalidBusinessname\r\n                                        })}\r\n                                        data-dtm={\"your info\"}\r\n                                        placeholder=\" \"\r\n                                        value={pageState.businessname}\r\n                                        onChange={(e) => {\r\n                                            setPageState({\r\n                                                ...pageState,\r\n                                                businessname: e.target.value,\r\n                                                invalidBusinessname: isNil(e.target.value) || e.target.value == \"\"\r\n                                            })\r\n                                        }}\r\n                                    />\r\n                                    <label>Business Name *</label>\r\n                                </span>\r\n                            </div>\r\n                            {pageState?.invalidBusinessname && (\r\n                                <small id=\"businessname-help\" className=\"p-error block\">Require Valid Business Name</small>\r\n                            )}\r\n                            <div className='input-item'>\r\n                                <span className=\"wrapper-box\">\r\n                                    <InputText id=\"abn\" aria-describedby=\"abn-help\"\r\n                                        {...{ autoComplete: \"new\" }}\r\n                                        keyfilter=\"int\"\r\n                                        data-dtm={\"your info\"}\r\n                                        className={classNames({\r\n                                            \"stat-input-field\": true,\r\n                                            \"p-invalid\": pageState?.invalidABN\r\n                                        })}\r\n                                        placeholder=\" \"\r\n                                        value={pageState.abn}\r\n                                        maxLength={selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia ? 11 : 13}\r\n                                        onChange={(e) => {\r\n                                            setPageState({\r\n                                                ...pageState,\r\n                                                abn: e.target.value,\r\n                                                invalidABN: isNil(e.target.value) || e.target.value == \"\",\r\n                                                invalidABNLength: false,\r\n                                            })\r\n                                        }}\r\n                                    />\r\n                                    {\r\n                                        selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                            ?\r\n                                            <label>ABN *</label>\r\n                                            :\r\n                                            <label>NZBN *</label>\r\n                                    }\r\n                                </span>\r\n                            </div>\r\n                            {pageState?.invalidABN && (\r\n                                <small id=\"abn-help\" className=\"p-error block\">Please enter a valid&nbsp;\r\n                                    {\r\n                                        selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                            ?\r\n                                            <span>ABN</span>\r\n                                            :\r\n                                            <span>NZBN</span>\r\n                                    }\r\n                                </small>\r\n                            )}\r\n                            {pageState?.invalidABNLength && (\r\n                                <small id=\"abn-help\" className=\"p-error block\">\r\n                                    {\r\n                                        selectedLocationFromStore?.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                            ?\r\n                                            <span>ABN</span>\r\n                                            :\r\n                                            <span>NZBN</span>\r\n                                    }\r\n                                    &nbsp;length should be {selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia ? 11 : 13} digits.\r\n                                </small>\r\n                            )}\r\n                        </React.Fragment>\r\n                    )}\r\n                    <div className='input-item'>\r\n                        <span className=\"wrapper-box\">\r\n                            <InputText id=\"firstname\" aria-describedby=\"firstname-help\"\r\n                                {...{ autoComplete: \"new\" }}\r\n                                className={classNames({\r\n                                    \"stat-input-field\": true,\r\n                                    \"p-invalid\": pageState?.invalidFirstname\r\n                                })}\r\n                                data-dtm=\"your info\"\r\n                                placeholder=\" \"\r\n                                value={pageState.firstname}\r\n                                onChange={(e) => {\r\n                                    setPageState({\r\n                                        ...pageState,\r\n                                        firstname: e.target.value,\r\n                                        invalidFirstname: isNil(e.target.value) || e.target.value == \"\"\r\n                                    })\r\n                                }}\r\n                            />\r\n                            <label>First Name *</label>\r\n                        </span>\r\n                    </div>\r\n                    {pageState?.invalidFirstname && (\r\n                        <small id=\"fristname-help\" className=\"p-error block\">Require Valid First Name</small>\r\n                    )}\r\n                    <div className='input-item'>\r\n                        <span className=\"wrapper-box\">\r\n                            <InputText id=\"lastname\" aria-describedby=\"lastname-help\"\r\n                                {...{ autoComplete: \"new\" }}\r\n                                className={classNames({\r\n                                    \"stat-input-field\": true,\r\n                                    \"p-invalid\": pageState?.invalidLastname\r\n                                })}\r\n                                data-dtm=\"your info\"\r\n                                placeholder=\" \"\r\n                                value={pageState.lastname}\r\n                                onChange={(e) => {\r\n                                    setPageState({\r\n                                        ...pageState,\r\n                                        lastname: e.target.value,\r\n                                        invalidLastname: isNil(e.target.value) || e.target.value == \"\"\r\n                                    })\r\n                                }}\r\n                            />\r\n                            <label>Last Name *</label>\r\n                        </span>\r\n                    </div>\r\n                    {pageState?.invalidLastname && (\r\n                        <small id=\"lastname-help\" className=\"p-error block\">Require Valid Last Name</small>\r\n                    )}\r\n                    <div className='input-item'>\r\n                        <span className=\"wrapper-box\">\r\n                            <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                {...{ autoComplete: \"new\" }}\r\n                                className={classNames({\r\n                                    \"stat-input-field\": true,\r\n                                    \"p-invalid\": pageState?.invalidEmail\r\n                                })}\r\n                                data-dtm=\"your info\"\r\n                                placeholder=\" \"\r\n                                value={pageState.email}\r\n                                onChange={(e) => {\r\n                                    setPageState({\r\n                                        ...pageState,\r\n                                        email: e.target.value,\r\n                                        invalidEmail: isNil(e.target.value) || e.target.value == \"\",\r\n                                        emailMismatch: false,\r\n                                        emailDuplicated: false,\r\n                                    })\r\n                                }}\r\n                            />\r\n                            <label>Email *</label>\r\n                        </span>\r\n                    </div>\r\n                    {pageState?.invalidEmail && (\r\n                        <small id=\"email-help\" className=\"p-error block\">Require Valid Email</small>\r\n                    )}\r\n                    {pageState?.emailDuplicated && (\r\n                        <small id=\"email-help\" className=\"p-error block\">This email is already registered</small>\r\n                    )}\r\n                    <div className='input-item'>\r\n                        <span className=\"wrapper-box\">\r\n                            <InputText id=\"confirmemail\" aria-describedby=\"confirmemail-help\"\r\n                                {...{ autoComplete: \"new\" }}\r\n                                className={classNames({\r\n                                    \"stat-input-field\": true,\r\n                                    \"p-invalid\": pageState?.invalidConfirmEmail\r\n                                })}\r\n                                placeholder=\" \"\r\n                                data-dtm=\"your info\"\r\n                                value={pageState.confirmEmail}\r\n                                onChange={(e: any) => {\r\n                                    setPageState({\r\n                                        ...pageState,\r\n                                        confirmEmail: e.target.value,\r\n                                        invalidConfirmEmail: isNil(e.target.value) || e.target.value == \"\",\r\n                                        emailMismatch: false,\r\n                                        emailDuplicated: false,\r\n                                    })\r\n                                }}\r\n                                onCopy={handleCopy}\r\n                                onPaste={handlePaste}\r\n                                onCut={handleCut}\r\n                            />\r\n                            <label>Confirm Email *</label>\r\n                        </span>\r\n                    </div>\r\n                    {pageState?.invalidConfirmEmail && (\r\n                        <small id=\"confirmemail-help\" className=\"p-error block\">Require Valid Email</small>\r\n                    )}\r\n                    {pageState?.emailMismatch && (\r\n                        <small id=\"email-help\" className=\"p-error block\">The email address and confirm email address fields do not match</small>\r\n                    )}\r\n                    <div className='input-item'>\r\n                        <span className=\"wrapper-box\">\r\n                            <InputText id=\"mobile\" aria-describedby=\"mobile-help\"\r\n                                {...{ autoComplete: \"new\" }}\r\n                                className={classNames({\r\n                                    \"stat-input-field\": true,\r\n                                    \"p-invalid\": pageState?.invalidMobile\r\n                                })}\r\n                                data-dtm=\"your info\"\r\n                                onKeyPress={(e: any) => isNumberKey(e)}\r\n                                placeholder=\" \"\r\n                                value={pageState.mobile}\r\n                                onChange={(e) => {\r\n                                    let mobile = e.target.value.slice(0, 10);\r\n                                    setPageState({\r\n                                        ...pageState,\r\n                                        mobile: mobile,\r\n                                        invalidMobile: isNil(mobile) || mobile == \"\" || mobile.length < 9 || mobile.length > 13\r\n                                    })\r\n                                }}\r\n                                maxLength={10}\r\n                            />\r\n                            <label>Mobile *</label>\r\n                        </span>\r\n                    </div>\r\n                    {pageState?.invalidMobile && (\r\n                        <small id=\"mobile-help\" className=\"p-error block\">Require Valid Mobile</small>\r\n                    )}\r\n                    {/*<button onClick={() => {*/}\r\n                    {/*    //customCardInstance.current.remove();*/}\r\n                    {/*    //customCardInstance.current.unmount();*/}\r\n                    {/*    customCardInstance.current.update();*/}\r\n                    {/*    customCardInstance.current.remount();*/}\r\n                    {/*}}>adyen test</button>*/}\r\n                    {/* {mainPageNumber == rdEnum.enumPage.JoinWaitList ? (\r\n                        <div className='input-item'>\r\n                            <span className=\"wrapper-box\">\r\n                                <InputText id=\"comment\" aria-describedby=\"comment-help\"\r\n                                    placeholder=\" \"\r\n                                    value={pageState.comment}\r\n                                    onChange={(e) => {\r\n                                        setPageState({\r\n                                            ...pageState,\r\n                                            comment: e.target.value,\r\n                                        })\r\n                                    }}\r\n                                />\r\n                                <label>Comment</label>\r\n                            </span>\r\n                        </div>\r\n                    ) : (<></>)} */}\r\n\r\n                </div>\r\n\r\n                {\r\n                    mainPageNumber != rdEnum.enumPage.CheckoutPayment\r\n                        ?\r\n                        <div className='checkbox-checkout-container'>\r\n                            <div className='checkbox-container'>\r\n                                <div className='checkbox-item'>\r\n                                    <div className='checkbox-content'>\r\n                                        <Checkbox\r\n                                            inputRef={joinConsentRef1}\r\n                                            name=\"cb-ack-checkout\"\r\n                                            inputId=\"cb-ack-checkout\"\r\n                                            onChange={(e) => {\r\n                                                //if (isNil(pageState)) return;\r\n                                                setConfirmed({\r\n                                                    ...confirmed,\r\n                                                    confirm: e.checked,\r\n                                                    invalidConfirm: !e.checked\r\n                                                });\r\n                                            }}\r\n                                            checked={confirmed?.confirm}\r\n                                        ></Checkbox>\r\n                                        <label htmlFor=\"cb-ack-checkout\" className=\"p-checkbox-label\">\r\n                                            By registering my interest to join a waitlist, I agree to Cadillac's Privacy Policy and Privacy Collection Statement.\r\n                                    </label>\r\n                                    </div>\r\n                                    {confirmed?.invalidConfirm && (\r\n                                        <small id=\"lastname-help\" className=\"p-error block\">Require the confirmation of valid agreement.</small>\r\n                                    )}\r\n                                </div>\r\n\r\n                                <div className='checkbox-item'>\r\n                                    <div className='checkbox-content'>\r\n                                        <Checkbox\r\n                                            inputRef={joinConsentRef2}\r\n                                            name=\"cb-ack-checkout-optional\"\r\n                                            inputId=\"cb-ack-checkout-optional\"\r\n                                            onChange={(e) => {\r\n                                                //if (isNil(pageState)) return;\r\n                                                setConfirmed({\r\n                                                    ...confirmed,\r\n                                                    agreement: e.checked,\r\n                                                })\r\n                                            }}\r\n                                            checked={confirmed?.agreement}\r\n                                        ></Checkbox>\r\n                                        <label htmlFor=\"cb-ack-checkout-optional\" className=\"p-checkbox-label\">\r\n                                            I consent to receiving direct marketing materials from Cadillac.\r\n                                    </label>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n\r\n                            {/* <div className='privacy-container'>\r\n                            <p>Cadillac does not sell, trade or disclose your contact information to independent third parties for their independent use\r\n                            without your permission.</p>\r\n                            <p>\r\n                                By continuing your test drive booking, you have accepted the&nbsp;\r\n                                <PrivacyPolicyLink props=\"Privacy Policy\" />\r\n                                &nbsp;and&nbsp;\r\n                                <a style={{fontWeight: '400', color: '#3A3A3A'}}\r\n                                        onClick={()=> window.open(\"https://www.cadillacanz.com/au-en/privacy\", \"_blank\")}\r\n                                >Test Drive Terms and Conditions</a>\r\n                                &nbsp;of Cadillac.\r\n                            </p>\r\n                        </div> */}\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                }\r\n\r\n                <div className='checkout-btn-panel' style={{ display: isShowPaymentPanel ? 'none' : '' }}>\r\n                    {proceedPaymentJoinWaitlistButtonTemplate()}\r\n                </div>\r\n                {!isNil(placeReservationMessage) && placeReservationMessage != \"\" && (\r\n                    <div className=\"payment-error\" dangerouslySetInnerHTML={{ __html: placeReservationMessage }}></div>\r\n                )}\r\n\r\n                {showOutOfStock && (<NoStorageReminder />)}\r\n\r\n\r\n                <div className='payment-panel' style={{ height: isShowPaymentPanel ? 'auto' : '0' }}>\r\n                    <div className={isShowPaymentPanel ? 'payment-panel-inner show' : 'payment-panel-inner'}>\r\n                        {\r\n                            mainPageNumber == rdEnum.enumPage.CheckoutPayment\r\n                                ?\r\n                                <div className='dollars-deposit'>\r\n                                    <div className='price-line'>\r\n                                        <span>Driveaway Price</span>\r\n                                        <span>{currencyFormatWithBlank(driveawayFromStore?.DriveawayPrice || null)}</span>\r\n                                    </div>\r\n                                    <div className='price-line deposit-line'>\r\n                                        <span>Due Today</span>\r\n                                        <span>{Uri.currencyFormatWithZeroBlank(order.PaymentAmount)}</span>\r\n                                    </div>\r\n                                    <p><li>Fully refundable order deposit</li></p>\r\n                                </div>\r\n                                :\r\n                                <></>\r\n                        }\r\n                        {mainPageNumber == rdEnum.enumPage.CheckoutPayment && isShowPaymentPanel\r\n                            && linkSourceFromStore != rdEnum.enumLinkSource.PrivateInterestLink\r\n                            && confirmOrderSubmittingStatus == rdEnum.enumProcessingStatus.Init && (\r\n                            <div className=\"reservation-count-down-wrapper\">\r\n                                <div className=\"count-down-icon\">\r\n                                    <img className=\"icon\" alt=\"\" src={`${getCMSAssets()}/checkout/info-circle.svg`} />\r\n                                </div>\r\n                                <div className=\"count-down-text\">\r\n                                    <div>We are holding your LYRIQ for:</div>\r\n                                    {countDownTimeTemplate(reservationCountDownSeconds)}\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n\r\n                        {/*Adyen payment*/}\r\n                        {\r\n                            mainPageNumber == rdEnum.enumPage.CheckoutPayment\r\n                                ?\r\n                                <>\r\n                                    <div id=\"customCard-container\" ref={paymentContainer} style={{ height: \"auto\" }}>\r\n                                    </div>\r\n                                    <div className='third-party-reminder'>\r\n                                        Cadillac uses a third party payment provider called Adyen to facilitate payment of your deposit and Cadillac will not collect or store your card information. <a className='third-party-link stat-text-link' data-dtm=\"checkout\" onClick={() => toThirdParty()}>Learn more</a> about how Adyen processes your transaction and manages your data.\r\n                                    </div>\r\n\r\n                                    {isShowAdyenRetryButton && (\r\n                                        <div className=\"retry-payment-button-wrapper\">\r\n                                            <Button className=\"generic-button retry-btn\"\r\n                                                onClick={async () => {\r\n\r\n                                                    let response = await orderService.getReservationStatus(order.OrderID);\r\n                                                    if (response.status) {\r\n                                                        if (response.data == \"active\") {\r\n\r\n                                                            if (customCardInstance.current.isValid) {\r\n                                                                setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n                                                            }\r\n                                                            customCardInstance.current.update();\r\n                                                            customCardInstance.current.remount();\r\n                                                            setIsShowAdyenRetryButton(false);\r\n                                                            setAdyenFailedMessage(\"\");\r\n\r\n                                                            setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Init);\r\n                                                        }\r\n                                                        else {\r\n                                                            if (selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n                                                                setPlaceReservationMessage(rdEnum.enumErrorMessage.AUReservationError);\r\n                                                                setIsShowPaymentPanel(false);\r\n                                                            }\r\n                                                            else {\r\n                                                                setPlaceReservationMessage(rdEnum.enumErrorMessage.NZReservationError);\r\n                                                                setIsShowPaymentPanel(false);\r\n                                                            }\r\n                                                        }\r\n                                                    }\r\n\r\n\r\n                                                }}\r\n                                            >\r\n                                                <span>Re-try Payment</span>\r\n                                            </Button>\r\n                                        </div>\r\n                                    )}\r\n                                </>\r\n                                :\r\n                                <></>\r\n                        }\r\n\r\n                        <div className='collecting-data-container'>\r\n                            <div className='collecting-data-panel'>\r\n                                <img alt=\"\" src={`${getCMSAssets()}/inventory/info.svg`} />\r\n                                <div className='vehicle-features-panel'>\r\n                                    <p>\r\n                                        This vehicle features safety diagnostic data collection to help monitor, detect, and mitigate issues.\r\n                                    </p>\r\n                                    <a className='learn-more stat-text-link' data-dtm=\"checkout\" onClick={() => toLearnMore()}>Learn more</a>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='customer-type-checkbox'>\r\n                            <div className=\"section-agree-ack\">\r\n                                <Checkbox\r\n                                    name=\"cb-ack-last\"\r\n                                    inputId=\"cb-ack-last\"\r\n                                    onChange={(e) =>\r\n                                        setPageState({\r\n                                            ...pageState,\r\n                                            agreement: e.checked,\r\n                                            invalidAgreement: !e.checked\r\n                                        })\r\n                                    }\r\n                                    checked={pageState?.agreement}\r\n                                ></Checkbox>\r\n                                {/*{pageState?.invalidAgreement && (*/}\r\n                                {/*    <small id=\"mobile-help\" className=\"p-error block\">Require the Agreement of Guideline</small>*/}\r\n                                {/*)}*/}\r\n\r\n                                <label className=\"p-checkbox-label\" >\r\n\r\n                                    <p style={{ cursor: 'auto' }}>\r\n                                        {/* {\r\n                                            mainPageNumber == rdEnum.enumPage.CheckoutPayment\r\n                                                ?\r\n                                                <>By placing this order, I agree to the Cadillac Order Agreement, </>\r\n                                                :\r\n                                                <>By placing this order, I agree to the Cadillac Order Agreement, </>\r\n                                        }\r\n                                        &nbsp;<TermsConditionsDialog props='' /> and\r\n                                        &nbsp;<a className=''><PrivacyPolicyLink props='Privacy Policy' /></a>,\r\n                                        &nbsp;<a className=''>Privacy Statement</a> */}\r\n                                        By placing this order, I have read and agree to the Cadillac Order Terms & Conditions, Cadillac's Privacy Collection Statement and Account Guidelines.\r\n                                    </p>\r\n                                </label>\r\n                            </div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n                            {/*{!isNil(paymentFailedMessage) && paymentFailedMessage != \"\" && (*/}\r\n                            {/*    <div className=\"payment-error\">{paymentFailedMessage}</div>*/}\r\n                            {/*)}*/}\r\n\r\n                            <div className='checkbox-bottom-content'>\r\n                                <div className='checkbox-privacy-btn-box'>\r\n                                    <TermsConditionsDialog props=\"special\" />\r\n                                    <PrivacyCollectionDialog props='checkout-payment' />\r\n                                    <AccountGuidelines />\r\n                                    {/* <div className='checkbox-privacy-btn' onClick={() => openPrivacy()}>\r\n                                        <span>Cadillac's Privacy Policy</span>\r\n                                        <img alt='' src={`${getCMSAssets()}/checkout/right-black-arrow.svg`} />\r\n                                    </div> */}\r\n                                    {/* <div className='checkbox-privacy-btn'>\r\n                                        <span>Cadillac's Privacy Collection Statement</span>\r\n                                        <img alt='' src={`${getCMSAssets()}/checkout/right-black-arrow.svg`} />\r\n                                    </div> */}\r\n                                </div>\r\n                                {selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia && (\r\n                                    <React.Fragment>\r\n                                        <h6>Motor Trader Licence:</h6>\r\n                                        <h6>Victoria: LMCT-1770</h6>\r\n                                        <h6>New South Wales: MD095488</h6>\r\n                                        {lmctText != \"\" && (\r\n                                            <React.Fragment>\r\n                                                <br />\r\n                                                <h6>Partner Trade Licences:</h6>\r\n                                                <h6>{lmctText}</h6>\r\n                                            </React.Fragment>\r\n                                        )}\r\n                                    </React.Fragment>\r\n                                )}\r\n                                {selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.NewZealand && (\r\n                                    <React.Fragment>\r\n                                        <h6>Motor Trade Licences:</h6>\r\n                                        <h6>New Zealand: M388717</h6>\r\n                                    </React.Fragment>\r\n                                )}\r\n                            </div>\r\n                        </div>\r\n\r\n                        {!isNil(placeOrderMessage) && placeOrderMessage != \"\" && (\r\n                            <div className=\"payment-error\" dangerouslySetInnerHTML={{ __html: placeOrderMessage }}></div>\r\n                        )}\r\n\r\n                        {!isNil(adyenFailedMessage) && adyenFailedMessage != \"\" && (\r\n                            <div className=\"text-error\">{adyenFailedMessage}</div>\r\n                        )}\r\n                        <div className='checkout-btn-panel'>\r\n                            {(confirmOrderSubmittingStatus == rdEnum.enumProcessingStatus.Processing || submittingToYana == rdEnum.enumProcessingStatus.Processing) && (\r\n                                <Button type=\"button\" className='progress-btn' disabled={true}>\r\n                                    <ProgressSpinner\r\n                                        style={{ width: '16px', height: '16px' }}\r\n                                        strokeWidth=\"5\"\r\n                                        animationDuration=\".8s\"\r\n                                    />\r\n                                </Button>\r\n\r\n                            )}\r\n                            {confirmOrderSubmittingStatus == rdEnum.enumProcessingStatus.Init && (\r\n                                <Button\r\n                                    className=\"generic-button btn-confirm-order stat-button-link\"\r\n                                    data-dtm=\"submit\"\r\n                                    disabled={!pageState.agreement}\r\n                                    style={{ border: 'none', backgroundColor: !pageState.agreement ? '#CCCCCC' : '#282828' }}\r\n                                    onClick={async () => {\r\n\r\n                                        ////check if in 20 minutes since place reservation\r\n                                        //if (!isNil(placeReservationTime) && moment(placeReservationTime).add(reservationExpiryMin, \"minutes\") < moment(new Date())) {\r\n                                        //    if (selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n                                        //        setPlaceReservationMessage(rdEnum.enumErrorMessage.AUReservationError);\r\n                                        //    }\r\n                                        //    else {\r\n                                        //        setPlaceReservationMessage(rdEnum.enumErrorMessage.NZReservationError);\r\n                                        //    }\r\n                                        //    setIsShowPaymentPanel(false);\r\n                                        //    return;\r\n                                        //}\r\n\r\n                                        let response = await orderService.getReservationStatus(order.OrderID);\r\n                                        if (response.status) {\r\n                                            if (response.data == \"active\") {\r\n\r\n                                                if (customCardInstance.current.isValid) {\r\n                                                    setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n                                                }\r\n                                                customCardInstance.current.submit();\r\n                                            }\r\n                                            else {\r\n                                                if (selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n                                                    setPlaceReservationMessage(rdEnum.enumErrorMessage.AUReservationError);\r\n                                                    setIsShowPaymentPanel(false);\r\n                                                }\r\n                                                else {\r\n                                                    setPlaceReservationMessage(rdEnum.enumErrorMessage.NZReservationError);\r\n                                                    setIsShowPaymentPanel(false);\r\n                                                }\r\n                                            }\r\n                                        }\r\n                                    }}\r\n                                >\r\n                                    <span style={{ color: !pageState.agreement ? '#707070' : '#fff' }}>PLACE ORDER</span>\r\n                                </Button>\r\n                            )}\r\n                        </div>\r\n\r\n                        <div className={`input-item textarea ${isOverflown ? 'overflown' : ''}`}>\r\n                            <span className=\"wrapper-box\">\r\n                                <InputTextarea id=\"comments\" aria-describedby=\"comments-help\"\r\n                                    placeholder=\" \"\r\n                                    ref={textAreaRef}\r\n                                    rows={8}\r\n                                    value={pageState.comment}\r\n                                    onChange={(e: any) => {\r\n                                        setPageState({\r\n                                            ...pageState,\r\n                                            comment: e.target.value,\r\n                                        });\r\n                                        localStorage.setItem(\"ordercomments\", e.target.value);\r\n\r\n                                        checkOverflow();\r\n                                    }}\r\n                                />\r\n                                <label style={{ display: isOverflown ? \"none\" : '' }}>Anything else you'd like the Cadillac team to know?<br/>Please share it here.</label>\r\n                            </span>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <Dialog className='checkout-confirm-dialog'\r\n                visible={showConfirmPopup}\r\n                style={{ width: '40%' }}\r\n                draggable={false} resizable={true}\r\n                onHide={() => setShowConfirmPopup(false)}>\r\n                <h5>{confirmPopupMessage}</h5>\r\n                <div className=\"button-wrapper\">\r\n                    <Button\r\n                        onClick={() => {\r\n                            setShowConfirmPopup(false);\r\n                            azureB2C.signIn();\r\n                        }}\r\n                    >\r\n                        <span>Yes</span>\r\n                    </Button>\r\n\r\n                    <Button\r\n                        onClick={() => {\r\n                            setShowConfirmPopup(false);\r\n                            //setPlaceOrderWithoutLogin(true);\r\n                            onClickPaymentButton(true);\r\n                        }}\r\n                    >\r\n                        <span>No</span>\r\n                    </Button>\r\n                </div>\r\n            </Dialog>\r\n\r\n            <Dialog className='checkout-countdown-dialog'\r\n                showHeader={false}\r\n                visible={showCountdownDialog}\r\n                style={{ width: '25%' }}\r\n                draggable={false} resizable={true}\r\n                onHide={() => setShowCountdownDialog(false)}>\r\n                <div className=\"checkout-countdown-content\">\r\n                    <h5>Reminder</h5>\r\n                    <p>Your LYRIQ design is about to be released. If you need\r\n                    more time, you can extend below, otherwise you\r\n                    automatically will be redirected back to the Configuration homepage.</p>\r\n                    <div>\r\n                        <Button\r\n                            className=\"button-black\"\r\n                            onClick={async () => {\r\n                                let response = await orderService.extendReservationCountdown(order.Country);\r\n                                if (response.status) {\r\n                                    setReservationCountDownSeconds(response.data.reservationCountDown);\r\n                                    setReservationCountdownStage(response.data.reservationCountDownStage);\r\n                                    setShowCountdownDialog(false);\r\n                                    setReservationExtendCount(response.data.reservationExtensionCount);\r\n                                }\r\n                                else {\r\n                                    if (response.message == rdEnum.enumRDErrorCode.MaxExtensionLimit) {\r\n                                        let url = Uri.getFrontendOrigin();\r\n                                        window.location.href = url;\r\n                                    }\r\n                                }\r\n                            }}\r\n                        >\r\n                            Extend\r\n                        </Button>\r\n                    </div>\r\n                </div>\r\n            </Dialog>\r\n        </React.Fragment>\r\n    )\r\n}\r\n\r\nexport default CheckoutWaitlist","import { getCMSAssets } from 'helpers/Uri';\r\nimport { IChargingDialogProps } from 'model/IChargingDialogProps';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { Button, Carousel, Col, Row } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { currencyFormat } from 'helpers/Uri';\r\nimport { isNil } from 'lodash';\r\n\r\nconst ChargingDialog = (props: vehicleModel.IVehicleOptions) => {\r\n    const dispatch = useDispatch();\r\n\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    let removeFirstItemList = props.OptionPicture?.length > 1 ?  props.OptionPicture.slice(1) : props.OptionPicture;\r\n\r\n    // const [tempProps, setTempProps] = useState<string[]>([]);\r\n\r\n    // useEffect(() => {\r\n    //     if (props.OptionPicture?.length > 1) {\r\n    //         setTempProps(props.OptionPicture?.splice(1, 2));\r\n    //     } else {\r\n    //         setTempProps(tempProps);\r\n    //     }\r\n    // }, [])\r\n\r\n    const selectedOptionsFromStore: vehicleModel.IVehicleOptions[] | null = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle.Options;\r\n    });\r\n\r\n    const isAddOrRemove = selectedOptionsFromStore?.some((option: any) =>\r\n        option !== props && option.OptionName === props.OptionName\r\n    );\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n        document.body.style.overflowY = 'hidden';\r\n        document.body.style.paddingRight = '15px';\r\n    }\r\n\r\n    const handleDialogHide = () => {\r\n        setIsOpen(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    }\r\n\r\n    const handleAdd = (item: vehicleModel.IVehicleOptions) => {\r\n\r\n        dispatch(selectedConfigStore.updateOptionAction(item));\r\n        setIsOpen(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n       \r\n    }\r\n\r\n    const directionButtons = (direction: any) => {\r\n        return (\r\n            <span\r\n                aria-hidden=\"true\"\r\n                className={\"stat-arrow-prev \" + direction === \"Next\" ? \"button-next\" : \"button-prev\"}\r\n                data-dtm={\"modal:\" + props.OptionName}\r\n            >\r\n                <img className=\"image\" src={`${getCMSAssets()}/main/${direction}-round.svg`} />\r\n            </span>\r\n        );\r\n    };\r\n\r\n    const chargingCurrencyFormat = (value: number | null) => {\r\n        let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n            style: 'currency',\r\n            currency: 'AUD',\r\n        });\r\n\r\n\r\n        if (isNil(value))\r\n            return \"\";\r\n        if (value == 0)\r\n            return \"FREE\"\r\n        return \"+ \" + currencyFormatter.format(value);\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className='charging-popup-container stat-text-link'\r\n                data-dtm={\"charging:\" + props.OptionName?.toLocaleLowerCase()}\r\n                onClick={() => {\r\n                    handleDialogOpen();\r\n                }}\r\n            >\r\n                <span>Details</span>\r\n                <img alt=\"\" src={`${getCMSAssets()}/main/arrow-right-gray.svg`} />\r\n                {/*<img alt='' src={removeFirstItemList.length > 0 ? removeFirstItemList[0] : \"\"} />*/}\r\n            </div>\r\n\r\n            <Dialog header={props.OptionName?.includes('Public Charging') \r\n                            || props.OptionName?.includes('Public Charger')\r\n                            ? 'PUBLIC CHARGING' \r\n                            : props.OptionName?.includes('Home Charging') \r\n                            || props.OptionName?.includes('Home Charger')\r\n                            ? 'HOME CHARGING' \r\n                            : 'CHARGING'}\r\n                className='charging-popup-dialog'\r\n                visible={isOpen}\r\n                position='bottom'\r\n                onHide={() => handleDialogHide()}\r\n                draggable={false} resizable={true}>\r\n                <Row className='charging-popup-content-container'>\r\n                    <Col md={7} className='charging-popup-carousel-wrapper'>\r\n                    {\r\n                        // tempProps?.length > 1\r\n                        removeFirstItemList?.length > 1\r\n                        ?\r\n                        <Carousel\r\n                            nextIcon={directionButtons(\"Next\")}\r\n                            prevIcon={directionButtons(\"Prev\")}\r\n                        >\r\n                        {removeFirstItemList.map((item: any, index: number) => {\r\n                            return (\r\n                                <div key={item + index} className='carousel-item'>\r\n                                    <img className=\"image\" src={item} />\r\n                                </div>\r\n                            );\r\n                        })}\r\n                        </Carousel>\r\n                        :\r\n                        // tempProps?.length == 1\r\n                        removeFirstItemList?.length == 1\r\n                        ?\r\n                        <div className='img-item'>\r\n                            <img className=\"image\" src={removeFirstItemList?.[0]} />\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                    }\r\n                       \r\n                        \r\n                    </Col>\r\n\r\n                    <Col md={5} className='charging-popup-content-wrapper'>\r\n                        <div className='content-title-desc-container'>\r\n                            <h5>{props.OptionName}</h5>\r\n                            <p>{props.OptionDesc}</p>\r\n                        </div>\r\n\r\n                        <div className='bottom-mgmt-container'>\r\n                            {/* {\r\n                                props.OptionName?.includes('Public Charging')\r\n                                    || props.OptionName?.includes('Public Charger')\r\n                                    ?\r\n                                    <div className='charging-disclaimer'>\r\n                                        The public charging offer is provided by Chargefox. The use of the Chargefox charging network is subject to Chargefox Network T&Cs. Fair use policy applies. View full T&Cs when placing your order\r\n                    </div>\r\n                                    :\r\n                                    props.OptionName?.includes('Home Charging')\r\n                                        || props.OptionName?.includes('Home Charger')\r\n                                        ?\r\n                                        <div className='charging-disclaimer'>\r\n                                            Hardware and installation is provided by JET Charge. View order T&Cs when completing your purchase for more information.\r\n                    </div>\r\n                                        :\r\n                                        <></>\r\n                            } */}\r\n                            <div className='content-title-term-desc'>{props.TermsDescription}</div>\r\n                            {/* <p>Disclaimer</p> */}\r\n                            <div className='price-panel'>\r\n                                <span>Price</span>\r\n                                <span>{chargingCurrencyFormat(props.OptionPrice || 0)}</span>\r\n                            </div>\r\n\r\n                            <Button className='general-btn stat-button-link' onClick={() => handleAdd(props)}\r\n                                style={{ backgroundColor: isAddOrRemove ? '#fff' : '#282828' }}\r\n                                data-dtm={\"modal:\" + props.OptionName?.toLocaleLowerCase()}\r\n                            >\r\n                                {\r\n                                    isAddOrRemove\r\n                                    ?\r\n                                    <span style={{color: '#282828'}}>REMOVE</span>\r\n                                    :\r\n                                    <span>ADD</span>\r\n                                }\r\n                            </Button>\r\n                        </div>\r\n                    </Col>\r\n                </Row>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ChargingDialog","import React, { useEffect, useState } from 'react'\r\nimport { Card } from 'primereact/card';\r\nimport { Button } from 'primereact/button'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport ChargingDialog from 'components/ChargingDialog';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nimport { isNil, template } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport { currencyFormatCharging } from 'helpers/Uri';\r\n\r\nconst Charging = () => {\r\n    const dispatch = useDispatch();\r\n\r\n    //the charge items be shown on the page\r\n    const [chargeList, setChargeList] = useState<vehicleModel.IVehicleOptions[]>();\r\n\r\n    //All charge items got from APIs\r\n    const chargingListFromStore: vehicleModel.IVehicleOptions[] = useSelector((state: IAppState) => {\r\n        return state.vehicle.Charging;\r\n    });\r\n\r\n    //uses selected options\r\n    const selectedOptionsFromStore: vehicleModel.IVehicleOptions[] | null = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle.Options;\r\n    });\r\n\r\n    //To get current Country Name\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    //const [selected, setSelected] = useState<vehicleModel.IVehicleOptions[]>([]);\r\n\r\n    useEffect(() => {\r\n        //business rules:\r\n        //if public selected, home must have price\r\n        //if home no price selected, public is showing and disabled\r\n        //if home price selected, public is showing and enabled\r\n        if (!isNil(chargingListFromStore) && chargingListFromStore.length > 0) {\r\n            if (!isNil(selectedOptionsFromStore) && selectedOptionsFromStore.length > 0) {\r\n                let selectedPublicCharge = selectedOptionsFromStore.find(m =>\r\n                    m.OptionType == rdEnum.enumVehicleOptionType.Charge && m.ChargeType == rdEnum.enumChargeType.Public);\r\n                let selectedHomeWithoutPriceCharge = selectedOptionsFromStore.find(m =>\r\n                    m.OptionType == rdEnum.enumVehicleOptionType.Charge && m.ChargeType == rdEnum.enumChargeType.HomeWithoutPrice);\r\n                let selectedHomeHasPriceCharge = selectedOptionsFromStore.find(m =>\r\n                    m.OptionType == rdEnum.enumVehicleOptionType.Charge && m.ChargeType == rdEnum.enumChargeType.HomeHasPrice);\r\n\r\n                if (selectedPublicCharge == undefined && selectedHomeHasPriceCharge != undefined) {\r\n                    let tempList: vehicleModel.IVehicleOptions[] = [];\r\n                    chargingListFromStore.map((item: vehicleModel.IVehicleOptions) => {\r\n                        if (item.ChargeType == rdEnum.enumChargeType.Public || item.ChargeType == rdEnum.enumChargeType.HomeWithoutPrice) {\r\n                            tempList.push({ ...item, Disable: false });\r\n                        }\r\n                    });\r\n                    setChargeList(tempList);\r\n                }\r\n                else if (selectedPublicCharge == undefined && selectedHomeHasPriceCharge == undefined && selectedHomeWithoutPriceCharge == undefined) {\r\n                    //nothings selected\r\n                    let tempList: vehicleModel.IVehicleOptions[] = [];\r\n                    chargingListFromStore.map((item: vehicleModel.IVehicleOptions) => {\r\n                        if (item.ChargeType == rdEnum.enumChargeType.Public || item.ChargeType == rdEnum.enumChargeType.HomeWithoutPrice) {\r\n                            tempList.push({ ...item, Disable: false });\r\n                        }\r\n                    });\r\n                    setChargeList(tempList);\r\n                }\r\n                else if (selectedPublicCharge != undefined) {\r\n                    let tempList: vehicleModel.IVehicleOptions[] = [];\r\n                    chargingListFromStore.map((item: vehicleModel.IVehicleOptions) => {\r\n                        if (item.ChargeType == rdEnum.enumChargeType.Public || item.ChargeType == rdEnum.enumChargeType.HomeHasPrice) {\r\n                            tempList.push({ ...item, Disable: false });\r\n                        }\r\n                        //else if (item.ChargeType == rdEnum.enumChargeType.HomeHasPrice) {\r\n                        //    tempList.push(item);\r\n                        //}\r\n                    });\r\n                    setChargeList(tempList);\r\n                }\r\n                else if (selectedHomeWithoutPriceCharge != undefined) {\r\n                    let tempList: vehicleModel.IVehicleOptions[] = [];\r\n                    chargingListFromStore.map((item: vehicleModel.IVehicleOptions) => {\r\n                        if (item.ChargeType == rdEnum.enumChargeType.Public) {\r\n                            tempList.push({ ...item, Disable: true });\r\n                        } else if (item.ChargeType == rdEnum.enumChargeType.HomeWithoutPrice) {\r\n                            tempList.push(item);\r\n                        }\r\n                    });\r\n                    setChargeList(tempList);\r\n                }\r\n\r\n            }\r\n            else {\r\n                let tempList: vehicleModel.IVehicleOptions[] = [];\r\n                chargingListFromStore.map((item: vehicleModel.IVehicleOptions) => {\r\n                    if (item.ChargeType == rdEnum.enumChargeType.Public) {\r\n                        tempList.push({ ...item, Disable: false });\r\n                    } else if (item.ChargeType == rdEnum.enumChargeType.HomeWithoutPrice) {\r\n                        tempList.push(item);\r\n                    }\r\n                });\r\n                setChargeList(tempList);\r\n            }\r\n        }\r\n        else {\r\n            setChargeList([]);\r\n        }\r\n\r\n    }, [chargingListFromStore, selectedOptionsFromStore]);\r\n\r\n\r\n    const handleSelect = (item: vehicleModel.IVehicleOptions) => {\r\n        dispatch(selectedConfigStore.updateOptionAction(item));\r\n    };\r\n\r\n    const isSelectedOption = (item: vehicleModel.IVehicleOptions): boolean => {\r\n        if (isNil(selectedOptionsFromStore) || selectedOptionsFromStore.length == 0) return false;\r\n        let findSelectedOption = selectedOptionsFromStore.find((selectedItems: vehicleModel.IVehicleOptions) => {\r\n            return selectedItems?.YanaOptionID == item.YanaOptionID || selectedItems?.OptionName == item.OptionName;\r\n        });\r\n        return !isNil(findSelectedOption);\r\n    }\r\n\r\n    setTimeout(() => {\r\n        let chargingCheckbox = document.getElementsByName(\"charging\");\r\n        for (let i = 0; i < chargingCheckbox.length; i++) {\r\n            chargingCheckbox[i].setAttribute('data-dtm', 'charging');\r\n            chargingCheckbox[i].classList.add('stat-checkbox');\r\n        }\r\n\r\n    }, 200);\r\n\r\n\r\n    const chargingCurrencyFormat = (value: number | null) => {\r\n        let currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n            style: 'currency',\r\n            currency: 'AUD',\r\n        });\r\n\r\n\r\n        if (isNil(value))\r\n            return \"\";\r\n        if (value == 0)\r\n            return \"FREE\"\r\n        return \"+ \" + currencyFormatter.format(value);\r\n    }\r\n\r\n    return (\r\n        <div className='additional-container'>\r\n            <h3 className='main-page-section-title'>CHARGING</h3>\r\n            {\r\n                selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.Australia\r\n                ?\r\n                <p className='additional-desc'>LYRIQ comes with a 3-pin home charging cable and 1 year complimentary public charging. You can choose between an additional 2 years complimentary public charging, or a home charger installed.</p>\r\n                :\r\n                <p className='additional-desc'>LYRIQ comes with a 3-pin home charging cable and $400 complimentary public charging credit. You can choose between an additional $800 public charging credit, or a home charger installed.</p>\r\n            }\r\n            \r\n            {\r\n                !isNil(chargeList) && chargeList.length > 0 && chargeList.map((item: vehicleModel.IVehicleOptions, index: any) => {\r\n                    const header = <img alt=\"Card\" src={item.OptionPicture.length > 0 ? item.OptionPicture[0] : \"\"} />;\r\n                    let optionItem: vehicleModel.IVehicleOptions = {\r\n                        YanaOptionID: item.YanaOptionID,\r\n                        OptionType: rdEnum.enumVehicleOptionType.Charge,\r\n                        OptionName: item.OptionName,\r\n                        OptionPrice: item.OptionPrice, \r\n                        OptionPicture: [],\r\n                        OptionPictureMobile: [],\r\n                        OptionDesc: item.OptionDesc,\r\n                        ChargeType: item.ChargeType,\r\n                        Disable: item.Disable,\r\n                        TermsDescription: item.TermsDescription\r\n                    };\r\n                    return (\r\n                        <Card id={item + index} key={item + index}\r\n                            style={{\r\n                                padding: '.3rem',\r\n                                border: isSelectedOption(item) ? '2px solid #282828' : '1px solid #d2d2d2'\r\n                            }}\r\n                        >\r\n                            <div className={classNames({\r\n                                \"card-inner\": true,\r\n                                \"charging\": true,\r\n                                \"disabled-wrapper\": item.Disable,\r\n                            })}>\r\n                                <label className='card-header-img' htmlFor={`charging + ${item + index}`}>\r\n                                    <img alt=\"Card\" src={item.OptionPicture.length > 0 ? item.OptionPicture[0] : \"\"} />\r\n                                </label>\r\n                                <div className='checkbox-panel'>\r\n                                    <Checkbox\r\n                                        name=\"charging\"\r\n                                        inputId={`charging + ${item + index}`}\r\n                                        disabled={item.Disable}\r\n                                        onChange={() => {\r\n                                            handleSelect(optionItem);\r\n                                        }}\r\n                                        checked={isSelectedOption(item)}\r\n                                    ></Checkbox>\r\n                                    <label className='card-text-panel' htmlFor={`charging + ${item + index}`}>\r\n                                        <p>{item.OptionName}</p>\r\n                                        <div className='card-info-selection'>\r\n                                            {\r\n                                                !item.Disable\r\n                                                ?\r\n                                                <span>{currencyFormatCharging(item.OptionPrice || 0, item.OptionName, isSelectedOption(item))}</span>\r\n                                                :\r\n                                                <></>\r\n                                            }\r\n                                        </div>\r\n                                    </label>\r\n                                </div>\r\n                            </div>\r\n                            <div className='card-details'>\r\n                                <ChargingDialog  {...item} />\r\n                            </div>\r\n                        </Card>\r\n                    )\r\n                })\r\n            }\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Charging","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react'\r\nimport { Carousel } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport \"../App.scss\"\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nexport type CarouselDialogRef = {\r\n    handleOpen: (pageNumber: number) => void;\r\n};\r\n\r\ninterface CarouselDialogProps {\r\n    vehicle: {\r\n        variantAWD: string,\r\n        exteriorColor: string,\r\n        interiorColor: string\r\n    }\r\n    slideNumber: number;\r\n}\r\n\r\nconst CarCarouselDialog = forwardRef<CarouselDialogRef, CarouselDialogProps>((props , ref) => {\r\n    const isMobile = useCheckMobileScreen();\r\n    const {vehicle, slideNumber} = props;\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n    const [carouselPage, setCarouselPage] = useState(1);\r\n\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n\r\n    const getVariantImages = (index: number) => {\r\n            return vehicleFromStore?.SelectedVariant?.VariantPicture != null && vehicleFromStore?.SelectedVariant?.VariantPicture.length > index\r\n                ? vehicleFromStore?.SelectedVariant?.VariantPicture[index] : \"\";\r\n    }\r\n    const getExteriorImages = (index: number) => {\r\n        return vehicleFromStore?.SelectedExterior?.ExteriorPicture != null && vehicleFromStore?.SelectedExterior?.ExteriorPicture.length > index\r\n            ? vehicleFromStore?.SelectedExterior?.ExteriorPicture[index] : \"\";\r\n    }\r\n\r\n    const getInteriorImages = (index: number) => {\r\n        //if (isMobile) {\r\n        //    return vehicleFromStore?.SelectedInterior?.InteriorPictureMobile != null && vehicleFromStore?.SelectedInterior?.InteriorPictureMobile.length > index\r\n        //        ? vehicleFromStore?.SelectedInterior?.InteriorPictureMobile[index] : \"\";\r\n        //}\r\n        //else {\r\n            return vehicleFromStore?.SelectedInterior?.InteriorPicture != null && vehicleFromStore?.SelectedInterior?.InteriorPicture.length > index\r\n                ? vehicleFromStore?.SelectedInterior?.InteriorPicture[index] : \"\";\r\n        //}\r\n    }\r\n\r\n    useImperativeHandle(ref, () => ({\r\n        handleOpen: (pageNumber: number) => {\r\n            setDialogVisible(true);\r\n            setCarouselPage(pageNumber);\r\n            document.body.style.overflowY = 'hidden';\r\n            document.body.style.paddingRight = '15px';\r\n        },\r\n    }));\r\n\r\n    const handleClose = () => {\r\n        setDialogVisible(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    }\r\n\r\n    const handleSelect = (selectedIndex: any, e: any) => {\r\n        setCarouselPage(selectedIndex);\r\n    };\r\n\r\n    return (\r\n\r\n        <Dialog className='carousel-dialog' visible={dialogVisible} position='bottom' draggable={false} resizable={true} onHide={() => handleClose()}>\r\n            <Carousel\r\n                defaultActiveIndex={slideNumber}\r\n                activeIndex={carouselPage}\r\n                onSelect={handleSelect}\r\n                prevIcon = { \r\n                    carouselPage < 4\r\n                    ?\r\n                    <img alt=\"\" src={`${getCMSAssets()}/main/Prev.svg`} />\r\n                    :\r\n                    <img alt=\"\" src={`${getCMSAssets()}/main/Prev-white.svg`} />\r\n                }\r\n                nextIcon = {\r\n                    carouselPage < 4\r\n                    ?\r\n                        <img alt=\"\" src={`${getCMSAssets()}/main/Next.svg`} />\r\n                    :\r\n                        <img alt=\"\" src={`${getCMSAssets()}/main/Next-white.svg`} />\r\n                }\r\n            >\r\n                <Carousel.Item>\r\n                    <img className=\"image\" src={getExteriorImages(0)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item>\r\n                    <img className=\"image\" src={getExteriorImages(1)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item>\r\n                    <img className=\"image\" src={getExteriorImages(2)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item>\r\n                    <img className=\"image\" src={getExteriorImages(3)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item>\r\n                    <img className=\"image\" src={getInteriorImages(0)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item>\r\n                    <img className=\"image\" src={getInteriorImages(1)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item>\r\n                    <img className=\"image\" src={getInteriorImages(2)} />\r\n                </Carousel.Item>\r\n            </Carousel>\r\n            {\r\n                carouselPage != 4 && carouselPage != 5 && carouselPage != 6\r\n                ?\r\n                <img alt=\"\" className='close-icon' onClick={() => handleClose()} src={`${getCMSAssets()}/main/cross.svg`} />\r\n                :\r\n                <img alt=\"\" className='close-icon' onClick={() => handleClose()} src={`${getCMSAssets()}/main/cross-white.svg`} />\r\n            }\r\n        </Dialog>\r\n\r\n    )\r\n})\r\n\r\nexport default CarCarouselDialog","import { getCMSAssets } from 'helpers/Uri'\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { useEffect, useRef, useState } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { Carousel } from 'react-bootstrap'\r\nimport CarCarouselDialog, { CarouselDialogRef } from './CarCarouselDialog'\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { isNil } from 'lodash';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { classNames } from 'primereact/utils'\r\n\r\nconst CarCarousel = (props: any) => {\r\n\r\n    const { variantAWD, exteriorColor, interiorColor, carouselInterval, images, mobileImages, isUseImages } = props;\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n\r\n    const [vehicle, setVehicle] = useState({\r\n        variantAWD: \"\",\r\n        exteriorColor: \"\",\r\n        interiorColor: \"\"\r\n    });\r\n\r\n    useEffect(() => {\r\n        setVehicle({\r\n            variantAWD: variantAWD,\r\n            exteriorColor: exteriorColor,\r\n            interiorColor: interiorColor\r\n        })\r\n    }, [])\r\n\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n\r\n    const getVariantImages = (index: number) => {\r\n        return vehicleFromStore?.SelectedVariant?.VariantPicture != null && vehicleFromStore?.SelectedVariant?.VariantPicture.length > index\r\n            ? vehicleFromStore?.SelectedVariant?.VariantPicture[index] : \"\";\r\n    }\r\n    const getExteriorImages = (index: number) => {\r\n        return vehicleFromStore?.SelectedExterior?.ExteriorPicture != null && vehicleFromStore?.SelectedExterior?.ExteriorPicture.length > index\r\n            ? vehicleFromStore?.SelectedExterior?.ExteriorPicture[index] : \"\";\r\n    }\r\n\r\n\r\n    const getInteriorImages = (index: number) => {\r\n        //if (isMobile) {\r\n        //    return vehicleFromStore?.SelectedInterior?.InteriorPictureMobile != null && vehicleFromStore?.SelectedInterior?.InteriorPictureMobile.length > index\r\n        //        ? vehicleFromStore?.SelectedInterior?.InteriorPictureMobile[index] : \"\";\r\n        //}\r\n        //else {\r\n        return vehicleFromStore?.SelectedInterior?.InteriorPicture != null && vehicleFromStore?.SelectedInterior?.InteriorPicture.length > index\r\n            ? vehicleFromStore?.SelectedInterior?.InteriorPicture[index] : \"\";\r\n        //}\r\n    }\r\n\r\n\r\n    const carouselDialogRef = useRef<CarouselDialogRef | null>(null);\r\n\r\n    const directionButtons = (direction: any) => {\r\n        return (\r\n            <span\r\n                aria-hidden=\"true\"\r\n                className={direction === \"Next\" ? \"button-next\" : \"button-prev\"}\r\n            >\r\n                <img className={classNames({\r\n                    \"image\": true,\r\n                    \"stat-arrow-next\": true\r\n                })}\r\n                    data-dtm=\"gallery\"\r\n                    src={`${getCMSAssets()}/main/slider-arrow-${direction}.svg`}\r\n                    alt={direction === \"Next\" ? \"next arrow\" : \"previous arrow\"} />\r\n            </span>\r\n        );\r\n    };\r\n\r\n    const handleOpen = (pageNumber: number) => {\r\n        if (carouselDialogRef.current) {\r\n            carouselDialogRef.current.handleOpen(pageNumber);\r\n\r\n\r\n        }\r\n    };\r\n\r\n\r\n    setTimeout(() => {\r\n        let indicators = document.getElementsByClassName(\"carousel-indicators\");\r\n        for (let i = 0; i < indicators.length; i++) {\r\n            indicators[i].setAttribute('data-dtm', 'gallery');\r\n            indicators[i].classList.add('stat-dots');\r\n        }\r\n    }, 200);\r\n\r\n\r\n    if (isUseImages) {\r\n        if (!isMobile && !isNil(images) && images.length > 0) {\r\n            return (\r\n                <>\r\n                    <Carousel\r\n                        nextIcon={directionButtons(\"Next\")}\r\n                        prevIcon={directionButtons(\"Prev\")}\r\n                        interval={carouselInterval}\r\n                    >\r\n                        {images.map((item: any, index: number) => {\r\n                            return (\r\n                                <Carousel.Item onClick={() => handleOpen(index)} key={item + index}>\r\n                                    <img className=\"image\" src={item} />\r\n                                </Carousel.Item>\r\n                            );\r\n                        })}\r\n                    </Carousel>\r\n                </>\r\n            );\r\n        }\r\n        else if (isMobile && !isNil(mobileImages) && mobileImages.length > 0) {\r\n            return (\r\n                <>\r\n                    <Carousel\r\n                        nextIcon={directionButtons(\"Next\")}\r\n                        prevIcon={directionButtons(\"Prev\")}\r\n                        interval={carouselInterval}\r\n                    >\r\n                        {mobileImages.map((item: any, index: number) => {\r\n                            return (\r\n                                <Carousel.Item onClick={() => handleOpen(index)} key={item + index}>\r\n                                    <img className=\"image\" src={item} />\r\n                                </Carousel.Item>\r\n                            );\r\n                        })}\r\n                    </Carousel>\r\n                </>\r\n            );\r\n\r\n        }\r\n        else {\r\n            return (<></>);\r\n        }\r\n    }\r\n    return (\r\n        <>\r\n            {/*todo: sample data. will remove it later*/}\r\n            <Carousel\r\n                nextIcon={directionButtons(\"Next\")}\r\n                prevIcon={directionButtons(\"Prev\")}\r\n                interval={carouselInterval}\r\n            >\r\n                <Carousel.Item\r\n                // onClick={() => handleOpen(0)}\r\n                >\r\n                    <img className=\"image\" src={getExteriorImages(0)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item\r\n                // onClick={() => handleOpen(1)}\r\n                >\r\n                    <img className=\"image\" src={getExteriorImages(1)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item\r\n                // onClick={() => handleOpen(2)}\r\n                >\r\n                    <img className=\"image\" src={getExteriorImages(2)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item\r\n                // onClick={() => handleOpen(3)}\r\n                >\r\n                    <img className=\"image\" src={getExteriorImages(3)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item\r\n                // onClick={() => handleOpen(4)}\r\n                >\r\n                    <img className=\"image\" src={getInteriorImages(0)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item\r\n                // onClick={() => handleOpen(5)}\r\n                >\r\n                    <img className=\"image\" src={getInteriorImages(1)} />\r\n                </Carousel.Item>\r\n                <Carousel.Item\r\n                // onClick={() => handleOpen(6)}\r\n                >\r\n                    <img className=\"image\" src={getInteriorImages(2)} />\r\n                </Carousel.Item>\r\n            </Carousel>\r\n\r\n            <CarCarouselDialog slideNumber={0} vehicle={vehicle} ref={carouselDialogRef} />\r\n        </>\r\n    )\r\n}\r\n\r\nexport default CarCarousel","import React, { useEffect, useRef, useState } from 'react';\r\nimport {\r\n    getCMSAssets\r\n} from 'helpers/Uri';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { IAppState } from 'model/IAppState';\r\nimport CarCarousel from 'components/CarCarousel';\r\nimport { useCheckMobileScreen } from \"helpers/useCheckMobileScreen\";\r\nimport { isNil } from 'lodash';\r\nimport { v1 } from 'uuid';\r\n\r\nconst MainLeftImageGrid = (props: any) => {\r\n    const isMobile = useCheckMobileScreen();\r\n    const [imgExpand, setImgExpand] = useState<Boolean>(false);\r\n\r\n    const topPanel = document.querySelector('.top-panel') as HTMLElement;\r\n    const bottomPanel = document.querySelector('.bottom-panel') as HTMLElement;\r\n\r\n    const [expanded, setExpanded] = useState({\r\n        topExpand: false,\r\n        bottomExpand: false,\r\n    });\r\n\r\n    //todo: remove it later\r\n    //Customise Exterior & Interior & Variant AWD of Cadillac\r\n    const [customize, setCustomize] = useState({\r\n        variantAWD: 'Luxury',\r\n        exteriorColor: 'Argent Silver Metallic',\r\n        interiorColor: 'Juniper Nappa',\r\n        addsOn: [],\r\n        charging: [],\r\n        customerType: 'business',\r\n        paymentType: 'Cash',\r\n        postcode: '',\r\n        invalidPostcode: false,\r\n        deliveryType: 'Pick Up',\r\n    });\r\n\r\n    const customerType = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n\r\n    const [activeImage, setActiveImage] = useState(1);\r\n    // const [shouldRevert, setShouldRevert] = useState(false);\r\n\r\n    const sectionName = useSelector((state: IAppState) => {\r\n        return state.mainSection;\r\n    });\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n\r\n    const mainPageNumber = useSelector((state: IAppState) => {\r\n        return state.mainPageNumber.mainPageNumber;\r\n    });\r\n\r\n    const getVariantImages = (index: number) => {\r\n        return vehicleFromStore?.SelectedVariant?.VariantPicture != null && vehicleFromStore?.SelectedVariant?.VariantPicture.length > index\r\n            ? vehicleFromStore?.SelectedVariant?.VariantPicture[index] : \"\";\r\n    }\r\n\r\n    const getExteriorImages = (index: number) => {\r\n        return vehicleFromStore?.SelectedExterior?.ExteriorPicture != null && vehicleFromStore?.SelectedExterior?.ExteriorPicture.length > index\r\n            ? vehicleFromStore?.SelectedExterior?.ExteriorPicture[index] : \"\";\r\n    }\r\n\r\n\r\n\r\n    const getInteriorImages = (index: number) => {\r\n        //interior does not have mobile vehicle image\r\n        //if (isMobile) {\r\n        //    return vehicleFromStore?.SelectedInterior?.InteriorPictureMobile != null && vehicleFromStore?.SelectedInterior?.InteriorPictureMobile.length > index\r\n        //        ? vehicleFromStore?.SelectedInterior?.InteriorPictureMobile[index] : \"\";\r\n        //}\r\n        //else {\r\n        return vehicleFromStore?.SelectedInterior?.InteriorPicture != null && vehicleFromStore?.SelectedInterior?.InteriorPicture.length > index\r\n            ? vehicleFromStore?.SelectedInterior?.InteriorPicture[index] : \"\";\r\n        //}\r\n    }\r\n\r\n    const [initialImage, setInitialImage] = useState({\r\n        fullView: getExteriorImages(0) || '',\r\n        frontView: getExteriorImages(1) || '',\r\n        backView: getExteriorImages(2) || '',\r\n        sideView: getExteriorImages(3) || '',\r\n    });\r\n\r\n    const [initialInteriorImage, setInitialInteriorImage] = useState({\r\n        interirorFullView: getInteriorImages(0) || '',\r\n        interirorFrontView: getInteriorImages(1) || '',\r\n        interirorBackView: getInteriorImages(2) || '',\r\n    });\r\n\r\n    //Why set another set of carImage besides of initialImage, and why align 2 <img> within a image div?\r\n    //Because one covers another and purpose to provide color transition \r\n    const [carImage, setCarImage] = useState({\r\n        fullView: getExteriorImages(0) || '',\r\n        frontView: getExteriorImages(1) || '',\r\n        backView: getExteriorImages(2) || '',\r\n        sideView: getExteriorImages(3) || '',\r\n    });\r\n    const [carInteriorImage, setCarInteriorImage] = useState({\r\n        interirorFullView: getInteriorImages(0) || '',\r\n        interirorFrontView: getInteriorImages(1) || '',\r\n        interirorBackView: getInteriorImages(2) || '',\r\n    });\r\n\r\n    //***Core code***\r\n    //Manipulates left image grid's transition effect could operate smoothly when Exterior or Interior color were changed\r\n    useEffect(() => {\r\n\r\n        if (vehicleFromStore?.SelectedExterior?.ExteriorColorName\r\n            || (vehicleFromStore?.SelectedInterior?.VariantName)\r\n        ) {\r\n            setInitialImage({\r\n                ...initialImage,\r\n                fullView: initialImage.fullView,\r\n                frontView: initialImage.frontView,\r\n                backView: initialImage.backView,\r\n                sideView: initialImage.sideView,\r\n            });\r\n\r\n\r\n\r\n            setCarImage({\r\n                ...carImage,\r\n                fullView: getExteriorImages(0),\r\n                frontView: getExteriorImages(1),\r\n                backView: getExteriorImages(2),\r\n                sideView: getExteriorImages(3),\r\n            });\r\n            setActiveImage(2);\r\n\r\n\r\n            setTimeout(() => {\r\n                setInitialImage({\r\n                    ...initialImage,\r\n                    fullView: getExteriorImages(0),\r\n                    frontView: getExteriorImages(1),\r\n                    backView: getExteriorImages(2),\r\n                    sideView: getExteriorImages(3),\r\n                });\r\n                setActiveImage(1);\r\n            }, 400);\r\n        }\r\n\r\n    }, [vehicleFromStore?.SelectedExterior?.ExteriorColorName, vehicleFromStore?.SelectedInterior?.VariantName]);\r\n\r\n    useEffect(() => {\r\n        if (vehicleFromStore?.SelectedInterior?.InteriorColorName) {\r\n            setInitialInteriorImage({\r\n                interirorFullView: initialInteriorImage.interirorFullView,\r\n                interirorFrontView: initialInteriorImage.interirorFrontView,\r\n                interirorBackView: initialInteriorImage.interirorBackView,\r\n            });\r\n\r\n\r\n            setCarInteriorImage({\r\n                ...carImage,\r\n                interirorFullView: getInteriorImages(0),\r\n                interirorFrontView: getInteriorImages(1),\r\n                interirorBackView: getInteriorImages(2),\r\n            });\r\n\r\n            setActiveImage(2);\r\n\r\n            setTimeout(() => {\r\n                setInitialInteriorImage({\r\n                    interirorFullView: getInteriorImages(0),\r\n                    interirorFrontView: getInteriorImages(1),\r\n                    interirorBackView: getInteriorImages(2),\r\n                });\r\n\r\n                setActiveImage(1);\r\n            }, 550);\r\n        }\r\n\r\n    }, [vehicleFromStore?.SelectedInterior?.InteriorColorName]);\r\n\r\n    const handleImgExpand = (selectedClassName: any) => {\r\n        const imageDivs = document.querySelectorAll('.transition-group-full');\r\n\r\n        imageDivs.forEach((element) => {\r\n            if (selectedClassName == 'cadillac-full-0' || selectedClassName == 'cadillac-front-1' && topPanel && bottomPanel) {\r\n                // topPanel.style.setProperty('--row-0-flex-basis', '100%');\r\n                // bottomPanel.style.setProperty('--row-1-flex-basis', '0%');\r\n                topPanel.classList.add('expand');\r\n                topPanel.classList.remove('collapse');\r\n                bottomPanel.classList.add('collapse');\r\n                bottomPanel.classList.remove('expand');\r\n                setExpanded({\r\n                    topExpand: true,\r\n                    bottomExpand: false,\r\n                })\r\n            } else if (selectedClassName == 'cadillac-back-2' || selectedClassName == 'cadillac-side-3' && topPanel && bottomPanel) {\r\n                // topPanel.style.setProperty('--row-0-flex-basis', '0%');\r\n                // bottomPanel.style.setProperty('--row-1-flex-basis', '100%');\r\n                topPanel.classList.add('collapse');\r\n                topPanel.classList.remove('expand');\r\n                bottomPanel.classList.add('expand');\r\n                bottomPanel.classList.remove('collapse');\r\n                setExpanded({\r\n                    topExpand: false,\r\n                    bottomExpand: true,\r\n                })\r\n            }\r\n\r\n            let tileIndex = parseInt(selectedClassName.split('-').pop());\r\n\r\n            for (let i = 0; i <= 3; i++) {\r\n                const value = i === tileIndex ? '100%' : '0%';\r\n                document.documentElement.style.setProperty(`--tile-${i}-flex-basis`, value);\r\n            }\r\n        });\r\n\r\n        setImgExpand(true);\r\n    }\r\n\r\n    const handleClose = () => {\r\n\r\n        setExpanded({\r\n            topExpand: false,\r\n            bottomExpand: false,\r\n        })\r\n        setImgExpand(false);\r\n\r\n        if (sectionName.mainSection == 'variant') {\r\n            document.documentElement.style.setProperty(`--tile-0-flex-basis`, '72%');\r\n            document.documentElement.style.setProperty(`--tile-1-flex-basis`, '28%');\r\n            document.documentElement.style.setProperty(`--tile-2-flex-basis`, '50%');\r\n            document.documentElement.style.setProperty(`--tile-3-flex-basis`, '50%');\r\n            topPanel?.style.setProperty('--row-0-flex-basis', '60%');\r\n            bottomPanel?.style.setProperty('--row-1-flex-basis', '40%');\r\n        } else if (sectionName.mainSection == 'exterior') {\r\n            document.documentElement.style.setProperty(`--tile-0-flex-basis`, '60%');\r\n            document.documentElement.style.setProperty(`--tile-1-flex-basis`, '40%');\r\n            document.documentElement.style.setProperty(`--tile-2-flex-basis`, '50%');\r\n            document.documentElement.style.setProperty(`--tile-3-flex-basis`, '50%');\r\n            topPanel?.style.setProperty('--row-0-flex-basis', '50%');\r\n            bottomPanel?.style.setProperty('--row-1-flex-basis', '50%');\r\n        } else if (sectionName.mainSection == 'interior') {\r\n            document.documentElement.style.setProperty(`--tile-0-flex-basis`, '100%');\r\n            document.documentElement.style.setProperty(`--tile-1-flex-basis`, '0%');\r\n            document.documentElement.style.setProperty(`--tile-2-flex-basis`, '50%');\r\n            document.documentElement.style.setProperty(`--tile-3-flex-basis`, '50%');\r\n            topPanel?.style.setProperty('--row-0-flex-basis', '60%');\r\n            bottomPanel?.style.setProperty('--row-1-flex-basis', '40%');\r\n        }\r\n    }\r\n\r\n    useEffect(() => {\r\n\r\n        window.scrollTo(0, 0);\r\n\r\n        return () => { }\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        handleClose();\r\n    }, [sectionName.mainSection])\r\n\r\n    useEffect(() => {\r\n        setCustomize({\r\n            ...customize,\r\n            customerType: customerType\r\n        })\r\n    }, [customerType]);\r\n\r\n\r\n\r\n    return (\r\n        <div className='left-slider-container' style={{ position: 'sticky' }}\r\n        // style={{ position: mainPageNumber == 0 ? 'sticky' : 'fixed' }}\r\n        >\r\n            {\r\n                imgExpand == true && sectionName.mainSection != 'interior'\r\n                    ?\r\n                    <div className='close-panel'>\r\n                        <img onClick={() => handleClose()} className=\"img stat-icon-link\"\r\n                            data-dtm=\"gallery\"\r\n                            src={`${getCMSAssets()}/main/cross.svg`} alt=\"expand\" />\r\n                    </div>\r\n                    :\r\n                    imgExpand == true && sectionName.mainSection == 'interior'\r\n                        ?\r\n                        <div className='close-panel'>\r\n                            <img onClick={() => handleClose()} className=\"img stat-icon-link\"\r\n                                data-dtm=\"gallery\"\r\n                                src={`${getCMSAssets()}/main/cross-white.svg`} alt=\"expand\" />\r\n                        </div>\r\n                        :\r\n                        <></>\r\n            }\r\n\r\n            {\r\n                (sectionName.mainSection != 'accessories' && sectionName.mainSection != 'charging' && sectionName.mainSection != 'payment' && sectionName.mainSection != 'checkout' && sectionName.mainSection != 'delivery' && sectionName.mainSection != 'checkoutForm') && (\r\n                    <>\r\n                        <div className={`top-panel ${expanded.topExpand && !expanded.bottomExpand ? 'expand' : !expanded.topExpand && expanded.bottomExpand ? 'collapse' : ''}`}>\r\n                            <div className='cadillac-full-0'>\r\n\r\n                                <div className='transition-group-full'>\r\n                                    <div className={`${sectionName.mainSection != 'interior' ? 'img-panel' : imgExpand ? 'interior-enlarged' : 'interior'} ${activeImage === 2 ? 'active' : ''}`}>\r\n                                        {\r\n                                            sectionName.mainSection != 'interior'\r\n                                                ?\r\n\r\n                                                <>\r\n                                                    {initialImage.fullView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-full-0')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={initialImage.fullView}\r\n                                                            alt=\"Vehicle Full View\"\r\n                                                        />\r\n                                                    )}\r\n                                                    {carImage.fullView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-full-0')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={carImage.fullView || getExteriorImages(0)}\r\n                                                            alt=\"Vehicle Full View\"\r\n                                                        />\r\n                                                    )}\r\n                                                </>\r\n                                                :\r\n                                                <>\r\n                                                    {initialInteriorImage.interirorFrontView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-full-0')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={initialInteriorImage.interirorFrontView}\r\n                                                            alt=\"Vehicle Front View\"\r\n                                                        />\r\n                                                    )}\r\n\r\n                                                    {carInteriorImage.interirorFrontView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-full-0')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={carInteriorImage.interirorFrontView || getExteriorImages(1)}\r\n                                                            alt=\"Vehicle Front View\"\r\n                                                        />\r\n                                                    )}\r\n                                                </>\r\n                                        }\r\n                                    </div>\r\n                                    {/*{*/}\r\n                                    {/*    !imgExpand && sectionName.mainSection != 'interior'*/}\r\n                                    {/*        ?*/}\r\n                                    {/*        <div className='close-panel'>*/}\r\n                                    {/*            <img onClick={() => handleImgExpand('cadillac-full-0')}*/}\r\n                                    {/*                className=\"img stat-icon-link\"*/}\r\n                                    {/*                data-dtm=\"gallery\"*/}\r\n                                    {/*                src={`${getCMSAssets()}/main/expand.svg`}*/}\r\n                                    {/*                alt=\"expand\"*/}\r\n                                    {/*            />*/}\r\n                                    {/*        </div>*/}\r\n                                    {/*        :*/}\r\n                                    {/*        !imgExpand && sectionName.mainSection == 'interior'*/}\r\n                                    {/*            ?*/}\r\n                                    {/*            <div className='close-panel'>*/}\r\n                                    {/*                <img onClick={() => handleImgExpand('cadillac-full-0')}*/}\r\n                                    {/*                    data-dtm=\"gallery\"*/}\r\n                                    {/*                    className=\"img stat-icon-link\"*/}\r\n                                    {/*                    src={`${getCMSAssets()}/main/expand-white.svg`}*/}\r\n                                    {/*                    alt=\"expand\"*/}\r\n                                    {/*                />*/}\r\n                                    {/*            </div>*/}\r\n                                    {/*            :*/}\r\n                                    {/*            <></>*/}\r\n\r\n                                    {/*}*/}\r\n                                </div>\r\n                            </div>\r\n                            {\r\n                                sectionName.mainSection == 'global'\r\n                                    ?\r\n                                    <div className='cadillac-front-1'>\r\n                                        <div className='transition-group-variant'>\r\n                                            <div className='counter-container'>\r\n                                            <div className='counter-item'>\r\n\r\n                                                <div className='counter-title'>Range<sup>3</sup></div>\r\n                                                    <div className='counter-box'>\r\n                                                        <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.Range}</div>\r\n\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='counter-item'>\r\n                                                    {/* <div className='counter-title'>15min charge at 190kW⁶</div> */}\r\n                                                    <div className='counter-title'>Charge to 80%<sup>4</sup></div>\r\n\r\n                                                    <div className='counter-box'>\r\n                                                        <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.Power}</div>\r\n\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='counter-item'>\r\n                                                    <div className='counter-title'>0-100 km/h<sup>5</sup></div>\r\n                                                        <div className='counter-box'>\r\n                                                            <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.KmHour}</div>\r\n\r\n                                                        </div>\r\n                                                    </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n                                    :\r\n                                    sectionName.mainSection == 'variant'\r\n                                        ?\r\n                                        <div className='cadillac-front-1'>\r\n                                            <div className='transition-group-variant'>\r\n                                                <div className='counter-container'>\r\n                                                    <div className='counter-item'>\r\n\r\n                                                        <div className='counter-title'>Range<sup>3</sup></div>\r\n                                                        <div className='counter-box'>\r\n                                                            <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.Range}</div>\r\n\r\n                                                        </div>\r\n                                                    </div>\r\n                                                    <div className='counter-item'>\r\n                                                        {/* <div className='counter-title'>15min charge at 190kW⁶</div> */}\r\n                                                        <div className='counter-title'>Charge to 80%<sup>4</sup></div>\r\n\r\n                                                        <div className='counter-box'>\r\n                                                            <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.Power}</div>\r\n\r\n                                                        </div>\r\n                                                    </div>\r\n                                                    <div className='counter-item'>\r\n                                                        <div className='counter-title'>0-100 km/h<sup>5</sup></div>\r\n                                                        <div className='counter-box'>\r\n                                                            <div className=\"counter\">{vehicleFromStore?.SelectedVariant?.KmHour}</div>\r\n\r\n                                                        </div>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                        :\r\n                                        sectionName.mainSection == 'exterior'\r\n                                            ?\r\n                                            <div className='cadillac-front-1' >\r\n                                                <div className='transition-group-full' >\r\n\r\n\r\n                                                    <div\r\n                                                        className={`img-panel ${imgExpand ? 'expanded' : ''} ${activeImage === 2 ? 'active' : ''}`}\r\n                                                        onClick={() => (imgExpand ? handleClose() : handleImgExpand('cadillac-front-1'))}\r\n\r\n                                                    >\r\n                                                        {initialImage.frontView && (\r\n                                                            <img\r\n                                                                className='image stat-image-link'\r\n                                                                data-dtm=\"gallery\"\r\n                                                                src={initialImage.frontView}\r\n                                                                alt=\"Vehicle Front View\"\r\n                                                            />\r\n                                                        )}\r\n                                                        {carImage.frontView && (\r\n                                                            <img\r\n                                                                className='image stat-image-link'\r\n                                                                data-dtm=\"gallery\"\r\n                                                                src={carImage.frontView}\r\n                                                                alt=\"Vehicle Front View\"\r\n                                                            />\r\n                                                        )}\r\n                                                    </div>\r\n                                                </div>\r\n                                                {/*{*/}\r\n                                                {/*    !imgExpand && sectionName.mainSection != 'interior'*/}\r\n                                                {/*        ?*/}\r\n                                                {/*        <div className='close-panel'>*/}\r\n                                                {/*            <img onClick={() => handleImgExpand('cadillac-front-1')}*/}\r\n                                                {/*                data-dtm=\"gallery\"*/}\r\n                                                {/*                className=\"img stat-icon-link\"*/}\r\n                                                {/*                src={`${getCMSAssets()}/main/expand.svg`}*/}\r\n                                                {/*                alt=\"Expand\"*/}\r\n                                                {/*            />*/}\r\n                                                {/*        </div>*/}\r\n                                                {/*        :*/}\r\n                                                {/*        !imgExpand && sectionName.mainSection == 'interior'*/}\r\n                                                {/*            ?*/}\r\n                                                {/*            <div className='close-panel'>*/}\r\n                                                {/*                <img onClick={() => handleImgExpand('cadillac-full-0')}*/}\r\n                                                {/*                    data-dtm=\"gallery\"*/}\r\n                                                {/*                    className=\"img stat-icon-link\"*/}\r\n                                                {/*                    src={`${getCMSAssets()}/main/expand-white.svg`}*/}\r\n                                                {/*                    alt=\"Expand\"*/}\r\n                                                {/*                />*/}\r\n                                                {/*            </div>*/}\r\n                                                {/*            :*/}\r\n                                                {/*            <></>*/}\r\n\r\n                                                {/*}*/}\r\n                                            </div>\r\n                                            :\r\n                                            sectionName.mainSection == 'interior'\r\n                                                ?\r\n                                                <div className='cadillac-front-1' style={{ margin: '0' }}>\r\n                                                    <div className='transition-group-full' >\r\n                                                        <div\r\n                                                            className={`img-panel ${imgExpand ? 'expanded' : ''} ${activeImage === 2 ? 'active' : ''}`}\r\n                                                        >\r\n                                                            {initialImage.frontView && (\r\n                                                                <img\r\n                                                                    className='image stat-image-link'\r\n                                                                    data-dtm=\"gallery\"\r\n                                                                    src={initialImage.frontView}\r\n                                                                    alt=\"Vehicle Front View\"\r\n                                                                />\r\n                                                            )}\r\n                                                            {carImage.frontView && (\r\n                                                                <img\r\n                                                                    className='image stat-image-link'\r\n                                                                    data-dtm=\"gallery\"\r\n                                                                    src={carImage.frontView}\r\n                                                                    alt=\"Vehicle Front View\"\r\n                                                                />\r\n                                                            )}\r\n                                                        </div>\r\n                                                    </div>\r\n                                                </div>\r\n                                                :\r\n                                                <></>\r\n                            }\r\n                        </div>\r\n\r\n                        <div className={`bottom-panel ${!expanded.topExpand && expanded.bottomExpand ? 'expand' : expanded.topExpand && !expanded.bottomExpand ? 'collapse' : ''}`}>\r\n                            <div className='cadillac-back-2'>\r\n                                <div className='transition-group-full'>\r\n                                    <div className={`${sectionName.mainSection != 'interior' ? 'img-panel' : imgExpand ? 'interior-enlarged' : 'interior'} ${activeImage === 2 ? 'active' : ''}`}>\r\n                                        {\r\n                                            sectionName.mainSection != 'interior'\r\n                                                ?\r\n\r\n                                                <>\r\n                                                    {initialImage.backView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-back-2')}\r\n                                                            data-dtm=\"gallery\"\r\n                                                            className=\"image stat-image-link\"\r\n                                                            src={initialImage.backView}\r\n                                                            alt=\"Vehicle Back View\"\r\n                                                        />\r\n                                                    )}\r\n                                                    {carImage.backView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-back-2')}\r\n                                                            data-dtm=\"gallery\"\r\n                                                            className=\"image stat-image-link\"\r\n                                                            src={carImage.backView}\r\n                                                            alt=\"Vehicle Back View\"\r\n                                                        />\r\n                                                    )}\r\n                                                </>\r\n                                                :\r\n                                                <>\r\n                                                    {initialInteriorImage.interirorBackView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-back-2')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={initialInteriorImage.interirorBackView}\r\n                                                            alt=\"Vehicle Back View\"\r\n                                                        />\r\n                                                    )}\r\n                                                    {carInteriorImage.interirorBackView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-back-2')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={carInteriorImage.interirorBackView}\r\n                                                            alt=\"Vehicle Back View\"\r\n                                                        />\r\n                                                    )}\r\n                                                </>\r\n                                        }\r\n                                    </div>\r\n                                    {/*{*/}\r\n                                    {/*    !imgExpand && sectionName.mainSection != 'interior'*/}\r\n                                    {/*        ?*/}\r\n                                    {/*        <div className='close-panel'>*/}\r\n                                    {/*            <img onClick={() => handleImgExpand('cadillac-back-2')} className=\"img stat-icon-link\"*/}\r\n                                    {/*                alt=\"Expand\" data-dtm=\"gallery\"*/}\r\n                                    {/*                src={`${getCMSAssets()}/main/expand.svg`} />*/}\r\n                                    {/*        </div>*/}\r\n                                    {/*        :*/}\r\n                                    {/*        !imgExpand && sectionName.mainSection == 'interior'*/}\r\n                                    {/*            ?*/}\r\n                                    {/*            <div className='close-panel'>*/}\r\n                                    {/*                <img onClick={() => handleImgExpand('cadillac-full-0')} className=\"img stat-icon-link\"*/}\r\n                                    {/*                    alt=\"Expand\" data-dtm=\"gallery\"*/}\r\n                                    {/*                    src={`${getCMSAssets()}/main/expand-white.svg`} />*/}\r\n                                    {/*            </div>*/}\r\n                                    {/*            :*/}\r\n                                    {/*            <></>*/}\r\n\r\n                                    {/*}*/}\r\n                                </div>\r\n                            </div>\r\n                            <div className='cadillac-side-3'>\r\n                                <div className='transition-group-full'>\r\n                                    <div className={`${sectionName.mainSection != 'interior' ? 'img-panel' : imgExpand ? 'interior-enlarged' : 'interior'} ${activeImage === 2 ? 'active' : ''}`}>\r\n                                        {\r\n                                            sectionName.mainSection != 'interior'\r\n                                                ?\r\n                                                <>\r\n                                                    {initialImage.sideView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-side-3')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={initialImage.sideView}\r\n                                                            alt=\"Vehicle Side View\"\r\n                                                        />\r\n                                                    )}\r\n                                                    {carImage.sideView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-side-3')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={carImage.sideView}\r\n                                                            alt=\"Vehicle Side View\"\r\n                                                        />\r\n                                                    )}\r\n                                                </>\r\n                                                :\r\n                                                <>\r\n                                                    {initialInteriorImage.interirorFullView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-side-3')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={initialInteriorImage.interirorFullView}\r\n                                                            alt=\"Vehicle Full View\"\r\n                                                        />\r\n                                                    )}\r\n                                                    {carInteriorImage.interirorFullView && (\r\n                                                        <img\r\n                                                            onClick={() => imgExpand ? handleClose() : handleImgExpand('cadillac-side-3')}\r\n                                                            className=\"image stat-image-link\"\r\n                                                            data-dtm=\"gallery\"\r\n                                                            src={carInteriorImage.interirorFullView}\r\n                                                            alt=\"Vehicle Full View\"\r\n                                                        />\r\n                                                    )}\r\n                                                </>\r\n                                        }\r\n                                    </div>\r\n                                    {/*{*/}\r\n                                    {/*    !imgExpand && sectionName.mainSection != 'interior'*/}\r\n                                    {/*        ?*/}\r\n                                    {/*        <div className='close-panel'>*/}\r\n                                    {/*            <img onClick={() => handleImgExpand('cadillac-side-3')} className=\"img stat-icon-link\"*/}\r\n                                    {/*                data-dtm=\"gallery\"*/}\r\n                                    {/*                alt=\"Expand\"*/}\r\n                                    {/*                src={`${getCMSAssets()}/main/expand.svg`} />*/}\r\n                                    {/*        </div>*/}\r\n                                    {/*        :*/}\r\n                                    {/*        !imgExpand && sectionName.mainSection == 'interior'*/}\r\n                                    {/*            ?*/}\r\n                                    {/*            <div className='close-panel'>*/}\r\n                                    {/*                <img onClick={() => handleImgExpand('cadillac-full-0')} className=\"img stat-icon-link\"*/}\r\n                                    {/*                    data-dtm=\"gallery\"*/}\r\n                                    {/*                    alt=\"Expand\"*/}\r\n                                    {/*                    src={`${getCMSAssets()}/main/expand-white.svg`} />*/}\r\n                                    {/*            </div>*/}\r\n                                    {/*            :*/}\r\n                                    {/*            <></>*/}\r\n\r\n                                    {/*}*/}\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </>\r\n                )\r\n            }\r\n\r\n            {\r\n                (sectionName.mainSection == 'accessories' || sectionName.mainSection == 'charging' || sectionName.mainSection == 'payment' || sectionName.mainSection == 'delivery' || sectionName.mainSection == 'checkout' || sectionName.mainSection == 'checkoutForm') && (\r\n                    <CarCarousel variantAWD={customize.variantAWD} exteriorColor={customize.exteriorColor} interiorColor={customize.interiorColor} carouselInterval={3000} />\r\n                )\r\n            }\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default MainLeftImageGrid","import { getCMSAssets } from 'helpers/Uri'\r\nimport { Dialog } from 'primereact/dialog'\r\nimport React, { useEffect, useRef, useState } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { Carousel } from 'react-bootstrap'\r\nimport CarCarouselDialog, { CarouselDialogRef } from '../../components/CarCarouselDialog'\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { isNil } from 'lodash';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nconst MobileImageCarousel = (props: any) => {\r\n\r\n    const { variantAWD, exteriorColor, interiorColor, carouselInterval, images, mobileImages, isUseImages, sectionStatus } = props;\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n\r\n    const [vehicle, setVehicle] = useState({\r\n        variantAWD: \"\",\r\n        exteriorColor: \"\",\r\n        interiorColor: \"\"\r\n    });\r\n\r\n    const [mobileCarouselPopup, setMobileCarouselPopup] = useState({\r\n        isShowExteriorPopup: false,\r\n        currentExteriorIndex: 0,\r\n        isShowInteriorPopup: false,\r\n        currentInteriorIndex: 0,\r\n        isShowSummaryPopup: false,\r\n        currentSummaryIndex: 0,\r\n    })\r\n\r\n    useEffect(() => {\r\n        setVehicle({\r\n            variantAWD: variantAWD,\r\n            exteriorColor: exteriorColor,\r\n            interiorColor: interiorColor\r\n        })\r\n    }, [])\r\n\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n\r\n    const sectionName = useSelector((state: IAppState) => {\r\n        return state.mainSection.mainSection;\r\n    });\r\n\r\n    const getVariantImages = (index: number) => {\r\n            return vehicleFromStore?.SelectedVariant?.VariantPicture != null && vehicleFromStore?.SelectedVariant?.VariantPicture.length > index\r\n                ? vehicleFromStore?.SelectedVariant?.VariantPicture[index] : \"\";\r\n    }\r\n    const getExteriorImages = (index: number) => {\r\n        return vehicleFromStore?.SelectedExterior?.ExteriorPicture != null && vehicleFromStore?.SelectedExterior?.ExteriorPicture.length > index\r\n            ? vehicleFromStore?.SelectedExterior?.ExteriorPicture[index] : \"\";\r\n    }\r\n\r\n\r\n    const getInteriorImages = (index: number) => {\r\n        //if (isMobile) {\r\n        //    return vehicleFromStore?.SelectedInterior?.InteriorPictureMobile != null && vehicleFromStore?.SelectedInterior?.InteriorPictureMobile.length > index\r\n        //        ? vehicleFromStore?.SelectedInterior?.InteriorPictureMobile[index] : \"\";\r\n        //}\r\n        //else {\r\n            return vehicleFromStore?.SelectedInterior?.InteriorPicture != null && vehicleFromStore?.SelectedInterior?.InteriorPicture.length > index\r\n                ? vehicleFromStore?.SelectedInterior?.InteriorPicture[index] : \"\";\r\n        //}\r\n    }\r\n\r\n\r\n    const carouselDialogRef = useRef<CarouselDialogRef | null>(null);\r\n\r\n    const directionButtons = (direction: any) => {\r\n        return (\r\n            <span\r\n                aria-hidden=\"true\"\r\n                className={direction === \"Next\" ? \"button-next\" : \"button-prev\"}\r\n            >\r\n                <img className=\"image\" src={`${getCMSAssets()}/main/${direction}-round.svg`} />\r\n            </span>\r\n        );\r\n    };\r\n\r\n    const handleOpen = (pageNumber: number) => {\r\n        if (carouselDialogRef.current) {\r\n            carouselDialogRef.current.handleOpen(pageNumber);\r\n        }\r\n    };\r\n\r\n    const handleMobileCarouselPopup = (index: any, sectionName: any) => {\r\n        if (sectionName == 'exterior') {\r\n            setMobileCarouselPopup({\r\n                ...mobileCarouselPopup,\r\n                isShowExteriorPopup: true,\r\n                currentExteriorIndex: index\r\n            })\r\n        } else if (sectionName == 'interior') {\r\n            setMobileCarouselPopup({\r\n                ...mobileCarouselPopup,\r\n                isShowInteriorPopup: true,\r\n                currentInteriorIndex: index\r\n            })\r\n        } else {\r\n            setMobileCarouselPopup({\r\n                ...mobileCarouselPopup,\r\n                isShowSummaryPopup: true,\r\n                currentSummaryIndex: index\r\n            })\r\n        }\r\n    }\r\n\r\n    const handleCloseMobileCarousel = (sectionName: any) => {\r\n        if (sectionName == 'exterior') {\r\n            setMobileCarouselPopup({\r\n                ...mobileCarouselPopup,\r\n                isShowExteriorPopup: false,\r\n            })\r\n        } else if (sectionName == 'interior') {\r\n            setMobileCarouselPopup({\r\n                ...mobileCarouselPopup,\r\n                isShowInteriorPopup: false,\r\n            })\r\n        } else {\r\n            setMobileCarouselPopup({\r\n                ...mobileCarouselPopup,\r\n                isShowSummaryPopup: false,\r\n            })\r\n        }\r\n    } \r\n\r\n    // const [ vehicleList, setVehicleList ] = useState<any>([]);\r\n\r\n    // const productTemplate = (product: any) => {\r\n    //     return (\r\n    //         <div className=\"product-item\">\r\n    //             <div className=\"product-item-content\">\r\n    //                 <img className=\"image\" src={product} />\r\n    //             </div>\r\n    //         </div>\r\n    //     );\r\n    // }\r\n\r\n    // useEffect(() => {\r\n    //     const updateVehicleList = async () => {\r\n    //         let list = [];\r\n            \r\n    //         list.push(await getExteriorImages(0));\r\n    //         list.push(await getExteriorImages(1));\r\n    //         list.push(await getExteriorImages(2));\r\n    //         list.push(await getExteriorImages(3)); // Awaiting completion before pushing\r\n            \r\n    //         setVehicleList(list); \r\n    //       };\r\n          \r\n    //       updateVehicleList();\r\n    // }, [])\r\n\r\n    console.log(mobileCarouselPopup.currentSummaryIndex)\r\n\r\n    return (\r\n        <>\r\n            {\r\n                sectionName == 'exterior' && !mobileCarouselPopup.isShowExteriorPopup\r\n                ?\r\n                <div className='mobile-main-section-images-container'>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(0, sectionName)}>\r\n                        <img className=\"image\" src={getExteriorImages(0)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(1, sectionName)}>\r\n                        <img className=\"image\" src={getExteriorImages(1)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(2, sectionName)}>\r\n                        <img className=\"image\" src={getExteriorImages(2)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(3, sectionName)}>\r\n                        <img className=\"image\" src={getExteriorImages(3)} />\r\n                    </div>\r\n                </div>\r\n                :\r\n                sectionName == 'exterior' && mobileCarouselPopup.isShowExteriorPopup\r\n                ?\r\n                <div className='mobile-main-section-images-container carousel'>\r\n                    <div className='mobile-main-section-images-inner'>\r\n                        <Carousel\r\n                            defaultActiveIndex={mobileCarouselPopup.currentExteriorIndex}\r\n                            prevIcon = { <img alt=\"\" src={`${getCMSAssets()}/main/Prev.svg`} /> }\r\n                            nextIcon = { <img alt=\"\" src={`${getCMSAssets()}/main/Next.svg`} /> }     \r\n                        >\r\n                            <Carousel.Item \r\n                                    // onClick={() => handleOpen(0)}\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(0)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(1)}\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(1)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(2)}\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(2)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(3)}\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(3)} />\r\n                            </Carousel.Item>\r\n                        </Carousel>\r\n                        <img alt=\"\" className='close-icon' onClick={() => handleCloseMobileCarousel(sectionName)} src={`${getCMSAssets()}/main/cross.svg`} />\r\n                    </div>\r\n                </div>\r\n                :\r\n                sectionName == 'interior' && !mobileCarouselPopup.isShowInteriorPopup\r\n                ?\r\n                <div className='mobile-main-section-images-container'>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(0, sectionName)}>\r\n                        <img className=\"image\" src={getInteriorImages(0)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(1, sectionName)}>\r\n                        <img className=\"image\" src={getInteriorImages(1)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(2, sectionName)}>\r\n                        <img className=\"image\" src={getInteriorImages(2)} />\r\n                    </div>\r\n                </div>\r\n                 :\r\n                 sectionName == 'interior' && mobileCarouselPopup.isShowInteriorPopup\r\n                 ?\r\n                 <div className='mobile-main-section-images-container carousel'>\r\n                     <div className='mobile-main-section-images-inner'>\r\n                         <Carousel\r\n                             defaultActiveIndex={mobileCarouselPopup.currentInteriorIndex}\r\n                             prevIcon = { <img alt=\"\" src={`${getCMSAssets()}/main/Prev-white.svg`} /> }\r\n                             nextIcon = {<img alt=\"\" src={`${getCMSAssets()}/main/Next-white.svg`} /> }\r\n                         >\r\n                             <Carousel.Item \r\n                                     // onClick={() => handleOpen(0)}\r\n                             >\r\n                                 <img className=\"image\" src={getInteriorImages(0)} />\r\n                             </Carousel.Item>\r\n                             <Carousel.Item \r\n                                 // onClick={() => handleOpen(1)}\r\n                             >\r\n                                 <img className=\"image\" src={getInteriorImages(1)} />\r\n                             </Carousel.Item>\r\n                             <Carousel.Item \r\n                                 // onClick={() => handleOpen(2)}\r\n                             >\r\n                                 <img className=\"image\" src={getInteriorImages(2)} />\r\n                             </Carousel.Item>\r\n                         </Carousel>\r\n                         <img alt=\"\" className='close-icon' onClick={() => handleCloseMobileCarousel(sectionName)} src={`${getCMSAssets()}/main/cross-white.svg`} />\r\n                     </div>\r\n                 </div>\r\n                :\r\n                sectionName != 'global' && sectionName != 'variant' && !mobileCarouselPopup.isShowSummaryPopup\r\n                ?\r\n                <div className='mobile-main-section-images-container'>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(0, 'summary')}>\r\n                        <img className=\"image\" src={getExteriorImages(0)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(1, 'summary')}>\r\n                        <img className=\"image\" src={getExteriorImages(1)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(2, 'summary')}>\r\n                        <img className=\"image\" src={getExteriorImages(2)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(3, 'summary')}>\r\n                        <img className=\"image\" src={getExteriorImages(3)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(4, 'summary')}>\r\n                        <img className=\"image\" src={getInteriorImages(0)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(5, 'summary')}>\r\n                        <img className=\"image\" src={getInteriorImages(1)} />\r\n                    </div>\r\n                    <div className='mobile-vehicle-image-card' onClick={() => handleMobileCarouselPopup(6, 'summary')}>\r\n                        <img className=\"image\" src={getInteriorImages(2)} />\r\n                    </div>\r\n                </div>\r\n                :\r\n                sectionName != 'global' && sectionName != 'variant' && mobileCarouselPopup.isShowSummaryPopup\r\n                ?\r\n                <div className='mobile-main-section-images-container carousel'>\r\n                    <div className='mobile-main-section-images-inner'>\r\n                        <Carousel\r\n                            defaultActiveIndex={mobileCarouselPopup.currentSummaryIndex}\r\n                            prevIcon = { \r\n                                mobileCarouselPopup.currentSummaryIndex < 4\r\n                                ?\r\n                                <img alt=\"\" src={`${getCMSAssets()}/main/Prev.svg`} /> \r\n                                :\r\n                                <img alt=\"\" src={`${getCMSAssets()}/main/Prev-white.svg`} /> \r\n                            }\r\n                            nextIcon = {\r\n                                mobileCarouselPopup.currentSummaryIndex < 4\r\n                                ?\r\n                                <img alt=\"\" src={`${getCMSAssets()}/main/Next.svg`} /> \r\n                                :\r\n                                <img alt=\"\" src={`${getCMSAssets()}/main/Next-white.svg`} /> \r\n                            }\r\n                        >\r\n                             <Carousel.Item \r\n                                    // onClick={() => handleOpen(0)}\r\n                                    accessKey='0'\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(0)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(1)}\r\n                                 accessKey='1'\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(1)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(2)}\r\n                                 accessKey='2'\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(2)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(3)}\r\n                                 accessKey='3'\r\n                            >\r\n                                <img className=\"image\" src={getExteriorImages(3)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                    // onClick={() => handleOpen(0)}\r\n                                     accessKey='4'\r\n                            >\r\n                                <img className=\"image\" src={getInteriorImages(0)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(1)}\r\n                                 accessKey='5'\r\n                            >\r\n                                <img className=\"image\" src={getInteriorImages(1)} />\r\n                            </Carousel.Item>\r\n                            <Carousel.Item \r\n                                // onClick={() => handleOpen(2)}\r\n                                 accessKey='6'\r\n                            >\r\n                                <img className=\"image\" src={getInteriorImages(2)} />\r\n                            </Carousel.Item>\r\n                        </Carousel>\r\n                        <img alt=\"\" className='close-icon' onClick={() => handleCloseMobileCarousel('summary')} src={`${getCMSAssets()}/main/cross-white.svg`} />\r\n                    </div>\r\n                </div>\r\n                :\r\n                <></>\r\n            }\r\n\r\n            <CarCarouselDialog slideNumber={0} vehicle={vehicle} ref={carouselDialogRef} />\r\n        </>  \r\n    )\r\n}\r\n\r\nexport default MobileImageCarousel\r\n\r\n\r\n\r\n            {/* {\r\n                sectionStatus == 'all'\r\n                ?\r\n                <Carousel\r\n                    nextIcon={directionButtons(\"Next\")}\r\n                    prevIcon={directionButtons(\"Prev\")}\r\n                    interval={carouselInterval}\r\n                >\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(0)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(0)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(1)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(1)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(2)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(2)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(3)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(3)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(4)}\r\n                    >\r\n                        <img className=\"image\" src={getInteriorImages(0)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(5)}\r\n                    >\r\n                        <img className=\"image\" src={getInteriorImages(1)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(6)}\r\n                    >\r\n                        <img className=\"image\" src={getInteriorImages(2)} />\r\n                    </Carousel.Item>\r\n                </Carousel>\r\n                :\r\n                sectionStatus == 'exterior'\r\n                ?\r\n                <Carousel\r\n                    nextIcon={directionButtons(\"Next\")}\r\n                    prevIcon={directionButtons(\"Prev\")}\r\n                    interval={carouselInterval}\r\n                >\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(0)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(0)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(1)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(1)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(2)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(2)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(3)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(3)} />\r\n                    </Carousel.Item>\r\n                </Carousel>\r\n                :\r\n                sectionStatus == 'interior'\r\n                ?\r\n                <Carousel\r\n                    nextIcon={directionButtons(\"Next\")}\r\n                    prevIcon={directionButtons(\"Prev\")}\r\n                    interval={carouselInterval}\r\n                >\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(0)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(0)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(1)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(1)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(2)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(2)} />\r\n                    </Carousel.Item>\r\n                    <Carousel.Item \r\n                        // onClick={() => handleOpen(3)}\r\n                    >\r\n                        <img className=\"image\" src={getExteriorImages(3)} />\r\n                    </Carousel.Item>\r\n                </Carousel>\r\n                :\r\n                <></>\r\n            } */}\r\n\r\n\r\n {/* {\r\n                    sectionStatus == 'exterior' || sectionStatus == 'all'\r\n                    ?\r\n                    <>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(0)}\r\n                        >\r\n                            <img className=\"image\" src={getExteriorImages(0)} />\r\n                        </Carousel.Item>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(1)}\r\n                        >\r\n                            <img className=\"image\" src={getExteriorImages(1)} />\r\n                        </Carousel.Item>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(2)}\r\n                        >\r\n                            <img className=\"image\" src={getExteriorImages(2)} />\r\n                        </Carousel.Item>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(3)}\r\n                        >\r\n                            <img className=\"image\" src={getExteriorImages(3)} />\r\n                        </Carousel.Item>\r\n                    </>\r\n                    :\r\n                    <></>\r\n                }\r\n                {\r\n                    sectionStatus == 'interior' || sectionStatus == 'all'\r\n                    ?\r\n                    <>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(4)}\r\n                        >\r\n                            <img className=\"image\" src={getInteriorImages(0)} />\r\n                        </Carousel.Item>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(5)}\r\n                        >\r\n                            <img className=\"image\" src={getInteriorImages(1)} />\r\n                        </Carousel.Item>\r\n                        <Carousel.Item \r\n                            // onClick={() => handleOpen(6)}\r\n                        >\r\n                            <img className=\"image\" src={getInteriorImages(2)} />\r\n                        </Carousel.Item>\r\n                    </>\r\n                    :\r\n                    <></>\r\n                } */}","import { useEffect, useRef, useState } from \"react\";\r\n\r\nexport const useScreenSize = () => {\r\n    const [screenSize, setScreenSize] = useState<'small' | 'medium' | 'large' | null>(null);\r\n\r\n    useEffect(() => {\r\n        // Define media queries for small, medium, and large screens\r\n        const smallScreen = window.matchMedia('(max-width: 768px)');\r\n        const mediumScreen = window.matchMedia('(min-width: 769px) and (max-width: 1024px)');\r\n        const largeScreen = window.matchMedia('(min-width: 1025px)');\r\n\r\n        const handleResize = () => {\r\n            if (smallScreen.matches) {\r\n                setScreenSize('small');\r\n            } else if (mediumScreen.matches) {\r\n                setScreenSize('medium');\r\n            } else if (largeScreen.matches) {\r\n                setScreenSize('large');\r\n            }\r\n        };\r\n\r\n        // Initial check\r\n        handleResize();\r\n\r\n        // Add event listeners for each media query\r\n        smallScreen.addEventListener('change', handleResize);\r\n        mediumScreen.addEventListener('change', handleResize);\r\n        largeScreen.addEventListener('change', handleResize);\r\n\r\n        return () => {\r\n            smallScreen.removeEventListener('change', handleResize);\r\n            mediumScreen.removeEventListener('change', handleResize);\r\n            largeScreen.removeEventListener('change', handleResize);\r\n        };\r\n    }, []);\r\n\r\n    return screenSize;\r\n};","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport {\r\n    currencyFormatWithBlank\r\n} from 'helpers/Uri';\r\nimport { Button, Carousel, Container } from 'react-bootstrap';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { MainMenu } from 'scene/Layout/MainMenu';\r\nimport Variant from './Main/variant/Variant';\r\nimport Exterior from './Main/exterior/Exterior';\r\nimport Interior from './Main/interior/Interior';\r\nimport Accessories from './Main/accessories/Accessories';\r\nimport Checkout from './Main/checkout/Checkout';\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { IAppState } from 'model/IAppState';\r\nimport { checkMainSection, setScrollPosition } from 'stores/ScrollPosition';\r\nimport CustomerPayment from './Main/checkout/CustomerPayment';\r\nimport Delivery from './Main/checkout/Delivery';\r\nimport PaymentOptions, { ChildRef } from '../components/PaymentOptions';\r\nimport CarCarousel from 'components/CarCarousel';\r\nimport CheckoutWaitlist from './Main/checkout/CheckoutWaitlist';\r\n//import CheckoutWaitlistNoPCICompliant from './Main/checkout/CheckoutWaitlistNoPCICompliant';\r\n//import CheckoutWaitlistDropin from './Main/checkout/CheckoutWaitlistCheckin';\r\nimport NoStorageReminder from 'components/NoInventoryReminder';\r\nimport { setTimeout } from 'timers';\r\nimport { hideGlobalPage } from 'stores/MainRightPage';\r\nimport { isNil } from 'lodash';\r\nimport * as selectedDeliveryStore from 'stores/UserSelectedDelivery';\r\n\r\nimport { useScroll } from './Main/ScrollToSection';\r\n\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as rdHelper from 'helpers/Uri';\r\nimport * as paymentOptionModel from 'model/IPaymentOptions';\r\nimport * as paymentOptionService from 'services/PaymentOptions';\r\nimport * as paymentOptionsStore from 'stores/PaymentOptions';\r\nimport * as paymentOptionStore from 'stores/PaymentOptions';\r\nimport * as driveawaycostHelper from 'businessHelpers/DriveawayCostHelper';\r\n\r\nimport Charging from './Main/charging/Charging';\r\nimport MainLeftImageGrid from './Main/MainLeftImageGrid';\r\nimport { setMainPageNumber } from 'stores/MainPageNumber';\r\nimport DriveawayPriceDialog from '../components/DriveawayPriceDialog';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport MobileImageCarousel from './Main/MobileImageCarousel';\r\nimport { useMsal } from \"@azure/msal-react\";\r\nimport { useScreenSize } from 'helpers/useSreenSize';\r\nimport { useSatellite } from 'helpers/useSatellite';\r\n\r\ninterface MainPageProps {\r\n    // pageScroll: number;\r\n    // isToPayment: boolean;\r\n    linkKey: string | null,\r\n    selectedCountry: string | null,\r\n    selectedState: string | null,\r\n    selectedVariant: string | null,\r\n    selectedExterior: string | null,\r\n    selectedInterior: string | null,\r\n    isShowBottomPanel: boolean | null,\r\n}\r\n\r\nexport const MainPage: React.FC<MainPageProps> = ({ linkKey, selectedCountry, selectedState, selectedVariant, selectedExterior, selectedInterior, isShowBottomPanel }) => {\r\n    // : React.FC<MainPageProps> = ({ pageScroll, isToPayment, linkKey, selectedVariant, selectedExterior, selectedInterior }) => {\r\n    const { instance } = useMsal();\r\n    const activeAccount = instance.getActiveAccount();\r\n    const screenSize = useScreenSize();\r\n\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n    const satellite = useSatellite();\r\n    const rightSectionRef = useRef<HTMLDivElement>(null);\r\n\r\n    // const variantRef = useRef<HTMLDivElement>(null);\r\n    // const exteriorRef = useRef<HTMLDivElement>(null);\r\n    // const interiorRef = useRef<HTMLDivElement>(null);\r\n    // const financeRef = useRef<HTMLDivElement>(null);\r\n    // const chargingRef = useRef<HTMLDivElement>(null);\r\n    // const paymentRef = useRef<HTMLDivElement>(null);\r\n    // const deliveryComponentRef = useRef<any>(null);\r\n    // const deliveryRef = useRef<HTMLDivElement>(null);\r\n    // const checkoutRef = useRef<HTMLDivElement>(null);\r\n    // const watchlistRef = useRef<HTMLDivElement>(null);\r\n\r\n    const [imgExpand, setImgExpand] = useState<Boolean>(false);\r\n\r\n    const topPanel = document.querySelector('.top-panel') as HTMLElement;\r\n    const bottomPanel = document.querySelector('.bottom-panel') as HTMLElement;\r\n\r\n    const [expanded, setExpanded] = useState({\r\n        topExpand: false,\r\n        bottomExpand: false,\r\n    });\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const isHideGlobal = useSelector((state: IAppState) => {\r\n        return state.mainRightPage;\r\n    });\r\n\r\n    const paymentOpionsRef = useRef<ChildRef | null>(null);\r\n\r\n    //Customise Exterior & Interior & Variant AWD of Cadillac\r\n    const [customize, setCustomize] = useState({\r\n        variantAWD: 'Luxury',\r\n        exteriorColor: 'Argent Silver Metallic',\r\n        interiorColor: 'Juniper Nappa',\r\n        addsOn: [],\r\n        charging: [],\r\n        customerType: 'business',\r\n        paymentType: 'Cash',\r\n        postcode: '',\r\n        invalidPostcode: false,\r\n        deliveryType: 'Pick Up',\r\n    });\r\n\r\n    const customerType = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n\r\n\r\n\r\n    //paymentPageStatus shows the Visa payment page status, \r\n    //if the first variant, exterior... section, its status is 0 and does not appear\r\n    //if has inventory, it shows Visa input panel, its status is 1\r\n    //if no inventory, click join the waitlist from the first page, its status is 2 and Visa input disappear.\r\n    // const [paymentPageStatus, setPaymentPageStatus] = useState(0);\r\n    const mainPageNumber = useSelector((state: IAppState) => {\r\n        return state.mainPageNumber.mainPageNumber;\r\n    });\r\n\r\n    const [activeImage, setActiveImage] = useState(1);\r\n    // const [shouldRevert, setShouldRevert] = useState(false);\r\n\r\n    //store variables\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n    const paymentOptions = useSelector((state: IAppState) => {\r\n        return state.paymentOptions;\r\n    });\r\n    const sectionName = useSelector((state: IAppState) => {\r\n        return state.mainSection;\r\n    });\r\n    const vehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.vehicle;\r\n    });\r\n    const customerTypeFromStore = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n    const linkSourceFromStore = useSelector((state: IAppState) => {\r\n        return state?.linkSource;\r\n    });\r\n\r\n\r\n    const [driveawayRequestData, setDriveawayRequestData] = useState<paymentOptionModel.IDriveAwayRequest>(driveawaycostHelper.getInitDriveawayCostRequest());\r\n    const abortControllerInitialValue: any = new (\r\n        window as any\r\n    ).AbortController();\r\n    const [costAbortController, setCostAbortController] = useState(\r\n        abortControllerInitialValue,\r\n    );\r\n\r\n    var currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n\r\n\r\n    const handleCustomer = (type: any) => {\r\n        setCustomize({\r\n            ...customize,\r\n            customerType: type\r\n        })\r\n    }\r\n\r\n    const handlePayment = (type: any) => {\r\n        setCustomize({\r\n            ...customize,\r\n            paymentType: type\r\n        })\r\n    }\r\n\r\n    //const handlePostcode = (postcode: any) => {\r\n    //    setCustomize({\r\n    //        ...customize,\r\n    //        postcode: postcode\r\n    //    })\r\n    //}\r\n\r\n    const handleDelivery = (type: any) => {\r\n        setCustomize({\r\n            ...customize,\r\n            deliveryType: type\r\n        })\r\n    }\r\n\r\n    const handleImgExpand = (selectedClassName: any) => {\r\n        const imageDivs = document.querySelectorAll('.transition-group-full');\r\n\r\n        imageDivs.forEach((element) => {\r\n            if (selectedClassName == 'cadillac-full-0' || selectedClassName == 'cadillac-front-1' && topPanel && bottomPanel) {\r\n                // topPanel.style.setProperty('--row-0-flex-basis', '100%');\r\n                // bottomPanel.style.setProperty('--row-1-flex-basis', '0%');\r\n                topPanel.classList.add('expand');\r\n                topPanel.classList.remove('collapse');\r\n                bottomPanel.classList.add('collapse');\r\n                bottomPanel.classList.remove('expand');\r\n                setExpanded({\r\n                    topExpand: true,\r\n                    bottomExpand: false,\r\n                })\r\n            } else if (selectedClassName == 'cadillac-back-2' || selectedClassName == 'cadillac-side-3' && topPanel && bottomPanel) {\r\n                // topPanel.style.setProperty('--row-0-flex-basis', '0%');\r\n                // bottomPanel.style.setProperty('--row-1-flex-basis', '100%');\r\n                topPanel.classList.add('collapse');\r\n                topPanel.classList.remove('expand');\r\n                bottomPanel.classList.add('expand');\r\n                bottomPanel.classList.remove('collapse');\r\n                setExpanded({\r\n                    topExpand: false,\r\n                    bottomExpand: true,\r\n                })\r\n            }\r\n\r\n            let tileIndex = parseInt(selectedClassName.split('-').pop());\r\n\r\n            for (let i = 0; i <= 3; i++) {\r\n                const value = i === tileIndex ? '100%' : '0%';\r\n                document.documentElement.style.setProperty(`--tile-${i}-flex-basis`, value);\r\n            }\r\n        });\r\n\r\n        setImgExpand(true);\r\n    }\r\n\r\n    const handleClose = () => {\r\n\r\n        setExpanded({\r\n            topExpand: false,\r\n            bottomExpand: false,\r\n        })\r\n        setImgExpand(false);\r\n\r\n        if (sectionName.mainSection == 'variant') {\r\n            document.documentElement.style.setProperty(`--tile-0-flex-basis`, '72%');\r\n            document.documentElement.style.setProperty(`--tile-1-flex-basis`, '28%');\r\n            document.documentElement.style.setProperty(`--tile-2-flex-basis`, '50%');\r\n            document.documentElement.style.setProperty(`--tile-3-flex-basis`, '50%');\r\n            topPanel?.style.setProperty('--row-0-flex-basis', '60%');\r\n            bottomPanel?.style.setProperty('--row-1-flex-basis', '40%');\r\n        } else if (sectionName.mainSection == 'exterior') {\r\n            document.documentElement.style.setProperty(`--tile-0-flex-basis`, '60%');\r\n            document.documentElement.style.setProperty(`--tile-1-flex-basis`, '40%');\r\n            document.documentElement.style.setProperty(`--tile-2-flex-basis`, '50%');\r\n            document.documentElement.style.setProperty(`--tile-3-flex-basis`, '50%');\r\n            topPanel?.style.setProperty('--row-0-flex-basis', '50%');\r\n            bottomPanel?.style.setProperty('--row-1-flex-basis', '50%');\r\n        } else if (sectionName.mainSection == 'interior') {\r\n            document.documentElement.style.setProperty(`--tile-0-flex-basis`, '100%');\r\n            document.documentElement.style.setProperty(`--tile-2-flex-basis`, '50%');\r\n            document.documentElement.style.setProperty(`--tile-3-flex-basis`, '50%');\r\n            topPanel?.style.setProperty('--row-0-flex-basis', '60%');\r\n            bottomPanel?.style.setProperty('--row-1-flex-basis', '40%');\r\n        }\r\n\r\n        // topPanel?.classList.remove('expand', 'collapse');\r\n        // bottomPanel?.classList.remove('expand', 'collapse');\r\n\r\n    }\r\n\r\n    const scrollToSectionRef = (ref: React.RefObject<HTMLDivElement>) => {\r\n        // const refArray = [variantRef, exteriorRef, interiorRef, financeRef, deliveryRef, checkoutRef];\r\n        // refArray.forEach((refItem: any, index: any) => {\r\n        //     console.log(ref.current, refItem.current);\r\n        //     if (ref.current != null && refItem) {\r\n        //         if (ref.current == refItem.current) {\r\n        //             ref.current.style.marginTop = '80px';\r\n        //         } else {\r\n        //             ref.current.style.marginTop = '0px';\r\n        //         }\r\n        //     }\r\n        // }); \r\n        if (ref.current) {\r\n            ref.current.scrollIntoView({\r\n                behavior: 'smooth',\r\n                block: 'start', // or 'center', 'end', 'nearest'\r\n                inline: 'center', // or 'start', 'center', 'end'\r\n            });\r\n        }\r\n    };\r\n\r\n    //const [count, setCount] = useState({\r\n    //    maxRange: 126,\r\n    //    quarterCharge: 110,\r\n    //    zeroToHundredTime: 2.8,\r\n    //});\r\n    //const milestones = [\r\n    //    {\r\n    //        maxRange: 195,\r\n    //        quarterCharge: 110,\r\n    //        zeroToHundredTime: 2.8,\r\n    //    },\r\n    //    {\r\n    //        maxRange: 288,\r\n    //        quarterCharge: 135,\r\n    //        zeroToHundredTime: 3.4,\r\n    //    },\r\n    //    {\r\n    //        maxRange: 357,\r\n    //        quarterCharge: 158,\r\n    //        zeroToHundredTime: 3.9,\r\n    //    },\r\n    //    {\r\n    //        maxRange: 473,\r\n    //        quarterCharge: 180,\r\n    //        zeroToHundredTime: 4.6,\r\n    //    },\r\n    //    {\r\n    //        maxRange: 530,\r\n    //        quarterCharge: 200,\r\n    //        zeroToHundredTime: 5.3,\r\n    //    }\r\n    //];\r\n    //const [index, setIndex] = useState(0);\r\n\r\n    // useEffect(() => {\r\n    //     if (shouldRevert) {\r\n    //       setTimeout(() => {\r\n    //         setActiveImage(1);\r\n    //         setShouldRevert(false);\r\n    //       }, 500); // Adjust the timing as needed\r\n    //     }\r\n    //   }, [shouldRevert]);\r\n\r\n    // Function to open the dialog in the child component\r\n    const openCashFinanceDialog = () => {\r\n        if (paymentOpionsRef.current) {\r\n            paymentOpionsRef.current.openDialog();\r\n            //dispatch(paymentOptionStore.updateSelectedPaymentOptionAction(rdEnum.enumPaymentOptions.Cash));\r\n        }\r\n    };\r\n\r\n    useEffect(() => {\r\n\r\n        window.scrollTo(0, 0);\r\n\r\n        return () => { }\r\n    }, [])\r\n\r\n    //useEffect(() => {\r\n\r\n    //    if (sectionName.mainSection != 'variant') {\r\n    //        setCount({\r\n    //            maxRange: 126,\r\n    //            quarterCharge: 110,\r\n    //            zeroToHundredTime: 2.8,\r\n    //        });\r\n    //        setIndex(0);\r\n    //        return () => { }; // Cleanup function\r\n    //    }\r\n\r\n    //    const interval = setInterval(() => {\r\n    //        if (index < milestones.length - 1) {\r\n    //            setCount(milestones[index]);\r\n    //            setIndex(index + 1);\r\n    //        } else if (index === milestones.length - 1) {\r\n    //            setCount(milestones[milestones.length - 1]);\r\n    //            clearInterval(interval);\r\n    //        }\r\n    //    }, 30); // Change the interval duration as needed\r\n\r\n    //    return () => {\r\n    //        clearInterval(interval);\r\n    //    }// Cleanup on unmount or index change\r\n    //}, [sectionName.mainSection, index]); // Only trigger when index or milestones change\r\n\r\n    useEffect(() => {\r\n        handleClose();\r\n    }, [sectionName.mainSection])\r\n\r\n    useEffect(() => {\r\n        setCustomize({\r\n            ...customize,\r\n            customerType: customerType\r\n        })\r\n    }, [customerType]);\r\n\r\n\r\n    useEffect(() => {\r\n        if (\r\n            (!isNil(linkKey) && linkKey != \"\")\r\n            || (!isNil(selectedCountry) && selectedCountry != \"\")\r\n            || (!isNil(selectedVariant) && selectedVariant != \"\")\r\n            || (!isNil(selectedExterior) && selectedExterior != \"\")\r\n            || (!isNil(selectedInterior) && selectedInterior != \"\")\r\n        ) {\r\n            dispatch(hideGlobalPage(false));\r\n            // dispatch(setScrollPosition('main'));\r\n            // dispatch(checkMainSection('variant'));\r\n            // setPaymentPageStatus(0);\r\n            dispatch(setMainPageNumber(0));\r\n            toVariantWithLinkKey();\r\n            // document.body.style.overflowY = \"scroll\";\r\n            // document.body.style.paddingRight = \"0px\";\r\n\r\n        } else if (sectionName != 'checkoutForm') {\r\n            // setPaymentPageStatus(0);\r\n            dispatch(setMainPageNumber(0));\r\n        }\r\n\r\n        else {\r\n            dispatch(hideGlobalPage(true));\r\n            dispatch(checkMainSection('checkoutForm'));\r\n            // setPaymentPageStatus(1);\r\n            dispatch(setMainPageNumber(1));\r\n            // scrollToSection('checkoutForm');\r\n            // document.body.style.overflowY = 'scroll';\r\n            // document.body.style.paddingRight = '0px';\r\n        }\r\n\r\n    }, [linkKey, selectedVariant, selectedExterior, selectedInterior])\r\n\r\n    const { scrollToSection, variantRef, exteriorRef, interiorRef, financeRef, chargingRef, paymentRef, deliveryComponentRef, deliveryRef, checkoutRef, watchlistRef } = useScroll();\r\n\r\n    const toVariantWithLinkKey = () => {\r\n\r\n        dispatch(hideGlobalPage(false))\r\n        setTimeout(() => {\r\n            scrollToSection('variant')\r\n        }, 300);\r\n\r\n        // setPaymentPageStatus(0);\r\n        dispatch(setMainPageNumber(0));\r\n    }\r\n\r\n    const toConfiguration = () => {\r\n        let currentUrl = window.location.href;\r\n\r\n        if (currentUrl.includes(`?redirectPage=${rdEnum.enumRedirectPage.CheckoutPaymentPage}`)) {\r\n\r\n            currentUrl = currentUrl.replace(`?redirectPage=${rdEnum.enumRedirectPage.CheckoutPaymentPage}`, '');\r\n\r\n            // Update the browser's URL without reloading the page\r\n            window.history.replaceState({}, '', currentUrl);\r\n        }\r\n\r\n        dispatch(hideGlobalPage(false))\r\n        setTimeout(() => {\r\n            scrollToSection('payment')\r\n        }, 300);\r\n\r\n        // setPaymentPageStatus(0);\r\n        dispatch(setMainPageNumber(0));\r\n    }\r\n\r\n    //const handleDeliveryValidation = () => {\r\n    //    console.log(\"handleValidation\");\r\n    //}\r\n\r\n    const toWaitlistPage = () => {\r\n        if (isNil(deliveryComponentRef?.current)) return;\r\n        let invalidDelivery = deliveryComponentRef?.current?.getValidate();\r\n        if (invalidDelivery) {\r\n            //SetTimeout to avoid click checkout button, validate function contains\r\n            //a setErrorMessage to cause re-render, then need to click checkout button\r\n            //twice to get to Delivery section.\r\n            setTimeout(() => {\r\n                scrollToSection(rdEnum.enumScrollSection.Delivery);\r\n                dispatch(checkMainSection('delivery'));\r\n            }, 350);\r\n            return;\r\n        }\r\n\r\n        deliveryComponentRef?.current?.dispatchRegoAddress();\r\n\r\n        if (linkSourceFromStore == rdEnum.enumLinkSource.PrivateInterestLink) {\r\n            dispatch(setMainPageNumber(rdEnum.enumPage.CheckoutPayment));\r\n        }\r\n        else {\r\n            if (selectedVehicleFromStore.HasStock) {\r\n                // setPaymentPageStatus(rdEnum.enumPage.CheckoutPayment);\r\n                dispatch(setMainPageNumber(rdEnum.enumPage.CheckoutPayment));\r\n            } else {\r\n                // setPaymentPageStatus(rdEnum.enumPage.JoinWaitList);\r\n                dispatch(setMainPageNumber(rdEnum.enumPage.JoinWaitList));\r\n            }\r\n        }\r\n\r\n        dispatch(checkMainSection('checkoutForm'));\r\n        dispatch(hideGlobalPage(true));\r\n        if (watchlistRef.current)\r\n            watchlistRef.current.style.display = 'block';\r\n\r\n        setTimeout(() => {\r\n            scrollToSection(rdEnum.enumScrollSection.CheckoutForm);\r\n        }, 100);\r\n    }\r\n\r\n    //get drive away cost\r\n    useEffect(() => {\r\n        buildDriveawayCostRequest();\r\n\r\n    }, [selectedDeliveryFromStore,\r\n        selectedVehicleFromStore,\r\n        customerTypeFromStore,\r\n    ]);\r\n\r\n\r\n\r\n    useEffect(() => {\r\n\r\n        //to prevent multiple call\r\n        if (driveawayRequestData.Country == \"\"\r\n            || driveawayRequestData.VariantID == \"\" || driveawayRequestData.ExteriorID == \"\" || driveawayRequestData.InteriorID == \"\"\r\n            || driveawayRequestData.SubTotal == 0\r\n        ) {\r\n            return;\r\n        }\r\n        doGetDriveAwayCost();\r\n    }, [JSON.stringify(driveawayRequestData)])\r\n\r\n    const buildDriveawayCostRequest = () => {\r\n        //if is pickup, distance is from pickup location\r\n        //if is delivery, distance is from DeliveryDistance\r\n        let distance = 0;\r\n        if (selectedDeliveryFromStore?.SelectedDeliveryOption == rdEnum.enumDeliveryOptions.Pickup) {\r\n            distance = 0;\r\n        }\r\n        else {\r\n            distance = selectedDeliveryFromStore?.DeliveryDistance || 0;\r\n        }\r\n\r\n        //default state is selected state on 1st popup\r\n        //if has primary address, use primary address's state, postcode and suburb\r\n        let state = \"\";\r\n        let postcode = \"\";\r\n        let suburb = \"\";\r\n        if (!isNil(selectedDeliveryFromStore?.PrimaryAddress) && selectedDeliveryFromStore?.PrimaryAddress != \"\") {\r\n            state = selectedDeliveryFromStore.PrimaryState || \"\";\r\n            postcode = selectedDeliveryFromStore.PrimaryPostcode || \"\";\r\n            suburb = selectedDeliveryFromStore.PrimarySuburb || \"\";\r\n        }\r\n        else {\r\n            state = selectedDeliveryFromStore?.State?.code || \"\";\r\n            postcode = \"\";\r\n            suburb = \"\";\r\n        }\r\n\r\n        let requestData: paymentOptionModel.IDriveAwayRequest = {\r\n            Country: selectedDeliveryFromStore.Country?.code || \"\",\r\n            State: state || \"\",\r\n            VariantName: selectedVehicleFromStore?.VariantName || \"\",\r\n            VariantID: selectedVehicleFromStore?.VariantID || \"\",\r\n            VariantPrice: selectedVehicleFromStore?.VariantBasePrice || 0,\r\n            ExteriorID: selectedVehicleFromStore?.ExteriorID || \"\",\r\n            ExteriorName: selectedVehicleFromStore?.Exterior || \"\",\r\n            ExteriorPrice: selectedVehicleFromStore?.ExteriorPrice || 0,\r\n            InteriorID: selectedVehicleFromStore?.InteriorID || \"\",\r\n            InteriorName: selectedVehicleFromStore?.Interior || \"\",\r\n            InteriorPrice: selectedVehicleFromStore?.InteriorPrice || 0,\r\n            Options: selectedVehicleFromStore?.Options || [],\r\n            SubTotal: selectedVehicleFromStore.Subtotal || 0,\r\n            DeliveryOption: selectedDeliveryFromStore?.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup,\r\n            RegistrationType: customerTypeFromStore,\r\n            Distance: distance,\r\n            PostCode: postcode || \"\",\r\n            Suburb: suburb || \"\",\r\n            CallSource: \"Main Page\",\r\n            IfCalculateFinance: true,\r\n            DeliveryPrice: selectedDeliveryFromStore?.DeliveryPrice || 0,\r\n            //VehicleLoading: vehicleFromStore.Loading,\r\n        };\r\n        setDriveawayRequestData(requestData);\r\n\r\n    }\r\n\r\n\r\n    const doGetDriveAwayCost = async () => {\r\n        const abortController = new (window as any).AbortController();\r\n        await setCostAbortController(abortController);\r\n\r\n        try {\r\n            let request = await paymentOptionService.getDriveAwayCost(driveawayRequestData, abortController.signal);\r\n            if (request.status) {\r\n                let driveAwayCostData = request.data.driveawayCostData;\r\n                let driveAwayCost: paymentOptionModel.IDriveAwayCost = {\r\n                    LuxuryCarTax: driveAwayCostData.luxuryCarTax,\r\n                    LocalStampDuty: driveAwayCostData.localStampDuty,\r\n                    LocalRegistrationCost: driveAwayCostData.localRegistrationCost,\r\n                    LocalCTP: driveAwayCostData.localCTP,\r\n                    LocalPlateFee: driveAwayCostData.localPlateFee,\r\n                    HomeDelivery: driveAwayCostData.homeDelivery,\r\n                    DriveawayPrice: driveAwayCostData.driveawayPrice,\r\n                    OnRoadFee: driveAwayCostData.onRoadFeeSubtotal,\r\n                    SubTotal: driveAwayCostData.subTotal,\r\n                    VariantName: driveAwayCostData.variantName,\r\n                    VariantID: driveAwayCostData.variantID,\r\n                    VariantPrice: driveAwayCostData.variantPrice,\r\n                    ExteriorID: driveAwayCostData.exteriorID,\r\n                    ExteriorName: driveAwayCostData.exteriorName,\r\n                    ExteriorPrice: driveAwayCostData.exteriorColourPrice,\r\n                    InteriorID: driveAwayCostData.interiorID,\r\n                    InteriorName: driveAwayCostData.interiorName,\r\n                    InteriorPrice: driveAwayCostData.interiorColourPrice,\r\n                    GST: driveAwayCostData.gst,\r\n                    RoadUserChargers: driveAwayCostData.roadUserChargers,\r\n                    TyreStewardshipFee: driveAwayCostData.tyreStewardshipFee,\r\n                    Options: [],\r\n                }\r\n                dispatch(paymentOptionsStore.updateDriveawayCostAction(driveAwayCost, driveawayRequestData));\r\n\r\n                //get loan payment\r\n                let financeData = request.data.financeData;\r\n                let updatedFinanceStore: paymentOptionModel.IFinance = {\r\n                    DownPayment: 0,\r\n                    FinalBalloonPayment: financeData.balloonAmount,\r\n                    ComparisonRate: financeData.comparisonRate,\r\n                    LoanPayment: financeData.loanPayment,\r\n                    Term: financeData.term,\r\n                    FrequencyName: financeData.frequencyName\r\n                };\r\n                dispatch(paymentOptionsStore.updateFinanceAction(updatedFinanceStore));\r\n\r\n            }\r\n        } catch (error: any) {\r\n            if (error.name === 'AbortError') console.log('Request aborted!');\r\n        } finally {\r\n            //if (abortController.signal?.aborted)\r\n        }\r\n    }\r\n\r\n\r\n    const [windowSize, setWindowSize] = useState({\r\n        width: window.innerWidth,\r\n        height: window.innerHeight,\r\n    });\r\n    useEffect(() => {\r\n        // Function to update the state with current window size\r\n        const handleResize = () => {\r\n            setWindowSize({\r\n                width: window.innerWidth,\r\n                height: window.innerHeight,\r\n            });\r\n        };\r\n        // Add event listener for window resize\r\n        window.addEventListener('resize', handleResize);\r\n\r\n        // Remove event listener on cleanup to avoid memory leaks\r\n        return () => {\r\n            window.removeEventListener('resize', handleResize);\r\n        };\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        setWindowDigitalData();\r\n    }, [selectedDeliveryFromStore.Country?.code,\r\n    selectedVehicleFromStore?.VariantName, selectedVehicleFromStore.VariantBasePrice,\r\n    selectedVehicleFromStore?.Exterior, selectedVehicleFromStore?.Interior,\r\n            paymentOptions.DriveAwayCost?.DriveawayPrice, windowSize, sectionName]);\r\n\r\n\r\n    const [trackEvent, setTrackEvent] = useState(\"\");\r\n    useEffect(() => {\r\n        if (sectionName.mainSection == rdEnum.enumScrollSection.Global) {\r\n            return;\r\n        }\r\n        else if (sectionName.mainSection == rdEnum.enumScrollSection.Payment\r\n            || sectionName.mainSection == rdEnum.enumScrollSection.Delivery\r\n            || sectionName.mainSection == rdEnum.enumScrollSection.CheckoutForm) {\r\n            setTrackEvent(\"checkout\");\r\n        }\r\n        else {\r\n            setTrackEvent(sectionName.mainSection);\r\n        }\r\n        \r\n    }, [sectionName.mainSection])\r\n\r\n\r\n    useEffect(()=> {\r\n        satellite.trackEvent(\"config-step-load\");\r\n    }, [trackEvent]);\r\n\r\n\r\n    const setWindowDigitalData = () => {\r\n        let level3 = sectionName.mainSection;      \r\n        if (sectionName.mainSection == rdEnum.enumScrollSection.Global) {\r\n            window.digitalData = {\r\n                pageInfo: { pageName: \"\" },\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n            return;\r\n        }\r\n        else if (sectionName.mainSection == rdEnum.enumScrollSection.Payment\r\n            || sectionName.mainSection == rdEnum.enumScrollSection.Delivery\r\n            || sectionName.mainSection == rdEnum.enumScrollSection.CheckoutForm) {\r\n            level3 = \"checkout\";\r\n        }\r\n\r\n        let pageName = \"\";\r\n        if (selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n            pageName = \"ca:oc:au:en:t1:lyriq-configurator:2025-lyriq:\" + level3;\r\n        }\r\n        else if (selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.Australia) {\r\n            pageName = \"ca:oc:nz:en:t1:lyriq-configurator:2025-lyriq:\" + level3;\r\n        }\r\n\r\n        \r\n\r\n        let email: string = activeAccount?.idTokenClaims?.email as string;\r\n        window.digitalData = {\r\n            pageInfo: {\r\n                pageName: pageName,\r\n                siteSectionsLevel1: \"lyriq-configurator\",\r\n                siteSectionsLevel2: \"2025-lyriq\",\r\n                siteSectionsLevel3: level3,\r\n                siteSectionsLevel4: \"undefined\",\r\n                siteSectionsLevel5: \"lyriq-configurator:2025-lyriq:\" + level3,\r\n                universalID: \"AB52350\",\r\n                url: window.location.href,\r\n                seoStrategyPageName: \"Shop Now | Cadillac\",\r\n                pageType: \"tool\",\r\n                languageSelected: \"english\",\r\n                siteName: \"quantum_au\",\r\n                brand: \"Cadillac\",\r\n                country: selectedDeliveryFromStore.Country?.code,\r\n                region: \"oc\",\r\n                renderedExperience: screenSize,\r\n                viewport: window.innerWidth + 'x' + window.innerHeight,\r\n                orientation: window.innerWidth > window.innerHeight ? \"landscape\" : \"portrait\"\r\n            },\r\n            internalCampaignInfo: {},\r\n            articleInfo: {},\r\n            visitorProfile: {\r\n                userProfileStateAuthentication: !isNil(email) && email != \"\" ? 'loggedIn' : 'loggedOut',\r\n                userLoginStart: !isNil(email) && email != \"\" ? true : false,\r\n                configProducts: null,\r\n                configExtColor: \"\",\r\n                configIntColorUpholstery: \"\",\r\n                configModelPackageVersion: \"\",\r\n                engine: \"\",\r\n                transmission: \"\"\r\n            },\r\n            vehicleInfo: {\r\n                vehicleType: \"suv\",\r\n                modelName: \"lyriq\",\r\n                modelYear: \"2025\",\r\n                bodyStyle: \"lyriq\",\r\n                trimLevel: selectedVehicleFromStore?.VariantName,\r\n                condition: \"new\",\r\n                vin: \"\",\r\n            },\r\n            toolsInfo: {\r\n                configProducts: selectedVehicleFromStore?.VariantName,\r\n                configExtColor: selectedVehicleFromStore?.Exterior,\r\n                configIntColorUpholstery: selectedVehicleFromStore?.Interior || \"\",\r\n                configModelPackageVersion: \"\",\r\n                engine: \"\",\r\n                transmission: \"\",\r\n                wheels: \"AWD\",\r\n                options: \"\",\r\n                dealerName: \"\",\r\n                dealerId: \"\",\r\n                individualProductPrice: \"\",\r\n                configuratorStartPrice: vehicleFromStore.SelectedVariant?.DriveawayPrice,\r\n                configuratorEndPrice: paymentOptions.DriveAwayCost?.DriveawayPrice,\r\n            }\r\n        };\r\n\r\n    }\r\n\r\n    return (\r\n        // <div className='main-page-container'>\r\n        //     <div className='nav-menu'>\r\n        //         <MainMenu scrollToSection={scrollToSection} />\r\n        //     </div>\r\n\r\n        //     <div className='main-layout-container' style={{ paddingTop: !isHideGlobal.isHideGlobal ? '385px' : '0' }}>\r\n        <div className='main-page-container' style={{ marginTop: mainPageNumber == 0 ? '0' : '188px' }}>\r\n\r\n            <div className={sectionName?.mainSection == 'global' ? 'nav-menu' : 'nav-menu collapsed'} >\r\n                <MainMenu />\r\n            </div>\r\n\r\n            {\r\n                !isMobile\r\n                    ?\r\n                    <MainLeftImageGrid />\r\n                    :\r\n                    <MobileImageCarousel sectionStatus=\"exterior\" />\r\n            }\r\n\r\n            {/* <div className='right-section-container' ref={rightSectionRef}> */}\r\n            <div className='right-sections-container'>\r\n                <section ref={variantRef} className='nav_item'\r\n                    data-section-id=\"variant\"\r\n                    style={{\r\n                        display: mainPageNumber == 0 ? '' : 'none',\r\n                        // paddingTop: !isHideGlobal.isHideGlobal ? '385px' : '0'\r\n                        // paddingBottom: '180px',\r\n                        // marginBottom: '160px'\r\n                    }}>\r\n                    <Variant />\r\n                </section>\r\n                <section ref={exteriorRef} className='nav_item exterior' data-section-id=\"exterior\" style={{ display: mainPageNumber == 0 ? '' : 'none', paddingTop: !isMobile ? '0px' : '20px' }}>\r\n                    <Exterior />\r\n                </section>\r\n                <section ref={interiorRef} className='nav_item interior' data-section-id=\"interior\" style={{ display: mainPageNumber == 0 ? '' : 'none' }}>\r\n                    <Interior />\r\n                    {\r\n                        !selectedVehicleFromStore.HasStock && linkSourceFromStore != rdEnum.enumLinkSource.PrivateInterestLink\r\n                            ?\r\n                            <NoStorageReminder />\r\n                            :\r\n                            <></>\r\n                    }\r\n                </section>\r\n\r\n                <section ref={financeRef} className='nav_item accessories' data-section-id=\"accessories\"\r\n                    style={{\r\n                        display: mainPageNumber == 0 ? '' : 'none',\r\n                        // paddingBottom: '380px',\r\n                    }}>\r\n                    <Accessories />\r\n                </section>\r\n                <section ref={chargingRef} className='nav_item charging' data-section-id=\"charging\"\r\n                    style={{\r\n                        display: mainPageNumber == 0 ? '' : 'none',\r\n                        // paddingBottom: '380px',\r\n                    }}>\r\n                    <Charging />\r\n                </section>\r\n                <section ref={paymentRef} className='nav_item section' data-section-id=\"payment\" style={{\r\n                    display: mainPageNumber == 0 ? '' : 'none',\r\n                    // paddingBottom: '15rem' \r\n                }}>\r\n                    <CustomerPayment handleCustomer={handleCustomer} handlePayment={handlePayment} />\r\n                </section>\r\n                <section ref={deliveryRef} className='nav_item section' data-section-id=\"delivery\" style={{\r\n                    display: mainPageNumber == 0 ? '' : 'none',\r\n                    // paddingBottom: '12rem' \r\n                }}>\r\n                    <Delivery handleDelivery={handleDelivery} ref={deliveryComponentRef} />\r\n                </section>\r\n                <section ref={checkoutRef} className='nav_item section' data-section-id=\"checkout\" style={{ display: mainPageNumber == 0 ? '' : 'none', paddingBottom: !selectedVehicleFromStore.HasStock ? '6rem' : '9rem' }}>\r\n                    <Checkout checkoutFormPage={toWaitlistPage} scrollToSection={scrollToSection} />\r\n                    {\r\n                        !selectedVehicleFromStore.HasStock && linkSourceFromStore != rdEnum.enumLinkSource.PrivateInterestLink\r\n                            ?\r\n                            <div className='bottom-unavailable-panel' style={{ display: mainPageNumber == 0 ? '' : 'none' }}>\r\n                                {/* <div className='no-storage-panel'>\r\n                                <div className='or-panel'>or</div>\r\n                            </div> */}\r\n                                <NoStorageReminder />\r\n                            </div>\r\n                            :\r\n                            <></>\r\n                    }\r\n                </section>\r\n\r\n                <section ref={watchlistRef} className='nav_item checkoutForm section' data-section-id=\"checkoutForm\" style={{ display: mainPageNumber == 0 ? 'none' : '', scrollMarginTop: '286px' }}>\r\n                    {/*<CheckoutWaitlistDropin customize={customize} handleCustomer={handleCustomer}*/}\r\n                    {/*    toConfiguration={toConfiguration}*/}\r\n                    {/*    paymentPageStatus={paymentPageStatus} />*/}\r\n\r\n                    {/*paymentPageStatus={paymentPageStatus}*/}\r\n                    <CheckoutWaitlist customize={customize} handleCustomer={handleCustomer}\r\n                        toConfiguration={toConfiguration} paymentPageStatus={mainPageNumber}\r\n                    />\r\n                </section>\r\n            </div>\r\n\r\n            {/* General Submit Btn ( Known as 'Join our waitlist' or 'Continue to Checkout'), \r\n                place in an upper level of each section, especially Delivery component, in order to validate easily */}\r\n\r\n            {/* !isMobile || !isShowBottomPanel ? 'total-amount-container' : 'total-amount-container hide' */}\r\n            <div className={'total-amount-container'} style={{ display: mainPageNumber != 0 || sectionName?.mainSection == 'global' ? 'none' : '' }}>\r\n                <div className='total-amount-box'>\r\n                    <div className='price-panel'>\r\n                        <div className='inner-div'>\r\n                            {/* <h6>Driveaway Price</h6> */}\r\n                            <DriveawayPriceDialog />\r\n                            {!isNil(paymentOptions?.DriveAwayCost?.DriveawayPrice) && paymentOptions?.DriveAwayCost?.DriveawayPrice != undefined ? (\r\n                                <span className='total-price'>{currencyFormatter.format(paymentOptions?.DriveAwayCost?.DriveawayPrice)}</span>\r\n                            ) : (<span></span>)}\r\n                        </div>\r\n                    </div>\r\n                    {/* <div className='finance-panel'>\r\n                        <div className='inner-div'>\r\n                            <h6>Finance</h6>\r\n                            <span>or {!isNil(paymentOptions?.Finance?.LoanPayment) && paymentOptions?.Finance?.LoanPayment != undefined ? currencyFormatWithBlank(paymentOptions?.Finance?.LoanPayment) : \"\"}/month</span>\r\n                        </div>\r\n                    </div> */}\r\n                    {/* {\r\n                        paymentOptions?.PaymentOption == 'Cash'\r\n                            ?\r\n                            <>\r\n                                <div className='price-panel'>\r\n                                    <div className='inner-div'>\r\n                                        <DriveawayPriceDialog />\r\n                                        {!isNil(paymentOptions?.DriveAwayCost?.DriveawayPrice) && paymentOptions?.DriveAwayCost?.DriveawayPrice != undefined ? (\r\n                                            <span className='total-price'>{currencyFormatter.format(paymentOptions?.DriveAwayCost?.DriveawayPrice)}</span>\r\n                                        ) : (<span></span>)}\r\n                                    </div>\r\n                                </div>\r\n                                <div className='finance-panel'>\r\n                                    <div className='inner-div'>\r\n                                        <h6>Finance</h6>\r\n                                        <span>or {!isNil(paymentOptions?.Finance?.LoanPayment) && paymentOptions?.Finance?.LoanPayment != undefined ? currencyFormatWithBlank(paymentOptions?.Finance?.LoanPayment) : \"\"}/{paymentOptions?.Finance?.FrequencyName}</span>\r\n                                    </div>\r\n                                </div>\r\n                            </>\r\n                            :\r\n                            <>\r\n                                <div className='price-panel'>\r\n                                    <div className='inner-div'>\r\n                                        <h6>Finance</h6>\r\n                                        <span>or {!isNil(paymentOptions?.Finance?.LoanPayment) && paymentOptions?.Finance?.LoanPayment != undefined ? currencyFormatWithBlank(paymentOptions?.Finance?.LoanPayment) : \"\"}/{paymentOptions?.Finance?.FrequencyName}</span>\r\n                                    </div>\r\n                                </div>\r\n                                <div className='finance-panel'>\r\n                                    <div className='inner-div'>\r\n                                        <DriveawayPriceDialog />\r\n                                        {!isNil(paymentOptions?.DriveAwayCost?.DriveawayPrice) && paymentOptions?.DriveAwayCost?.DriveawayPrice != undefined ? (\r\n                                            <span className='total-price'>{currencyFormatter.format(paymentOptions?.DriveAwayCost?.DriveawayPrice)}</span>\r\n                                        ) : (<span></span>)}\r\n                                    </div>\r\n                                </div>\r\n                            </>\r\n                    } */}\r\n\r\n                    <div className='delivery-panel'>\r\n                        <div className='inner-div'>\r\n                            <h6>Estimated Delivery\r\n                                {/* <sup>3</sup> */}\r\n                            </h6>\r\n                            {\r\n                                !selectedVehicleFromStore.HasStock && linkSourceFromStore != rdEnum.enumLinkSource.PrivateInterestLink\r\n                                    ?\r\n                                    <span>Waitlisted</span>\r\n                                    :\r\n                                    <span>{vehicleFromStore?.SelectedInterior?.Available}</span>\r\n                            }\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <a className='delivery-pricing-details stat-text-link' data-dtm=\"driveaway price\"\r\n                    onClick={() => openCashFinanceDialog()}>Pricing & Finance Details</a>\r\n            </div>\r\n\r\n            {/* </div> */}\r\n            <PaymentOptions ref={paymentOpionsRef}\r\n                isFromLandingPage={false}\r\n                subTotal={selectedVehicleFromStore?.Subtotal || 0}\r\n                estDeliveryDate={vehicleFromStore?.SelectedInterior?.Available || \"\"}\r\n                variantID={selectedVehicleFromStore?.VariantID || \"\"}\r\n                variantName={selectedVehicleFromStore?.VariantName || \"\"}\r\n                variantPrice={selectedVehicleFromStore?.VariantBasePrice || 0}\r\n                exteriorID={selectedVehicleFromStore?.ExteriorID || \"\"}\r\n                exteriorName={selectedVehicleFromStore?.Exterior || \"\"}\r\n                exteriorPrice={selectedVehicleFromStore?.ExteriorPrice || 0}\r\n                interiorID={selectedVehicleFromStore?.InteriorID || \"\"}\r\n                interiorName={selectedVehicleFromStore?.Interior || \"\"}\r\n                interiorPrice={selectedVehicleFromStore?.InteriorPrice || 0}\r\n                options={selectedVehicleFromStore?.Options || []}\r\n            />\r\n        </div>\r\n        //     </div>\r\n\r\n        // </div>\r\n    );\r\n};\r\n\r\n\r\n\r\n\r\n\r\n","import { useDispatch, useSelector } from 'react-redux';\r\nimport { logoutClearAction } from 'stores/Store';\r\nimport { IAppState } from 'model/IAppState';\r\n\r\nimport { initPaymentOptions } from 'stores/PaymentOptions';\r\nimport { initSelectedVehicle } from 'stores/UserSelectedVehicleConfig';\r\n\r\nimport * as scheduleDeliveryHelper from 'businessHelpers/OrderScheduleDeliveryHelper';\r\nimport * as vehicleHelper from 'businessHelpers/VehicleHelper';\r\nimport * as defaultConfigHelper from 'businessHelpers/DefaultConfigHelper';\r\nimport * as selectedDeliveryHelper from 'businessHelpers/SelectedDeliveryhelper';\r\n\r\nexport const useClearUserDataStore = () => {\r\n    const dispatch = useDispatch();\r\n\r\n\r\n    const storeData = useSelector((appState: IAppState) => {\r\n        return appState;\r\n    });\r\n\r\n    const clearData = () => {\r\n        let newData: IAppState = {\r\n            ...storeData,\r\n            session: null,\r\n            customerType: null,\r\n            checkoutCustomer: null,\r\n            defautConfig: defaultConfigHelper.getInitDefaultConfig(),\r\n            orderCustomerDetails: null,\r\n            orderDetails: null,\r\n            orderDocuments:null,\r\n            orderScheduleDelivery: scheduleDeliveryHelper.getInitScheduleDelivery(),\r\n            paymentOptions: initPaymentOptions,\r\n            selectedDelivery: selectedDeliveryHelper.getInitSelectedDelivery(),\r\n            selectedVehicle: initSelectedVehicle,\r\n            //vehicle: vehicleHelper.getInitVehicleStore()   //todo: do we need to clear this?\r\n        }\r\n        dispatch(logoutClearAction(newData));\r\n    }\r\n\r\n\r\n    return {\r\n        clearData\r\n    }\r\n\r\n}","import React, { useRef, useEffect, useLayoutEffect, useState } from 'react';\r\nimport { useParams, useNavigate, Link } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { Row, Col, Navbar, Accordion } from 'react-bootstrap';\r\nimport { RiHomeLine } from 'react-icons/ri';\r\nimport { Button } from 'primereact/button';\r\nimport { PublicClientApplication, EventType } from \"@azure/msal-browser\";\r\nimport { msalConfig } from 'helpers/authConfig';\r\n\r\n\r\n\r\nimport {\r\n    getFrontendUrl,\r\n    getImageFileNameByID2,\r\n    IImagesState,\r\n    getImageLinkByID2,\r\n    getMobileImageLinkByID2,\r\n    getCMSAssets,\r\n    getServiceUrlPara\r\n} from 'helpers/Uri';\r\n\r\nimport { clearSessionAction } from \"stores/Session\";\r\nimport { IAppState } from 'model/IAppState';\r\nimport { enumOrdersTabName } from \"helpers/enum\";\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { isNil } from 'lodash';\r\nimport { AiOutlineSearch, AiOutlineLogin, AiOutlineUser } from \"react-icons/ai\";\r\nimport { classNames } from 'primereact/utils';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { logout } from 'services/User';\r\n\r\n//import { useAnalyticsEventTracker } from 'helpers/useAnalyticsEventTracker';\r\nimport { Menu } from 'primereact/menu';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { setTimeout } from 'timers';\r\nimport { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react';\r\n//import { InteractionStatus } from \"@azure/msal-browser\";\r\n//import { loginRequest, b2cPolicies } from 'helpers/authConfig';\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\nimport { useClearUserDataStore } from 'helpers/useClearUserDataStore';\r\n\r\nimport * as userService from 'services/User';\r\n\r\n\r\nexport const UserPopUp = (props: any) => {\r\n    const { isClickable } = props;\r\n\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n    const azureB2C = useAzureB2C();\r\n    const clearUserData = useClearUserDataStore();\r\n\r\n    const [userVisible, setUserVisible] = useState(false);\r\n\r\n    //const gaEventTracker = useAnalyticsEventTracker('Menu');\r\n\r\n    const loginSession = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    const scrollPosition = useSelector((state: IAppState) => {\r\n        return state.scrollPosition;\r\n    });\r\n\r\n    //images\r\n    const initImage: IImagesState = {\r\n        imageLoaded: false,\r\n        imageList: []\r\n    }\r\n    const [images, setImages] = useState<IImagesState>(initImage);\r\n\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const [activeButton, setActiveButton] = useState('lyriq');\r\n\r\n    const toSignIn = () => {\r\n        azureB2C.signIn();\r\n    }\r\n\r\n    const toMyOrders = () => {\r\n        navigate(`${getFrontendUrl()}/my-orders`);\r\n        setUserVisible(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    }\r\n\r\n    const toProfiles = () => {\r\n        navigate(`${getFrontendUrl()}/profile`);\r\n        setUserVisible(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    }\r\n\r\n    const toPrivacy = () => {\r\n        navigate(`${getFrontendUrl()}/privacy`);\r\n        setUserVisible(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    }\r\n\r\n    const onGotoOrdersManagementPage = (tab: number) => {\r\n        //buttonClickLog(\"Menu\", \"Orders\");\r\n        navigate(`/member-orders/${tab}`);\r\n    }\r\n    const onGotoAdminOrdersManagementPage = (tab: number) => {\r\n        navigate(`/manager-orders/${tab}`);\r\n    }\r\n    const onGotoUpdateProfilePage = () => {\r\n        navigate(`/update-member-details`);\r\n    }\r\n    const onGotoUpdatePasswordPage = () => {\r\n        navigate(`/update-password`);\r\n    }\r\n\r\n    const onLogOut = async () => {\r\n        console.log(1);\r\n        let response = await userService.clearSession();\r\n        if (response.status) {\r\n            setUserVisible(false);\r\n            document.body.style.overflowY = 'scroll';\r\n            document.body.style.paddingRight = '0px';\r\n            clearUserData.clearData();\r\n            azureB2C.signOut();\r\n        }\r\n    }\r\n\r\n    const onUserOpen = () => {\r\n        setUserVisible(true);\r\n        document.body.style.overflowY = 'hidden';\r\n        document.body.style.paddingRight = '15px';\r\n    }\r\n\r\n    const onUserHide = () => {\r\n        setUserVisible(false);\r\n        document.body.style.overflowY = 'scroll';\r\n        document.body.style.paddingRight = '0px';\r\n    }\r\n\r\n\r\n    const menu = useRef(null);\r\n\r\n\r\n    //const showSignPage = () => {\r\n    //    navigate(`/sign-in`);\r\n    //}\r\n\r\n    const customHeader = (\r\n        <div className='pop-up-dialog-header'>\r\n            <div className='dialog-btn-panel'>\r\n                <Button\r\n                    // Replace 'pi-custom-close-icon' with the desired icon class\r\n                    onClick={() => onUserHide()}\r\n                    className=\"p-dialog-titlebar-close\"\r\n                >\r\n                    <img alt=\"\" src={`${getCMSAssets()}/users/cross.svg`} />\r\n                </Button>\r\n            </div>\r\n            <div className='account-main'>\r\n                <img alt=\"\" src={`${getCMSAssets()}/menu/div.gn-misc.svg`} />\r\n                <span>Access your Cadillac <br/>vehicle orders and settings.</span>\r\n            </div>\r\n        </div>\r\n    );\r\n\r\n    return (\r\n        <>\r\n            <div className='search-wrapper-container'>\r\n\r\n                {isNil(loginSession) && (\r\n                    <a className={scrollPosition.positionStatus == 'main' ?\r\n                        // \"main-online-wrapper\" \r\n                        \"online-wrapper stat-text-link\"\r\n                        :\r\n                        \"online-wrapper stat-text-link\"}\r\n                        onClick={() => {\r\n                            if (isClickable) {\r\n                                onUserOpen()\r\n                            }\r\n                        }}\r\n                        data-dtm=\"global nav\"\r\n                        data-dtm2=\"my account\"\r\n                    >\r\n                        <img src={`${getCMSAssets()}/menu/div.gn-misc.svg`} className=\"icon-user-unsigned\"></img>\r\n                        {/* {scrollPosition.positionStatus == 'main' ? <span>ACCOUNT</span> : <></>} */}\r\n                        {/* <span>Account</span> */}\r\n                    </a>\r\n                )}\r\n\r\n                {!isNil(loginSession) && (\r\n                    <a className={scrollPosition.positionStatus == 'main' ? \"main-online-wrapper\" : \"online-wrapper\"}\r\n                        onClick={() => {\r\n                            if (isClickable) {\r\n                                onUserOpen()\r\n                            }\r\n                            // if (!isNil(menu)) {\r\n                            //     (menu as any).current.toggle(event);\r\n                            // }\r\n                        }}\r\n                    >\r\n                        {/* <AiOutlineUser size=\"30\" className=\"icon-user\" color='black'/> */}\r\n                        <img src={`${getCMSAssets()}/menu/div.gn-misc.svg`} className=\"icon-user-unsigned\"></img>\r\n                        {/* <span>\r\n                            {loginSession?.FirstName && loginSession?.FirstName.charAt(0).toUpperCase() + loginSession?.FirstName.slice(1)}\r\n                        </span> */}\r\n                        {/*<Menu model={loginSession?.UserType == 1 ? userItems : adminUserItems} popup ref={menu} className=\"user-popup\" />*/}\r\n                        {/* <img src={`${getCMSAssets()}/${languageState.LanguageScreenName}/Arrow-Down.png`}  className=\"icon-arrow\"/> */}\r\n                    </a>\r\n                )}\r\n            </div>\r\n\r\n            <Dialog header={customHeader} position='top-right' style={{ position: 'absolute', top: '0', margin: '0', width: '340px' }} draggable={false} resizable={true} closable={false}\r\n                visible={userVisible} dismissableMask={true}\r\n                onHide={() => onUserHide()}\r\n                className={`user-dialog ${!isNil(loginSession) ? 'logged-in-height' : ''}`}\r\n            >\r\n                <AuthenticatedTemplate>\r\n                    <div className='sign-in-off-panel'>\r\n                        <div className='sign-in-off-options-panel'>\r\n                            <div className='sign-in-off-card' onClick={() => toMyOrders()}>\r\n                                <img src={`${getCMSAssets()}/menu/Vector.svg`}></img>\r\n                                <span>ORDERS</span>\r\n                            </div>\r\n                            <div className='sign-in-off-card' onClick={() => toProfiles()}>\r\n                                <img src={`${getCMSAssets()}/menu/div.gn-misc.svg`}></img>\r\n                                <span>PROFILE</span>\r\n                            </div>\r\n                            <div className='sign-in-off-card' onClick={() => toPrivacy()}>\r\n                                <img src={`${getCMSAssets()}/users/Lock.svg`}></img>\r\n                                <span>PRIVACY</span>\r\n                            </div>\r\n                        </div>\r\n                        <div className='sign-in-off-quit-panel'>\r\n                            <div className='sign-in-off-card' onClick={() => onLogOut()}>\r\n                                <img src={`${getCMSAssets()}/users/hide.svg`} className=\"icon-user-unsigned\"></img>\r\n                                <span>SIGN OUT</span>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </AuthenticatedTemplate>\r\n                <UnauthenticatedTemplate>\r\n                    <div className='sign-in-off-card stat-text-link' data-dtm=\"my account\" onClick={() => toSignIn()}>\r\n                        Sign In\r\n                    </div>\r\n                </UnauthenticatedTemplate>\r\n            </Dialog>\r\n        </>\r\n    );\r\n};\r\n\r\n\r\n","import React, { useRef, useEffect, useLayoutEffect, useState } from 'react';\r\nimport { useParams, useNavigate, Link, useLocation } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { Row, Col, Navbar, Accordion } from 'react-bootstrap';\r\nimport { RiHomeLine } from 'react-icons/ri';\r\nimport { Button } from 'primereact/button';\r\nimport { PublicClientApplication, EventType } from \"@azure/msal-browser\";\r\nimport { msalConfig } from 'helpers/authConfig';\r\n\r\n\r\n\r\nimport {\r\n    getFrontendUrl,\r\n    getImageFileNameByID2,\r\n    IImagesState,\r\n    getImageLinkByID2,\r\n    getMobileImageLinkByID2,\r\n    getCMSAssets,\r\n    getFrontendUrlWithSlash\r\n} from 'helpers/Uri';\r\n\r\nimport { clearSessionAction } from \"stores/Session\";\r\nimport { IAppState } from 'model/IAppState';\r\nimport { enumOrdersTabName } from \"helpers/enum\";\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { isNil } from 'lodash';\r\nimport { AiOutlineSearch, AiOutlineLogin, AiOutlineUser } from \"react-icons/ai\";\r\nimport { classNames } from 'primereact/utils';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { logout } from 'services/User';\r\n\r\n//import { useAnalyticsEventTracker } from 'helpers/useAnalyticsEventTracker';\r\nimport { Menu } from 'primereact/menu';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { setTimeout } from 'timers';\r\nimport { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react';\r\n//import { InteractionStatus } from \"@azure/msal-browser\";\r\n//import { loginRequest, b2cPolicies } from 'helpers/authConfig';\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\nimport { useClearUserDataStore } from 'helpers/useClearUserDataStore';\r\nimport { setGlobalDropdown } from 'stores/GlobalDropdown';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\n\r\nexport const GlobalDrawer = (props: any) => {\r\n    const { isClickable } = props;\r\n\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n    const azureB2C = useAzureB2C();\r\n    const clearUserData = useClearUserDataStore();\r\n\r\n    const [drawerVisible, setDrawerVisible] = useState(false);\r\n\r\n    //const gaEventTracker = useAnalyticsEventTracker('Menu');\r\n\r\n    const loginSession = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    const scrollPosition = useSelector((state: IAppState) => {\r\n        return state.scrollPosition;\r\n    });\r\n\r\n    //images\r\n    const initImage: IImagesState = {\r\n        imageLoaded: false,\r\n        imageList: []\r\n    }\r\n    const [images, setImages] = useState<IImagesState>(initImage);\r\n\r\n    const location = useLocation();\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const [activeButton, setActiveButton] = useState('lyriq');\r\n\r\n    const toLearnMore = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/lyriq-electric-suv', '_blank');\r\n    }\r\n\r\n    const toConfigure = (e: any) => {\r\n        setDrawerVisible(false);\r\n        navigate(`${getFrontendUrlWithSlash()}`, { state: { closePreLoader: false, isFromOtherPage: false } });\r\n        if (location.pathname == '/') {\r\n            e.preventDefault();\r\n            window.location.reload();\r\n        }\r\n    }\r\n\r\n    const toInvertory = () => {\r\n        setDrawerVisible(false);\r\n        navigate(`${getFrontendUrl()}/new-vehicle-inventory`);\r\n        dispatch(setGlobalDropdown(false, false));\r\n        dispatch(checkIsShowScrollBar(true))\r\n    }\r\n    \r\n    const toTestDrive = () => {\r\n        setDrawerVisible(false);\r\n        navigate(`${getFrontendUrl()}/test-drive`);\r\n        dispatch(setGlobalDropdown(false, false));\r\n        dispatch(checkIsShowScrollBar(true))\r\n    }\r\n\r\n    const toLatestNews = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/news', '_blank');\r\n    }\r\n\r\n    const toWhyCadillac = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/why-cadillac', '_blank');\r\n    } \r\n\r\n    const toBeIconic = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/be-iconic-series', '_blank');\r\n    }\r\n    \r\n    const toEVLife = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/ev-life', '_blank');\r\n    } \r\n\r\n    const toUpdates = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/register', '_blank');\r\n    } \r\n\r\n    const toRegisterInterest = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/register', '_blank');\r\n    }\r\n\r\n    const toVisitUs = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/visit-a-showroom', '_blank');\r\n    }\r\n    \r\n    const toFAQs = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/frequently-asked-questions', '_blank');\r\n    }\r\n\r\n    const toContactUs = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/contact-us', '_blank');\r\n    } \r\n\r\n    const toService = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/ownership-service', '_blank');\r\n        setDrawerVisible(false);\r\n    }\r\n\r\n    const toWarranty = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/ownership-warranty', '_blank');\r\n        setDrawerVisible(false);\r\n    }\r\n    \r\n    const toSupport = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/ownership-roadside-assistance', '_blank');\r\n        setDrawerVisible(false);\r\n    }\r\n\r\n    const toMyOrders = () => {\r\n        navigate(`${getFrontendUrl()}/my-orders`);\r\n        setDrawerVisible(false);\r\n    }\r\n\r\n    const toProfiles = () => {\r\n        navigate(`${getFrontendUrl()}/profile`);\r\n        setDrawerVisible(false);\r\n    }\r\n\r\n    const toPrivacy = () => {\r\n        navigate(`${getFrontendUrl()}/privacy`);\r\n        setDrawerVisible(false);\r\n    }\r\n\r\n    const onLogOut = async () => {\r\n        setDrawerVisible(false);\r\n        clearUserData.clearData();\r\n        azureB2C.signOut();\r\n    }\r\n\r\n    const onDrawerOpen = () => {\r\n        setDrawerVisible(true);\r\n        // dispatch(setGlobalDropdown(false, false));\r\n    }\r\n\r\n    const onDrawerHide = () => {\r\n        setDrawerVisible(false);\r\n    }\r\n\r\n    const customHeader = (\r\n        <div className='pop-up-dialog-header'>\r\n            <div className='dialog-btn-panel'>\r\n                <Button\r\n                    // Replace 'pi-custom-close-icon' with the desired icon class\r\n                    onClick={() => onDrawerHide()}\r\n                    className=\"p-dialog-titlebar-close\"\r\n                >\r\n                    <img alt=\"\" src={`${getCMSAssets()}/users/cross.svg`} />\r\n                </Button>\r\n            </div>\r\n        </div>\r\n    );\r\n\r\n    return (\r\n        <>\r\n            <div className='global-drawer-container'>\r\n                <a className={scrollPosition.positionStatus == 'main' ?\r\n                    // \"main-online-wrapper\" \r\n                    \"hamburger-icon stat-icon-link\"\r\n                    :\r\n                    \"hamburger-icon stat-icon-link\"}\r\n                    onClick={() => {\r\n                        if (isClickable) {\r\n                            onDrawerOpen()\r\n                        }\r\n                    }}\r\n                    data-dtm=\"global nav\"\r\n                    data-dtm2=\"hamburger menu\"\r\n                >\r\n                    {/* <img src={`${getCMSAssets()}/menu/div.gn-misc.svg`} className=\"icon-user-unsigned\"></img> */}\r\n                    <img src={`${getCMSAssets()}/menu/hamburger.svg`}  />\r\n                    {/* {scrollPosition.positionStatus == 'main' ? <span>ACCOUNT</span> : <></>} */}\r\n                    {/* <span>Account</span> */}\r\n                </a>\r\n            </div>\r\n\r\n            <Dialog header={customHeader} position='top-left' style={{ position: 'absolute', top: '0', margin: '0', width: '340px' }} draggable={false} resizable={true} closable={false}\r\n                visible={drawerVisible} dismissableMask={true}\r\n                onHide={() => onDrawerHide()}\r\n                className={`drawer-dialog ${!isNil(loginSession) ? 'logged-in-height' : ''}`}\r\n            >\r\n                <div className='drawer-section-panel'>\r\n                    <div className='drawer-discover-title'>\r\n                        LYRIQ\r\n                    </div>\r\n                    <div className='drawer-item-card' onClick={() => toLearnMore()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Learn More</span>\r\n                    </div>\r\n                    <div className='drawer-item-card' onClick={(e) => toConfigure(e)}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Build & Price</span>\r\n                    </div>\r\n                    <div className='drawer-item-card' onClick={() => toTestDrive()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Test Drive</span>\r\n                    </div>\r\n \r\n                    {/* <div className='drawer-item-card' onClick={() => toCharge()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Charge</span>\r\n                    </div>\r\n                    <div className='drawer-item-card' onClick={() => toOffering()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Business offering</span>\r\n                    </div>\r\n                    <div className='drawer-item-card' onClick={() => toHelp()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Help & support</span>\r\n                    </div> */}\r\n                </div>\r\n\r\n                <div className='drawer-section-panel'>\r\n                    <div className='drawer-discover-title'>\r\n                        DISCOVER CADILLAC \r\n                    </div>\r\n                    <div className='drawer-discover-card' onClick={() => toLatestNews()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Cadillac News</span>\r\n                    </div>\r\n                    <div className='drawer-discover-card' onClick={() => toWhyCadillac()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Why Cadillac</span>\r\n                    </div>\r\n                    <div className='drawer-discover-card' onClick={() => toBeIconic()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Be Iconic Series</span>\r\n                    </div>\r\n                    <div className='drawer-discover-card' onClick={() => toEVLife()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Your EV Life</span>\r\n                    </div>\r\n                    <div className='drawer-discover-card' onClick={() => toUpdates()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Get Updates</span>\r\n                    </div>\r\n                    {/* <div className='drawer-discover-card' onClick={() => toRegisterInterest()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Register Interest</span>\r\n                    </div> */}\r\n                    <div className='drawer-discover-card' onClick={() => toVisitUs()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Visit Us</span>\r\n                    </div>\r\n                    <div className='drawer-discover-card' onClick={() => toFAQs()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>FAQs</span>\r\n                    </div>\r\n                    <div className='drawer-discover-card' onClick={() => toContactUs()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Contact Us</span>\r\n                    </div>\r\n                </div>\r\n\r\n                <div className='drawer-section-panel'>\r\n                    <div className='drawer-ownership-title'>\r\n                        OWNERSHIP\r\n                    </div>\r\n                    <div className='drawer-ownership-card' onClick={() => toService()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Service</span>\r\n                    </div>\r\n                    <div className='drawer-ownership-card' onClick={() => toWarranty()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Warranty</span>\r\n                    </div>\r\n                    <div className='drawer-ownership-card' onClick={() => toSupport()}>\r\n                        <div className='left-blue-bar'></div>\r\n                        <span>Roadside Assistance</span>\r\n                    </div>\r\n                </div>\r\n            </Dialog>\r\n        </>\r\n    );\r\n};\r\n\r\n\r\n","import { getCMSAssets, getFrontendUrl, getFrontendUrlWithSlash } from 'helpers/Uri'\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen'\r\nimport { IAppState } from 'model/IAppState'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux'\r\nimport { useLocation, useNavigate } from 'react-router-dom'\r\nimport { setGlobalDropdown } from 'stores/GlobalDropdown'\r\n\r\nconst GlobalSelectVehicle = ({onChangeActiveBtn}: any) => {\r\n\r\n    const [selectVehicleCategory, setselectVehicleCategory] = useState<any>('ELECTRIC SUVS');\r\n\r\n    const [isVehicleSelectionDisplay, setIsVehicleSelectionDisplay] = useState<any>(false);\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const menuGlobalBtn = useSelector((state: IAppState) => {\r\n        return state.globalDropdown\r\n    });\r\n\r\n    const location = useLocation();\r\n\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n\r\n    const onHidePanel = () => {\r\n        onChangeActiveBtn('')\r\n    }\r\n\r\n    const handleVehicleSelectionDisplay = (category: string) => {\r\n        setIsVehicleSelectionDisplay(true);\r\n        setselectVehicleCategory(category);\r\n    }\r\n\r\n    const onHideVehicleSelectionPanel = () => {\r\n        setIsVehicleSelectionDisplay(false);\r\n    }\r\n\r\n    const toConfigurate = (e: any) => {\r\n        navigate(`${getFrontendUrlWithSlash()}`, { state: { closePreLoader: false, isFromOtherPage: false } });\r\n        dispatch(setGlobalDropdown(false, false));\r\n        if (location.pathname == '/') {\r\n            e.preventDefault();\r\n            window.location.reload();\r\n        }\r\n    }\r\n\r\n    const toMOVPage = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/lyriq-electric-suv', '_blank');\r\n    }\r\n\r\n    const toShowroom = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/visit-a-showroom')\r\n    }\r\n\r\n    useEffect(() => {\r\n        setIsVehicleSelectionDisplay(false);\r\n    }, [menuGlobalBtn])\r\n\r\n    return (\r\n        <div className='global-select-vehicle-container'>\r\n            {\r\n                !isMobile\r\n                ?\r\n                <div className='global-select-header-bg-box'>\r\n                    <h6>BE ICONIC</h6>\r\n                </div>\r\n                :\r\n                <></>\r\n            }\r\n\r\n\r\n            <div className='global-vehicles-inner-container'>\r\n                <Row>\r\n                    <Col md={4}>\r\n                        <div className='global-vehicles-left-sidebar-container'>\r\n                            <div className='current-vehicles-options-card'>\r\n                                <div className={selectVehicleCategory != 'ELECTRIC SUVS' ? 'vehicle-type-category' : 'vehicle-type-category selected'} onClick={() => handleVehicleSelectionDisplay('ELECTRIC SUVS')}>\r\n                                    <div className='left-blue-bar'></div>\r\n                                    <h6>ELECTRIC SUVS</h6>\r\n                                </div>\r\n                                {\r\n                                    isMobile\r\n                                    ?\r\n                                    <img src={`${getCMSAssets()}/global/arrow-black.svg`} />\r\n                                    :\r\n                                    <></>\r\n                                }\r\n                            </div>\r\n                            {/* <div className='current-vehicles-options-card'>\r\n                                <div className={selectVehicleCategory != 'V SERIES' ? 'vehicle-type-category' : 'vehicle-type-category selected'} onClick={() => handleVehicleSelectionDisplay('V SERIES')}>\r\n                                    <div className='left-blue-bar'></div>\r\n                                    <h6>V SERIES</h6>\r\n                                </div>\r\n                                {\r\n                                    isMobile\r\n                                    ?\r\n                                    <img src={`${getCMSAssets()}/global/arrow-black.svg`} />\r\n                                    :\r\n                                    <></>\r\n                                }\r\n                            </div> */}\r\n                            <div className='other-options-panel'>\r\n                                <div className='other-options-item'>\r\n                                    <div className='left-blue-bar'></div>\r\n                                    <h6 className=\"stat-text-link\" data-dtm=\"global nav\" onClick={() => toShowroom()}>CADILLAC EXPERIENCE CENTRES</h6>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </Col>\r\n                    <Col md={8} className={!isMobile || !isVehicleSelectionDisplay ? 'global-vehicles-selection-right-grid-container' : 'global-vehicles-selection-right-grid-container active'}>\r\n                        {\r\n                            isMobile\r\n                            ?\r\n                            <div className='mobile-back-to-panel' onClick={() => onHideVehicleSelectionPanel()}>\r\n                                <img className='arrow-icon' src={`${getCMSAssets()}/global/arrow-black.svg`} />\r\n                                Back\r\n                            </div>\r\n                            :\r\n                            <></>\r\n                        }\r\n                        <Row>\r\n                            <Col xs={12} md={4}>\r\n                                <div className='global-vehicle-card' >\r\n                                    <div className='vehicle-img-box' onClick={(e) => toConfigurate(e)}>\r\n                                        <img src={`${getCMSAssets()}/global/RED - sport - 1.png`} />\r\n                                    </div>\r\n                                    <p className='vehicle-brand' onClick={(e) => toConfigurate(e)}>BUILD & PRICE</p>\r\n                                    {/* <p className='vehicle-price'>From: $102,990</p> */}\r\n                                    <div className='vehicle-card-divider'></div>\r\n                                    <div className='vehicle-bottom-status'>\r\n                                        <a className='vehicle-status-box' onClick={() => toMOVPage()}>\r\n                                            <h6>LEARN MORE</h6>\r\n                                        </a>\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                        </Row>\r\n                    </Col>\r\n                </Row>\r\n            </div>\r\n              \r\n           \r\n            \r\n            {/* <div className='close-panel-btn-container'>\r\n                <Button className='close-panel-btn' onClick={() => onHidePanel() }>\r\n                    <h6>Close Flyout</h6>\r\n                </Button>\r\n            </div> */}\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default GlobalSelectVehicle","import { getCMSAssets, getFrontendUrl, getFrontendUrlWithSlash } from 'helpers/Uri'\r\nimport React, { useEffect, useRef } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap'\r\nimport { useDispatch } from 'react-redux';\r\nimport { useLocation, useNavigate } from 'react-router-dom';\r\nimport { setGlobalDropdown } from 'stores/GlobalDropdown';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\n\r\nconst GlobalShop = () => {\r\n\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n\r\n    const location = useLocation();\r\n\r\n    const toConfigure = (e: any) => {\r\n        navigate(`${getFrontendUrlWithSlash()}`, { state: { closePreLoader: false, isFromOtherPage: false } });\r\n        dispatch(setGlobalDropdown(false, false));\r\n        //if (location.pathname == '/') { }\r\n            e.preventDefault();\r\n            window.location.reload();\r\n        \r\n    }\r\n\r\n    const toInvertory = () => {\r\n        navigate(`${getFrontendUrl()}/inventory?shopfront=1`, {\r\n            state: { filterShow: true }  \r\n        });\r\n        dispatch(setGlobalDropdown(false, false));\r\n        dispatch(checkIsShowScrollBar(true))\r\n    }\r\n\r\n    const toTestDrive = () => {\r\n       \r\n        let url = `${getFrontendUrl()}/test-drive`;\r\n        navigate(url);\r\n        dispatch(setGlobalDropdown(false, false));\r\n        dispatch(checkIsShowScrollBar(true))\r\n    }\r\n\r\n    const toCenters = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/visit-a-showroom')\r\n    }\r\n\r\n    const onHidePanel = () => {\r\n        // onChangeActiveBtn('')\r\n    }\r\n    \r\n    return (\r\n        <div className='global-shop-container' >\r\n            <div className='shop-left-selection-panel'>\r\n                <div className='shop-select-item stat-text-link' data-dtm=\"global nav\" onClick={(e) => toConfigure(e)}>\r\n                    <div className='left-blue-bar'></div>\r\n                    <h6>BUILD & PRICE</h6>\r\n                </div>\r\n                <div className='shop-select-item stat-text-link' data-dtm=\"global nav\" onClick={() => toInvertory()}>\r\n                    <div className='left-blue-bar'></div>\r\n                    <h6>EXPLORE INVENTORY</h6>\r\n                </div>\r\n                <div className='shop-select-item stat-text-link' data-dtm=\"global nav\" onClick={() => toTestDrive()}>\r\n                    <div className='left-blue-bar'></div>\r\n                    <h6>TEST DRIVE</h6>\r\n                </div>\r\n            </div>\r\n            \r\n            <div className='shop-right-selection-panel'>\r\n                <div className='shop-select-title'>\r\n                    {/* <div className='left-blue-bar'></div> */}\r\n                    <h6>VISIT US</h6>\r\n                </div>\r\n                <div className='shop-select-item'>\r\n                    <div className='left-blue-bar'></div>\r\n                    <h6 onClick={() => toCenters()}>Cadillac Experience Centres</h6>\r\n                </div>\r\n            </div>\r\n            \r\n        </div>\r\n    )\r\n}\r\n\r\nexport default GlobalShop","import { useEffect, useState } from \"react\";\r\n\r\nexport const useCheckTabletScreen = () => {\r\n    const [width, setWidth] = useState(window.innerWidth);\r\n    const handleWindowSizeChange = () => {\r\n        setWidth(window.innerWidth);\r\n    }\r\n\r\n    useEffect(() => {\r\n        window.addEventListener('resize', handleWindowSizeChange);\r\n        return () => {\r\n            window.removeEventListener('resize', handleWindowSizeChange);\r\n        }\r\n    }, []);\r\n\r\n    return (width >= 768 && width <= 1024);\r\n}\r\n","import React, { useRef, useEffect, useLayoutEffect, useState } from 'react';\r\nimport { useParams, useNavigate, Link } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { Row, Col, Navbar, Accordion } from 'react-bootstrap';\r\nimport { RiHomeLine } from 'react-icons/ri';\r\n\r\nimport {\r\n    getFrontendUrl,\r\n    getImageFileNameByID2,\r\n    IImagesState,\r\n    getImageLinkByID2,\r\n    getMobileImageLinkByID2,\r\n    getCMSAssets,\r\n    getServiceUrlPara\r\n} from 'helpers/Uri';\r\n\r\nimport { clearSessionAction } from \"stores/Session\";\r\nimport { IAppState } from 'model/IAppState';\r\nimport { enumOrdersTabName } from \"helpers/enum\";\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { isNil } from 'lodash';\r\nimport { AiOutlineSearch, AiOutlineLogin, AiOutlineUser } from \"react-icons/ai\";\r\nimport { classNames } from 'primereact/utils';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { logout } from 'services/User';\r\nimport * as orderService from 'services/Order';\r\n\r\n//import { useAnalyticsEventTracker } from 'helpers/useAnalyticsEventTracker';\r\nimport { Menu } from 'primereact/menu';\r\nimport { UserPopUp } from 'scene/Users/UserPopUp';\r\nimport { setScrollPosition } from 'stores/ScrollPosition';\r\nimport { GlobalDrawer } from './GlobalDrawer';\r\nimport GlobalSelectVehicle from './GlobalSelectVehicle';\r\nimport { setGlobalDropdown } from 'stores/GlobalDropdown';\r\nimport GlobalShop from './GlobalShop';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\nimport { useCheckTabletScreen } from 'helpers/useCheckTabletScreen';\r\n\r\n\r\nexport const GlobalMenu = (props: any) => {\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n\r\n    const { activeBtn } = props;\r\n    const [activeButton, setActiveButton] = useState('');\r\n    const [isHasOrder, setIsHasOrder] = useState(false);\r\n    const [isClickable, setIsClickable] = useState(true);\r\n    const [shopDivHeight, setShopDivHeight] = useState(0);\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n    const isTablet = useCheckTabletScreen();\r\n\r\n    const menuRef = useRef<any>(null);\r\n    const vehicleRef = useRef<any>(null);\r\n    const shopRef = useRef<any>(null);\r\n\r\n    useEffect(() => {\r\n        let timeoutId: number | undefined;;\r\n\r\n        if (activeBtn != 'configure') {\r\n            setIsClickable(true);\r\n        } else {\r\n            setIsClickable(false);\r\n            // Re-enable clicks after 2.3 seconds\r\n            timeoutId = window.setTimeout(() => {\r\n                setIsClickable(true);\r\n            }, 2500);\r\n        }\r\n        return () => {\r\n            if (timeoutId) {\r\n                clearTimeout(timeoutId);\r\n            }\r\n        };\r\n    }, [activeBtn]);\r\n\r\n    //Calculate the shop div height to set its top value\r\n    useEffect(() => {\r\n        if (shopRef.current) {\r\n            setShopDivHeight(shopRef.current.offsetHeight);\r\n        }\r\n    }, [isMobile]);\r\n\r\n    const menuGlobalBtn = useSelector((state: IAppState) => {\r\n        return state.globalDropdown\r\n    })\r\n\r\n    const sessionFromStore = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    useEffect(() => {\r\n        setIsHasOrder(false);\r\n\r\n        var auCustomerID = sessionFromStore?.YanaCustomerID || \"\";\r\n        var auCustomerNo = sessionFromStore?.YanaCustomerNo || \"\";\r\n        var nzCustomerID = sessionFromStore?.NZYanaCustomerID || \"\";\r\n        var nzCustomerNo = sessionFromStore?.NZYanaCustomerNo || \"\";\r\n\r\n        if ((auCustomerID != \"\" && auCustomerNo != \"\") || (nzCustomerID != \"\" && nzCustomerNo != \"\")) {\r\n            doGetMyOrders(auCustomerID, auCustomerNo, nzCustomerID, nzCustomerNo);\r\n        }\r\n       \r\n    }, [sessionFromStore]);\r\n\r\n    const doGetMyOrders = async (yanaCustomerID: string, yanaCustomerNo: string, nzCustomerID: string, nzCustomerNo: string) => {\r\n        let response = await orderService.getOrderByYanaCustomerID(yanaCustomerID, yanaCustomerNo, nzCustomerID, nzCustomerNo);\r\n        if (response.status) {\r\n            if (!isNil(response.data) && response.data.length > 0) {\r\n                setIsHasOrder(true);\r\n            }\r\n        }\r\n        else {\r\n            setIsHasOrder(false);\r\n        }\r\n    }\r\n\r\n    const scrollPosition = useSelector((state: IAppState) => {\r\n        return state.scrollPosition;\r\n    });\r\n\r\n    const checkMainSection = useSelector((state: IAppState) => {\r\n        return state.mainSection\r\n    });\r\n\r\n    useEffect(() => {\r\n        setActiveButton(activeBtn);\r\n    }, [activeBtn]);\r\n\r\n    const onChangeActiveBtn = (activeBtnValue: string) => {\r\n        setActiveButton(activeBtnValue);\r\n        dispatch(setGlobalDropdown(false, false))\r\n    }\r\n\r\n    //Except click outside Shop component and Menu & Drawer components, Shop panel will hide the collapse\r\n    useEffect(() => {\r\n        const handleClickOutside = (event: any) => {\r\n            if ((menuGlobalBtn.shop == true && shopRef.current && !shopRef.current.contains(event.target))\r\n                && menuRef.current && !menuRef.current.contains(event.target)\r\n            ) {\r\n                onChangeActiveBtn('');\r\n                dispatch(checkIsShowScrollBar(true))\r\n            }\r\n\r\n            if ((menuGlobalBtn.vehicles == true && vehicleRef.current && !vehicleRef.current.contains(event.target))\r\n                && menuRef.current && !menuRef.current.contains(event.target)\r\n            ) {\r\n                onChangeActiveBtn('');\r\n                dispatch(checkIsShowScrollBar(true))\r\n            }\r\n        }\r\n\r\n        document.addEventListener('mousedown', handleClickOutside);\r\n        return () => {\r\n            document.removeEventListener('mousedown', handleClickOutside);\r\n        };\r\n    }, [onChangeActiveBtn]);\r\n\r\n    return (\r\n        <>\r\n            <div className=\"global-menu-container\" ref={menuRef} style={{\r\n                position: \"sticky\"\r\n                // activeBtn != 'configure' ? 'fixed' : 'sticky'\r\n                , width: '100%', backgroundColor: '#FCFCFC'\r\n            }}>\r\n\r\n                <div className='global-menu-panel' style={{ backgroundColor: '#FCFCFC' }}>\r\n                    <Row className=\"global-menu page-container-content \">\r\n                        {\r\n                            !isMobile && !isTablet\r\n                                ?\r\n                                <Col sm={12} className=\"menu-items\" style={{ backgroundColor: '#FCFCFC' }}>\r\n                                    <div className='side-container'>\r\n                                        {/* <img src={`${getCMSAssets()}/menu/hamburger.svg`}  /> */}\r\n                                        <GlobalDrawer isClickable={isClickable} />\r\n                                        {/* <button className={`certainty-panel ${activeButton === 'lyriq' ? 'active' : ''}`} \r\n                                        onClick={() => {\r\n                                            if (isClickable) setActiveButton('lyriq')\r\n                                        }\r\n                                    }>LYRIQ</button>\r\n                                    <button className={`certainty-panel ${activeButton === 'configure' ? 'active' : ''}`} \r\n                                        onClick={() => {\r\n                                            setActiveButton('configure');\r\n                                            navigate(`/${getFrontendUrlWithSlash()}`, { state: { closePreLoader: false, isFromOtherPage: false  } });\r\n                                        }}\r\n                                    >CONFIGURE</button>\r\n                                    <button className={`certainty-panel ${activeButton === 'test' ? 'active' : ''}`} \r\n                                        onClick={() => {\r\n                                            if (isClickable) {\r\n                                                setActiveButton('test');\r\n                                                navigate(`/${getFrontendVirtualDir()}/test-drive`)\r\n                                            }\r\n                                        }\r\n                                    }>TEST DRIVE</button>\r\n                                    <button className={`certainty-panel ${activeButton === 'inventory' ? 'active' : ''}`} \r\n                                        onClick={() => {\r\n                                            if (isClickable && loginSession != null && isHasOrder) {\r\n                                            \r\n                                                navigate(`/${getFrontendVirtualDir()}/inventory`)\r\n                                            } else if (isClickable) {\r\n                                                setActiveButton('inventory');\r\n                                                navigate(`/${getFrontendVirtualDir()}/new-vehicle-inventory`)\r\n                                            }\r\n                                        }\r\n                                    }>INVENTORY</button> */}\r\n\r\n                                        <button className={`certainty-panel stat-text-link global-dropdown ${activeButton === 'vehicles' ? 'active' : ''}`}\r\n                                            data-dtm=\"global nav\"\r\n                                            onClick={() => {\r\n                                                if (isClickable) {\r\n                                                    if (activeButton == 'vehicles') {\r\n                                                        setActiveButton('');\r\n                                                        dispatch(setGlobalDropdown(false, false));\r\n                                                        dispatch(checkIsShowScrollBar(true));\r\n                                                    } else {\r\n                                                        setActiveButton('vehicles');\r\n                                                        dispatch(setGlobalDropdown(true, false));\r\n                                                        dispatch(checkIsShowScrollBar(false));\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            }>VEHICLES</button>\r\n                                        <button className={`certainty-panel stat-text-link global-dropdown ${activeButton === 'shop' ? 'active' : ''}`}\r\n                                            data-dtm=\"global nav\"\r\n                                            onClick={() => {\r\n                                                if (isClickable) {\r\n                                                    if (activeButton == 'shop') {\r\n                                                        setActiveButton('');\r\n                                                        dispatch(setGlobalDropdown(false, false));\r\n                                                        dispatch(checkIsShowScrollBar(true));\r\n                                                    } else {\r\n                                                        setActiveButton('shop');\r\n                                                        dispatch(setGlobalDropdown(false, true));\r\n                                                        dispatch(checkIsShowScrollBar(false));\r\n                                                    }\r\n                                                }\r\n                                                // navigate(`/${getFrontendVirtualDir()}`, { state: { closePreLoader: false } });\r\n                                            }}\r\n                                        >SHOP</button>\r\n                                    </div>\r\n\r\n                                    <div\r\n                                        // state={{ closePreLoader: true, isFromOtherPage: true  }}\r\n                                        className=\"menu-logo stat-logo\"\r\n                                        data-dtm=\"global nav\"\r\n                                        onClick={() => {\r\n                                            dispatch(setScrollPosition('global'));\r\n                                            // navigate(`/`, { state: { closePreLoader: false, isFromOtherPage: true  } });\r\n                                            window.open('https://www.cadillacanz.com/au-en');\r\n                                        }}\r\n                                    >\r\n                                        <img src={`${getCMSAssets()}/menu/Cadillac-Logo.svg`} alt='cadillac logo'></img>\r\n                                    </div>\r\n\r\n                                    <UserPopUp isClickable={isClickable} />\r\n\r\n                                </Col>\r\n                                :\r\n                                <>\r\n                                    <Col sm={12} className=\"menu-items\">\r\n\r\n                                        <GlobalDrawer isClickable={isClickable} />\r\n\r\n                                        <div\r\n                                            // state={{ closePreLoader: true, isFromOtherPage: true  }}\r\n                                            data-dtm=\"global nav\"\r\n                                            className=\"stat-logo menu-logo\"\r\n                                            onClick={() => {\r\n                                                dispatch(setScrollPosition('global'));\r\n                                                window.open('https://www.cadillacanz.com/au-en');\r\n                                            }}\r\n                                        >\r\n                                            <img src={`${getCMSAssets()}/menu/Cadillac-Logo.svg`} alt=\"cadillac logo\"></img>\r\n                                        </div>\r\n\r\n                                        <UserPopUp isClickable={isClickable} />\r\n\r\n\r\n\r\n                                    </Col>\r\n                                    <div className='side-container'>\r\n                                        <button className={`certainty-panel stat-text-link global-dropdown ${activeButton === 'vehicles' ? 'active' : ''}`}\r\n                                            data-dtm=\"global nav\"\r\n                                            onClick={() => {\r\n                                                if (isClickable) {\r\n                                                    if (activeButton == 'vehicles') {\r\n                                                        setActiveButton('')\r\n                                                        dispatch(setGlobalDropdown(false, false))\r\n                                                    } else {\r\n                                                        setActiveButton('vehicles');\r\n                                                        dispatch(setGlobalDropdown(true, false))\r\n                                                    }\r\n                                                }\r\n                                            }\r\n                                            }>VEHICLES</button>\r\n                                        <button className={`certainty-panel stat-text-link global-dropdown ${activeButton === 'shop' ? 'active' : ''}`}\r\n                                            data-dtm=\"global nav\"\r\n                                            onClick={() => {\r\n                                                if (isClickable) {\r\n                                                    if (activeButton == 'shop') {\r\n                                                        setActiveButton('')\r\n                                                        dispatch(setGlobalDropdown(false, false))\r\n                                                    } else {\r\n                                                        setActiveButton('shop');\r\n                                                        dispatch(setGlobalDropdown(false, true))\r\n                                                    }\r\n                                                }\r\n                                                // navigate(`/${getFrontendVirtualDir()}`, { state: { closePreLoader: false } });\r\n                                            }}\r\n                                        >SHOP</button>\r\n                                    </div>\r\n                                </>\r\n                        }\r\n\r\n                    </Row>\r\n                </div>\r\n\r\n            </div>\r\n\r\n            <div ref={vehicleRef} className={menuGlobalBtn.vehicles == false ? 'global-select-vehicle' : 'global-select-vehicle active'}\r\n                style={{ width: menuGlobalBtn.vehicles == false ?  `calc(100% - 15px)` : '100%', display: menuGlobalBtn.vehicles == false ? '0' : '1'}}\r\n            >\r\n                <GlobalSelectVehicle onChangeActiveBtn={onChangeActiveBtn} />\r\n            </div>\r\n\r\n            <div ref={shopRef} className={menuGlobalBtn.shop == false ? 'global-shop' : 'global-shop active'}\r\n                style={{top: isTablet? `calc(-${shopDivHeight}px + 140px)` : `calc(-${shopDivHeight}px + 106px)`, \r\n                        width: menuGlobalBtn.shop == false ?  `calc(100% - 15px)` : '100%',\r\n                        opacity: menuGlobalBtn.shop == false ? '0' : '1'\r\n                }}\r\n            >\r\n                <GlobalShop />\r\n            </div>\r\n           \r\n        </>\r\n    );\r\n};","import React, { useEffect, useRef, useState } from 'react';\r\nimport { useParams, Link, useNavigate, useLocation } from 'react-router-dom';\r\nimport { HelmetProvider, Helmet } from 'react-helmet-async';\r\nimport { css } from '@emotion/react';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as rdUserService from 'services/User';\r\nimport { isNil } from 'lodash';\r\nimport {\r\n    getFrontendUrl,\r\n} from 'helpers/Uri';\r\n\r\ninterface Props {\r\n    title?: string;\r\n    children: React.ReactNode;\r\n    sceneId?: string;\r\n    langScreenID?: string;\r\n    metaKeywords?: string;\r\n    canonicalHref?: string;\r\n}\r\n\r\nexport const MainLayoutPage = ({ title, children, sceneId, langScreenID, metaKeywords, canonicalHref }: Props) => {\r\n    const dispatch = useDispatch();\r\n    const location = useLocation();\r\n    const searchParams = new URLSearchParams(location.search);\r\n    const navigate = useNavigate();\r\n    const isScrollbarVisible = useSelector((state: IAppState) => {\r\n        return state.isShowScrollBar.isShowScrollBar\r\n    });\r\n\r\n\r\n\r\n    const containerRef = useRef<HTMLDivElement | null>(null);\r\n\r\n    useEffect(() => {\r\n        if (containerRef.current) {\r\n            containerRef.current.style.overflowY = isScrollbarVisible ? 'scroll' : 'hidden';\r\n            // containerRef.current.style.paddingRight = isScrollbarVisible ? '15px' : '0px';\r\n        }\r\n    }, [isScrollbarVisible]);\r\n\r\n    const doGetIsShowMaintenance = async (maintenanceCodeFromUrl: string) => {\r\n        let response = await rdUserService.isShowMaintenance();\r\n        if (response.status) {\r\n            if (response.data) {\r\n\r\n                let isShowMaintenance = response.data.isShow;\r\n                let maintenanceTestingCode = response.data.maintenanceCode;\r\n                if (isShowMaintenance && maintenanceTestingCode !== maintenanceCodeFromUrl) {\r\n                    navigate(`${getFrontendUrl()}/maintenance`);\r\n                }\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n\r\n    useEffect(() => {\r\n        //remove chat box for maintenance page\r\n        const chatID = \"divChatBox\";\r\n\r\n        if (location.pathname.includes(\"/maintenance\")) {\r\n            const chatele = document.getElementById(chatID);\r\n            if (chatele) chatele.remove();\r\n        }\r\n\r\n    }, [location]);\r\n\r\n\r\n\r\n    useEffect(() => {\r\n\r\n        let maintenanceTestingCodeFromUrl = searchParams.get('maintenance') || \"\";\r\n        let codeInStorage = localStorage.getItem(\"MaintenanceTestingCode\") || \"\";\r\n        if (isNil(codeInStorage) || codeInStorage == \"\") {\r\n            if (!isNil(maintenanceTestingCodeFromUrl) && maintenanceTestingCodeFromUrl != \"\") {\r\n                localStorage.setItem(\"MaintenanceTestingCode\", maintenanceTestingCodeFromUrl || \"\");\r\n            }\r\n        }\r\n        codeInStorage = localStorage.getItem(\"MaintenanceTestingCode\") || \"\";\r\n\r\n        doGetIsShowMaintenance(codeInStorage || \"\");\r\n\r\n    }, []);\r\n\r\n    return (\r\n        <HelmetProvider>\r\n            <Helmet>\r\n                {/*<Helmet meta={[{ name: \"keywords\", content: metaKeywords }]}*/}\r\n                {/*    link={[{ rel: \"canonical\", href: canonicalHref }]}*/}\r\n                {/*>*/}\r\n                <title>{title}</title>\r\n            </Helmet>\r\n            {/* <div id=\"divPage\" css={css``} className={sceneId}> */}\r\n            {/* <nav className=\"nav-menu\" style={{ height: '106px', position: 'fixed', top: 0, width: '100%', zIndex: 1000 }}>\r\n                    <GlobalMenu  />\r\n                </nav> */}\r\n            <div className='d2c-container' ref={containerRef} >\r\n                {children}\r\n            </div>\r\n            {/* </div> */}\r\n        </HelmetProvider>\r\n    );\r\n\r\n}\r\n","import React, { useState, useEffect} from 'react';\r\nimport { Link, useNavigate } from 'react-router-dom';\r\nimport { useSelector } from 'react-redux';\r\nimport { Row, Col, Button } from 'react-bootstrap';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as rdEnum from 'helpers/enum';\r\n\r\n/*import { buttonClickLog } from 'services/Member';*/\r\n\r\nimport {\r\n    IImagesState,\r\n    getImageLinkByID2,\r\n    getMobileImageLinkByID2,\r\n    getCMSAssets,\r\n    getServiceUrlPara\r\n} from 'helpers/Uri';\r\n\r\nimport { isNil } from 'lodash';\r\nimport moment from 'moment';\r\n\r\n\r\nexport const Footer = () => {\r\n    const navigate = useNavigate();\r\n    \r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const handleActionOpen = () => {\r\n        setIsOpen(!isOpen);\r\n    }\r\n\r\n    /*language*/\r\n    useEffect(() => {\r\n    \r\n    }, []);\r\n\r\n    //images\r\n    const initImage: IImagesState = {\r\n        imageLoaded: false,\r\n        imageList: []\r\n    }\r\n    const [images, setImages] = useState<IImagesState>(initImage);\r\n\r\n\r\n    const loginSession = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    const toLatestNews = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/news', '_blank');\r\n    }\r\n    const toRegister = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/register', '_blank');\r\n    } \r\n    const towhyCadillac = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/why-cadillac', '_blank');\r\n    } \r\n    \r\n    const toEVLife = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/ev-life', '_blank');\r\n    } \r\n    const toContactUs = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/contact-us', '_blank');\r\n    } \r\n\r\n\r\n    const toWorld = () => {\r\n        window.open('https://www.cadillac.com/worldwide-websites')\r\n    }\r\n    const toCopyright = () => {\r\n        window.open('https://www.gm.com/copyright-trademark')\r\n    }\r\n    const toPrivacyPolicy = () => {\r\n        window.open('https://www.cadillacanz.com/au-en/privacy')\r\n    }\r\n\r\n    const toFacebook = () => {\r\n        window.open('https://www.facebook.com/people/Cadillac/100093522254859/')\r\n    }\r\n    const toInstagram = () => {\r\n        window.open(' https://www.instagram.com/cadillacanz/')\r\n    }\r\n\r\n    return (\r\n        <div className=\"footer-container\">\r\n                                        \r\n            <div className=\"footer \">\r\n\r\n                <div className='footer-logo-container page-container-content'>\r\n                    <img alt=\"\" src={`${getCMSAssets()}/footer/Cadillac.svg`} />\r\n                </div>\r\n\r\n                <div className='footer-content-container'>\r\n\r\n                    <div className='footer-get-updates-container'>\r\n                        <div className='checkout-btn-panel'>\r\n                            <Button className='checkout-btn' onClick={() => toRegister()}>\r\n                                GET UPDATES\r\n                            </Button>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className='footer-links-icons-container'>\r\n                        <div className='footer-links-container'>\r\n                            <a className='link-item' onClick={() => towhyCadillac()}>\r\n                                WHY CADILLAC\r\n                            </a>\r\n                            <a className='link-item' onClick={() => toRegister()}>\r\n                                REGISTER INTEREST\r\n                            </a>\r\n                            <a className='link-item' onClick={() => toEVLife()}>\r\n                                YOUR EV LIFE\r\n                            </a>\r\n                            <a className='link-item' onClick={() => toContactUs()}>\r\n                                CONTACT US\r\n                            </a>\r\n                            <a className='link-item' onClick={() => toLatestNews()}>\r\n                                CADILLAC NEWS\r\n                            </a>\r\n                        </div>\r\n                        <div className='footer-icons-container'>\r\n                            <p>FOLLOW US</p>\r\n                            <div className='footer-icons-panel'>\r\n                                <div className='icon-item' onClick={() => toInstagram()}>\r\n                                    <img alt=\"\" src={`${getCMSAssets()}/footer/Instagram.svg`} />\r\n                                </div> \r\n                                <div className='icon-item' onClick={() => toFacebook()}>\r\n                                    <img alt=\"\" src={`${getCMSAssets()}/footer/Facebook.svg`} />\r\n                                </div> \r\n\r\n                            </div>\r\n                            \r\n                            {/* <div className='icon-item'>\r\n                                <img alt=\"\" src={`${getCMSAssets()}/footer/Youtube.svg`} />\r\n                            </div>  */}\r\n                        </div>\r\n                    </div>\r\n                    \r\n                </div>\r\n            </div>\r\n\r\n            <div className='disclaimer-container'>\r\n                <div className='disclaimer-content-container'>\r\n                    <div className='disclaimer-title'>Disclaimers</div>\r\n                    <div className='disclaimer-card-container'>\r\n                        <div className='disclaimer-card'>\r\n                            <div className='disclaimer-card-title'>\r\n                                Driveaway Price<sup>1</sup>\r\n                            </div>\r\n                            {\r\n                                selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                ?\r\n                                <div className='disclaimer-content'>\r\n                                    This is the drive away price for the selected country, state or territory. It is based on the owner being a ‘rating one’ driver aged 40 with a good driving record. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), luxury car tax (LCT), stamp duty, compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                                </div>\r\n                                :\r\n                                <div className='disclaimer-content'>\r\n                                    <sup>1</sup>This is the drive away price for the selected country, state or territory. The drive away price displayed is inclusive of the vehicle purchase price, goods and services tax (GST), compulsory third party insurance, registration, a plate fees and a GST-inclusive regional delivery fee if applicable. The final drive away price may differ depending on your individual circumstances. The price does not take into account any valid discount, rebate or promotion that may be available from time to time. Each country, state or territory may offer additional registration types which are not covered in this configurator, therefore your individual situation may vary and have an impact on the final Drive Away price. Cadillac reserves the right to vary the Drive away price at its discretion, including for changes in specifications or features. The final Drive Away price will be provided to you upon checkout.\r\n                                </div>\r\n                            }\r\n                           \r\n                        </div>\r\n                        <div className='disclaimer-card'>\r\n                            <div className='disclaimer-card-title'>\r\n                                Vehicle Availability<sup>2</sup>\r\n                            </div>\r\n                            <div className='disclaimer-content'>\r\n                                Availability and delivery dates are estimates only. Many factors impact vehicle delivery. Cadillac reserves the right to make changes to availability and delivery dates displayed throughout this configurator without notice.\r\n                            </div>\r\n                        </div>\r\n                        <div className='disclaimer-card'>\r\n                            <div className='disclaimer-card-title'>\r\n                                Range<sup>3</sup>\r\n                            </div>\r\n                            <div className='disclaimer-content'>\r\n                                Based on a full charge. The range of electric vehicles is determined using a uniform measurement procedure (WLTP). Range and energy consumption may vary under real-world conditions depending on driving style and various external factors. It is therefore not always possible to achieve the range according to WLTP. \r\n                            </div>\r\n                        </div>\r\n                        <div className='disclaimer-card'>\r\n                            <div className='disclaimer-card-title'>\r\n                                Charge to 80%<sup>4</sup>\r\n                            </div>\r\n                            <div className='disclaimer-content'>\r\n                                Based on a 2025 LYRIQ charging with a compatible 190kW DC charger. Actual charge times will vary based on battery condition, output of charger, vehicle settings and outside temperature. See the vehicle's Owner's Manual for additional limitations. \r\n                            </div>\r\n                        </div>\r\n                        <div className='disclaimer-card'>\r\n                            <div className='disclaimer-card-title'>\r\n                                0-100 km/h<sup>5</sup>\r\n                            </div>\r\n                            <div className='disclaimer-content'>\r\n                                <p style={{marginBottom: '.5rem'}}>Figures based on GM testing in the United States in controlled environments. Actual figures may vary and are subject to environmental conditions.</p>\r\n                                Vehicles shown throughout this experience are simulated local production vehicles intended for illustrative purposes. Cadillac has taken reasonable steps to ensure your digital configuration replicates the vehicle you receive in real life. Colours and other features may appear different in real life.\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <div className=\"copyright-container\">\r\n                {/* <p className=\"copyright\">© 2024 GENERAL MOTORS. ALL RIGHTS RESERVED.</p> */}\r\n                <p className=\"copyright\">\r\n                    <span className='copyright-link'>\r\n                        © 2024 GENERAL MOTORS. ALL RIGHTS RESERVED.\r\n                    </span>\r\n                    &nbsp;\r\n                    <span className='copyright-link' onClick={() => toWorld()}>\r\n                        CADILLAC WORLDWIDE\r\n                    </span> &nbsp;\r\n                    <span className='copyright-link' onClick={() => toPrivacyPolicy()}> \r\n                        PRIVACY POLICY\r\n                    </span> &nbsp;\r\n                    <span className='copyright-link' onClick={() => toCopyright()}>\r\n                        COPYRIGHT &amp; TRADEMARK\r\n                    </span> \r\n                    \r\n                    {/* <span className='copyright-link' onClick={() => toWorld()}>\r\n                        CADILLAC WORLDWIDE\r\n                    </span> | &nbsp;\r\n                    <span className='copyright-link' onClick={() => toCopyright()}>\r\n                        COPYRIGHT &amp; TRADEMARK\r\n                    </span> |&nbsp;\r\n                    <span className='copyright-link' onClick={() => toPrivacyPolicy()}> \r\n                        PRIVACY POLICY\r\n                    </span>  */}\r\n                </p>\r\n            </div>\r\n{/* \r\n            <div className=\"footer page-container-content\">\r\n                <Row className='footer-items-container'>\r\n                    <Col lg={4} className='footer-items-img-box'>\r\n                    </Col>\r\n                    <Col lg={1}>\r\n                    </Col>\r\n                    <Col lg={6}>\r\n                        <Row>\r\n                            <Col lg={4} className='footer-item-card'>\r\n                                <h5>VEHICLE</h5>\r\n\r\n                                <p>LYRIQ</p>\r\n                                <p>Configure</p>\r\n                                <p>Test Drive</p>\r\n                                <p>Charge</p>\r\n                            </Col>\r\n                            <Col lg={4} className='footer-item-card'>\r\n                                <h5>CADILLAC</h5>\r\n\r\n                                <p>About us</p>\r\n                                <p>Business offering</p>\r\n                            </Col>\r\n                            <Col lg={4} className='footer-item-card'>\r\n                                <h5>CONTACT</h5>\r\n\r\n                                <p>Help & Support</p>\r\n                                <p>Newsroom</p>\r\n                            </Col>\r\n                        </Row>\r\n                        \r\n                    </Col>\r\n                </Row>\r\n\r\n                <Row className='footer-copyright-container'>\r\n\r\n                </Row>\r\n                \r\n                <Row className='footer-disclaimers-container'>\r\n\r\n                </Row>\r\n            </div> */}\r\n                \r\n        </div>\r\n    );\r\n        \r\n    \r\n};\r\n\r\n\r\n\r\n\r\n","import React, {\r\n    useState,\r\n    useEffect,\r\n    useRef,\r\n} from 'react';\r\nimport { useParams, Link, useNavigate, useLocation } from 'react-router-dom';\r\n\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isNil } from 'lodash';\r\n\r\nimport { checkMainSection, setScrollPosition } from 'stores/ScrollPosition';\r\nimport { GlobalPage } from 'pages/GlobalPage';\r\nimport { MainPage } from 'pages/MainPage';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { hideGlobalPage } from 'stores/MainRightPage';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as rdHelper from 'helpers/Uri';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as defaultConfigModel from 'model/IDefaultConfig';\r\nimport * as interestModel from 'model/IInterest';\r\nimport * as interestService from 'services/Interest';\r\nimport * as defaultConfigStore from 'stores/DefaultConfig';\r\nimport * as defaultHelper from 'businessHelpers/DefaultConfigHelper';\r\nimport * as selectedConfigStore from 'stores/UserSelectedVehicleConfig';\r\nimport * as selectedDeliveryStore from \"stores/UserSelectedDelivery\";\r\nimport * as paymentOptionsStore from \"stores/PaymentOptions\";\r\nimport * as customerTypeStore from \"stores/CustomerType\";\r\nimport * as linkSourceStore from \"stores/LinkSource\";\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport MainLeftImageGrid from 'pages/Main/MainLeftImageGrid';\r\nimport GlobalSelectVehicle from 'scene/Layout/GlobalSelectVehicle';\r\nimport { setGlobalDropdown } from 'stores/GlobalDropdown';\r\nimport GlobalShop from 'scene/Layout/GlobalShop';\r\nimport { setMainPageNumber } from 'stores/MainPageNumber';\r\nimport { useScroll } from 'pages/Main/ScrollToSection';\r\nimport { Button } from 'react-bootstrap';\r\nimport ScrollToTop from 'helpers/ScrollToTop';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport { useCheckTabletScreen } from 'helpers/useCheckTabletScreen';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\ninterface IPreLoaderOpenProps {\r\n    closePreLoader: boolean\r\n}\r\n\r\nexport const HomePage = () => {\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n\r\n    const [isToPayment, setIsToPayment] = useState(false);\r\n\r\n    const [isGlobalDialogOpen, setIsGlobalDialogOpen] = useState(true);\r\n    const [expiryedLink, setExpiryedLink] = useState(false);\r\n\r\n    const location = useLocation();\r\n    const searchParams = new URLSearchParams(location.search);\r\n    const redirectPage = searchParams.get('redirectPage');\r\n    const selectedCountry = searchParams.get('selectedCountry');\r\n    const selectedState = searchParams.get('selectedState');\r\n    const selectedVariant = searchParams.get('selectedVariant');\r\n    const selectedExterior = searchParams.get('selectedExterior');\r\n    const selectedInterior = searchParams.get('selectedInterior');\r\n\r\n    const isCheckoutPaymentPage = redirectPage && redirectPage == rdEnum.enumRedirectPage.CheckoutPaymentPage;\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n    const isTablet = useCheckTabletScreen();\r\n\r\n    const { linkKey } = useParams();\r\n\r\n    const isHideGlobal = useSelector((state: IAppState) => {\r\n        return state.mainRightPage;\r\n    });\r\n\r\n    const sectionName = useSelector((state: IAppState) => {\r\n        return state.mainSection;\r\n    });\r\n    const mainPageNumber = useSelector((state: IAppState) => {\r\n        return state.mainPageNumber.mainPageNumber\r\n    })\r\n    const defaultConfigFromStore = useSelector((state: IAppState) => {\r\n        return state.defautConfig;\r\n    });\r\n    const menuGlobalBtn = useSelector((state: IAppState) => {\r\n        return state.globalDropdown\r\n    })\r\n\r\n    const scrollToSectionRef = (ref: React.RefObject<HTMLDivElement>) => {\r\n        if (ref.current) {\r\n            ref.current.scrollIntoView({\r\n                // behavior: 'instant', \r\n                block: 'start', // or 'center', 'end', 'nearest'\r\n                inline: 'center', // or 'start', 'center', 'end'\r\n            });\r\n        }\r\n\r\n        //dispatch(hideGlobalPage(true));\r\n        // dispatch(setScrollPosition('global'));\r\n        dispatch(checkMainSection('global'));\r\n        // setScrollOpacity(0.00); // Reset opacity to 0 if less than 400\r\n        setScrollGlobalOpacity(1.00);\r\n    };\r\n\r\n    useEffect(() => {\r\n\r\n        if (\r\n            (!isNil(linkKey) && linkKey != \"\" || isCheckoutPaymentPage)\r\n            || (!isNil(selectedVariant) && selectedVariant != \"\")\r\n        ) {\r\n            setIsGlobalDialogOpen(false);\r\n        }\r\n\r\n        // if (!isNil(linkKey) && linkKey != \"\") {\r\n        //     dispatch(hideGlobalPage(false));\r\n        //     dispatch(setScrollPosition('main'));\r\n        //     dispatch(checkMainSection('variant'));\r\n        //     document.body.style.overflowY = \"scroll\";\r\n        //     document.body.style.paddingRight = \"0px\";\r\n        //     // return;\r\n        // }\r\n\r\n        let animatedElements = document.querySelectorAll('.animate-item');\r\n\r\n        //Scroll to top instantly without any animation\r\n        // if (isMobile) {\r\n        //     window.scrollTo({top: 0, behavior: 'instant'} as any);\r\n        // } else {\r\n        // document.querySelector(\"body\")?.scrollTo({ top: 0, behavior: 'instant' } as any);\r\n        // }\r\n\r\n        scrollToSectionRef(containerRef);\r\n\r\n        const thresholdValue = 0.5;\r\n\r\n        const observer = new IntersectionObserver((entries) => {\r\n            entries.forEach((entry) => {\r\n                if (entry.isIntersecting) {\r\n                    entry.target.classList.add('animate-active');\r\n                } else {\r\n                    entry.target.classList.remove('animate-active');\r\n                }\r\n            })\r\n        }, {\r\n            threshold: thresholdValue,\r\n        });\r\n\r\n        for (let i = 0; i < animatedElements.length; i++) {\r\n            const el = animatedElements[i];\r\n            observer.observe(el);\r\n        }\r\n    }, [isMobile]);\r\n\r\n    const containerRef = useRef<any>(null);\r\n\r\n    // const [y, setY] = useState(window.scrollY);\r\n    // const [isScrollDown, setIsScrollDown] = useState(0);\r\n\r\n    // const [pageScroll, setPageScroll] = useState(0);\r\n\r\n    const [scrollGlobalOpacity, setScrollGlobalOpacity] = useState(1.00);\r\n\r\n    const [scrollOpacity, setScrollOpacity] = useState(0.00);\r\n\r\n    useEffect(() => {\r\n        if (isCheckoutPaymentPage) {\r\n            dispatch(setScrollPosition('payment'));\r\n            dispatch(setMainPageNumber(1));\r\n        }\r\n    }, [])\r\n\r\n\r\n    useEffect(() => {\r\n        //from inventory page\r\n        if (!isNil(selectedVariant) && selectedVariant != \"\") {\r\n            let defaultConfig: defaultConfigModel.IDefaultConfig = {\r\n                Country: selectedCountry,\r\n                State: selectedState,\r\n                VariantName: selectedVariant,\r\n                ExteriorName: selectedExterior,\r\n                InteriorName: selectedInterior,\r\n                Options: [],\r\n                Loaded: false,\r\n                LinkKey: null,\r\n                ExpiryDateText: null,\r\n            }\r\n            dispatch(defaultConfigStore.setDefaultConfigAction(defaultConfig));\r\n            dispatch(linkSourceStore.setLinkSourceAction(null));\r\n\r\n            let delivery: selectedConfigModel.ISelectedDelivery = {\r\n                Country: {\r\n                    name: selectedCountry == rdEnum.enumCountryCode.Australia ? \"Australia\" : \"New Zealand\",\r\n                    code: selectedCountry || \"\"\r\n                },\r\n                State: {\r\n                    name: selectedState || \"\",\r\n                    code: selectedState || \"\"\r\n                },\r\n                SelectedPickupLocation: null,\r\n                SelectedDeliveryOption: null,\r\n                SelectedDeliveryFullAddress: null,\r\n                SelectedDeliveryPostcode: null,\r\n                SelectedDeliveryState: null,\r\n                SelectedDeliverySuburb: null,\r\n                //EstDeliveryDate: null,\r\n                PrimaryAddress: null,\r\n                PrimaryPostcode: null,\r\n                PrimarySuburb: null,\r\n                PrimaryState: null,\r\n                InvalidPrimaryAddress: null,\r\n                DeliveryAvailable: null,\r\n                DeliveryPrice: null,\r\n                DeliveryPriceErrorCode: null,\r\n                DeliveryDistance: null,\r\n                PickupLocationName: null,\r\n            };\r\n            dispatch(selectedDeliveryStore.updateDeliveryAction(delivery));\r\n\r\n            //clear payment options\r\n            dispatch(paymentOptionsStore.clearPaymentOptionsAction());\r\n\r\n            //default set customer type as private customer\r\n            dispatch(customerTypeStore.setCustomerTypeAction(rdEnum.enumClientTypes.Private.Code));\r\n        }\r\n        else {\r\n            if (!isNil(linkKey) && linkKey != \"\") {\r\n                if (!isNil(linkKey) && linkKey != \"\") {\r\n                    doGetInterest();\r\n                }\r\n                else {\r\n                    dispatch(defaultConfigStore.setDefaultConfigAction(defaultHelper.getInitDefaultConfig()));\r\n                    dispatch(linkSourceStore.setLinkSourceAction(null));\r\n                }\r\n            }\r\n        }\r\n\r\n    }, [selectedVariant, linkKey]);\r\n\r\n\r\n    //useEffect(() => {\r\n    //    //from interest link from email\r\n    //    if (!isNil(linkKey) && linkKey != \"\") {\r\n    //        doGetInterest();\r\n    //    }\r\n    //    else {\r\n    //        dispatch(defaultConfigStore.setDefaultConfigAction(defaultHelper.getInitDefaultConfig()));\r\n    //        dispatch(linkSourceStore.setLinkSourceAction(null));\r\n    //    }\r\n    //}, [linkKey]);\r\n\r\n    const doGetInterest = async () => {\r\n        let response = await interestService.getInterest(linkKey || \"\");\r\n        if (response.status) {\r\n\r\n            let interestBackendData = response.data;\r\n            if (interestBackendData.isExpired) {\r\n                //expiry redirect to normal configuration page\r\n                setExpiryedLink(true);\r\n                setTimeout(() => {\r\n                    let url = rdHelper.getFrontendOrigin();\r\n                    window.location.href = url;\r\n                }, 3000);\r\n\r\n                return;\r\n            }\r\n            setExpiryedLink(false);\r\n            if (defaultConfigFromStore?.LinkKey != linkKey) {\r\n                let defaultConfig: defaultConfigModel.IDefaultConfig = {\r\n                    Country: interestBackendData.country,\r\n                    State: interestBackendData.state,\r\n                    VariantName: interestBackendData.variantName,\r\n                    ExteriorName: interestBackendData.exteriorName,\r\n                    InteriorName: interestBackendData.interiorName,\r\n                    Options: getInterestOptions(interestBackendData.options),\r\n                    Loaded: false,\r\n                    LinkKey: linkKey,\r\n                    ExpiryDateText: interestBackendData.expiryDateText,\r\n                }\r\n                dispatch(defaultConfigStore.setDefaultConfigAction(defaultConfig));\r\n\r\n                //set link source type\r\n                dispatch(linkSourceStore.setLinkSourceAction(interestBackendData.typeOfLink));\r\n            }\r\n\r\n\r\n            //updating country/state must happened after updating defaultConfig value \r\n            //because getting variant / exterior / interior / options list happened once country/state store has data\r\n            let delivery: selectedConfigModel.ISelectedDelivery = {\r\n                Country: {\r\n                    name: interestBackendData.country == rdEnum.enumCountryCode.Australia ? \"Australia\" : \"New Zealand\",\r\n                    code: interestBackendData.country\r\n                },\r\n                State: {\r\n                    name: interestBackendData.state,\r\n                    code: interestBackendData.state\r\n                },\r\n                SelectedPickupLocation: null,\r\n                SelectedDeliveryOption: null,\r\n                SelectedDeliveryFullAddress: null,\r\n                SelectedDeliveryPostcode: null,\r\n                SelectedDeliveryState: null,\r\n                SelectedDeliverySuburb: null,\r\n                //EstDeliveryDate: null,\r\n                PrimaryAddress: null,\r\n                PrimaryPostcode: null,\r\n                PrimarySuburb: null,\r\n                PrimaryState: null,\r\n                InvalidPrimaryAddress: null,\r\n                DeliveryAvailable: null,\r\n                DeliveryPrice: null,\r\n                DeliveryPriceErrorCode: null,\r\n                DeliveryDistance: null,\r\n                PickupLocationName: null,\r\n            };\r\n            dispatch(selectedDeliveryStore.updateDeliveryAction(delivery));\r\n\r\n            //clear payment options\r\n            dispatch(paymentOptionsStore.clearPaymentOptionsAction());\r\n\r\n            //default set customer type as private customer\r\n            dispatch(customerTypeStore.setCustomerTypeAction(rdEnum.enumClientTypes.Private.Code));\r\n        }\r\n\r\n\r\n    }\r\n\r\n    const getInterestOptions = (optionData: any): vehicleModel.IVehicleOptions[] | null => {\r\n        let configs: vehicleModel.IVehicleOptions[] = [];\r\n        optionData.map((item: any) => {\r\n            configs.push({\r\n                YanaOptionID: \"\",\r\n                OptionType: item.optionType,\r\n                OptionName: item.optionName,\r\n                OptionPrice: item.optionPrice,\r\n                OptionPicture: [],\r\n                OptionPictureMobile: [],\r\n                OptionDesc: item.optionDesc,\r\n                ChargeType: item.chargeType,\r\n                Disable: false,\r\n                TermsDescription: null\r\n            });\r\n        });\r\n        return configs;\r\n    }\r\n\r\n    useEffect(() => {\r\n        const sections = document.querySelectorAll('[data-section-id]');\r\n        const observers: IntersectionObserver[] = [];\r\n\r\n        sections.forEach((section) => {\r\n            const sectionElement = section as HTMLElement;\r\n            const sectionHeight = sectionElement.offsetHeight;\r\n            const viewportHeight = window.innerHeight;\r\n            //let thresholdValue;\r\n            //// = sectionHeight < 500 ? 0.39 : Math.min(sectionHeight / viewportHeight, 1);\r\n            //if (isMobile) {\r\n            //    thresholdValue = sectionHeight < 500 \r\n            //        ? 0.35\r\n            //        : thresholdValue = sectionHeight >= 550 && sectionHeight < 1550 \r\n            //        ? 0.35 \r\n            //        : Math.min(sectionHeight / viewportHeight, 0.76); \r\n            //} else if (isTablet) {\r\n            //    thresholdValue = sectionHeight < 600 \r\n            //        ? 0.38 \r\n            //        : Math.min(sectionHeight / viewportHeight, 0.85); \r\n            //} else {\r\n            //    thresholdValue = sectionHeight < 550 \r\n            //        ? 0.90\r\n            //        : thresholdValue = sectionHeight >= 550 && sectionHeight < 1550 \r\n            //        ? 0.70\r\n            //        : thresholdValue = sectionHeight >= 1550 \r\n            //        ? 0.16\r\n            //        : Math.min(sectionHeight / viewportHeight, 0.20); \r\n            //}\r\n\r\n            // const observerOptions = {\r\n            //     root: null,\r\n            //     rootMargin: '0px',\r\n            //     threshold: thresholdValue,\r\n            // };\r\n\r\n\r\n            // const observer = new IntersectionObserver((entries) => {\r\n            //     entries.forEach(entry => {\r\n            //         const sectionId = entry.target.getAttribute('data-section-id');\r\n            //         console.log(entry, sectionId)\r\n            //         if (entry.isIntersecting) {\r\n\r\n            //             if (sectionId) {\r\n            //                 dispatch(checkMainSection(sectionId));\r\n            //             }\r\n            //         }\r\n            //     });\r\n            // }, observerOptions);\r\n\r\n            // observer.observe(section);\r\n            // observers.push(observer);\r\n            //console.log(sectionElement.getAttribute('data-section-id'));\r\n            let thresholdValue = 0.39;\r\n            let sid = sectionElement.getAttribute('data-section-id');\r\n            if (sid == rdEnum.enumScrollSection.Accessories) {\r\n                thresholdValue = 0.25;\r\n            }\r\n            else if (sid == rdEnum.enumScrollSection.Exterior || sid == rdEnum.enumScrollSection.Interior) {\r\n                thresholdValue = 0.9;\r\n            }\r\n            const observerOptions = {\r\n                root: null,\r\n                rootMargin: '0px 0px 0px 0px', // Large margin to ensure detection even if slightly offscreen\r\n                threshold: thresholdValue, // A low threshold to capture any slight intersection\r\n            };\r\n\r\n            //console.log(sid + \"-\" + thresholdValue);\r\n            const observer = new IntersectionObserver((entries) => {\r\n                entries.forEach(entry => {\r\n                    const sectionId = entry.target.getAttribute('data-section-id');\r\n                    //console.log(sectionId);\r\n                    if (entry.isIntersecting) {\r\n                        //console.log('Intersecting:', sectionId); // Log when an element is intersecting\r\n                        if (sectionId) {\r\n                            dispatch(checkMainSection(sectionId));\r\n                        }\r\n                    }\r\n                });\r\n            }, observerOptions);\r\n\r\n            observer.observe(section);\r\n            observers.push(observer);\r\n\r\n            //const sections = document.querySelectorAll('.nav_item');\r\n            //sections.forEach(section => {\r\n            //    observer.observe(section);\r\n            //    observers.push(observer);\r\n            //});\r\n        });\r\n\r\n        // Cleanup all observers on unmount\r\n        return () => {\r\n            observers.forEach(observer => observer.disconnect());\r\n        };\r\n    }, [dispatch, isTablet, isMobile]);\r\n\r\n    const [isShowBottomPanel, setIsShowBottomPanel] = useState(false);\r\n\r\n    let scrollTimeout: number;\r\n\r\n    useEffect(() => {\r\n        dispatch(setGlobalDropdown(false, false));\r\n    }, []);\r\n\r\n    // const [isScrolled, setIsScrolled] = useState(false);\r\n\r\n    // const handleScroll = (event: any) => {\r\n    //     const scrollTop = event.target.scrollTop;\r\n    //     setIsScrolled(scrollTop > 50); \r\n    // };\r\n\r\n    // useEffect(() => {\r\n    //     const globalContainer = document.querySelector('.global-container');\r\n    //     globalContainer?.addEventListener('scroll', handleScroll);\r\n    //     return () => globalContainer?.removeEventListener('scroll', handleScroll);\r\n    // }, []);\r\n\r\n    // console.log(isScrolled)\r\n\r\n    const { scrollToSection } = useScroll();\r\n\r\n    // const [scrollDirection, setScrollDirection] = useState<'up' | 'down'>('down');\r\n    const [lastScroll, setLastScroll] = useState(0); // Track the last scroll position\r\n\r\n    useEffect(() => {\r\n        const container = document.querySelector('.d2c-container') as HTMLElement;\r\n        // const variantSection = document.querySelector('[data-section-id=\"variant\"]') as HTMLElement;\r\n\r\n        const handleScroll = () => {\r\n            // const thresholdStart = 100;\r\n            // const thresholdEnd = 350;\r\n            const scrollPosition = container?.scrollTop || 0;\r\n\r\n            // Detect scroll direction\r\n            // const direction = scrollPosition > lastScroll ? 'down' : 'up';\r\n            // setScrollDirection(direction);\r\n            // setLastScroll(scrollPosition); // Update last scroll position\r\n            if (!isMobile) {\r\n                if (scrollPosition <= 750 && mainPageNumber == 0) {\r\n                    // dispatch(setScrollPosition('global'));\r\n                    dispatch(checkMainSection('global'))\r\n                    // setScrollOpacity(0.00); // Reset opacity to 0 if less than 400\r\n                    const globalOpacityRatio = parseFloat(((670 - scrollPosition) / 200).toFixed(2)); // Opacity from 1 to 0\r\n                    setScrollGlobalOpacity(globalOpacityRatio >= 0 ? globalOpacityRatio : 0);\r\n                } else if (scrollPosition > 750 && scrollPosition <= 1150 && mainPageNumber == 0) {\r\n                    // dispatch(setScrollPosition('main'));\r\n                    dispatch(checkMainSection('variant'));\r\n                    // dispatch(setScrollPosition('main'));\r\n                    // container.scrollTo({ top: 0, behavior: 'smooth' }); \r\n                    // scrollToSectionRef(containerRef);\r\n\r\n                    // dispatch(setScrollPosition('global')); // Dispatch action to set scroll position to global\r\n                    // setScrollOpacity(0.00); // Reset opacity to 0 if less than 400\r\n                    // setScrollGlobalOpacity(1.00);\r\n\r\n                    // const opacityPercentage = parseFloat(((scrollPosition - 950) / 450).toFixed(2)); // Opacity from 0 to 1\r\n                    // setScrollOpacity(opacityPercentage <= 1 ? opacityPercentage : 1); // Ensure opacity doesn't exceed 1\r\n                } else if (mainPageNumber != 0) {\r\n                    dispatch(checkMainSection('checkoutForm'));\r\n                }\r\n            } else {\r\n                setIsShowBottomPanel(true);\r\n\r\n                if (scrollTimeout) {\r\n                    clearTimeout(scrollTimeout);\r\n                }\r\n\r\n                scrollTimeout = window.setTimeout(() => {\r\n                    setIsShowBottomPanel(false);\r\n                }, 500);\r\n\r\n                if (scrollPosition <= 750 && mainPageNumber == 0) {\r\n                    // dispatch(setScrollPosition('global'));\r\n                    dispatch(checkMainSection('global'))\r\n                    // setScrollOpacity(0.00); // Reset opacity to 0 if less than 400\r\n                    const globalOpacityRatio = parseFloat(((670 - scrollPosition) / 200).toFixed(2)); // Opacity from 1 to 0\r\n                    setScrollGlobalOpacity(globalOpacityRatio >= 0 ? globalOpacityRatio : 0);\r\n                } else if (scrollPosition > 750 && scrollPosition <= 1050 && mainPageNumber == 0) {\r\n                    // dispatch(setScrollPosition('main'));\r\n                    dispatch(checkMainSection('variant'));\r\n                    // dispatch(setScrollPosition('main'));\r\n                    // container.scrollTo({ top: 0, behavior: 'smooth' }); \r\n                    // scrollToSectionRef(containerRef);\r\n\r\n                    // dispatch(setScrollPosition('global')); // Dispatch action to set scroll position to global\r\n                    // setScrollOpacity(0.00); // Reset opacity to 0 if less than 400\r\n                    // setScrollGlobalOpacity(1.00);\r\n\r\n                    // const opacityPercentage = parseFloat(((scrollPosition - 950) / 450).toFixed(2)); // Opacity from 0 to 1\r\n                    // setScrollOpacity(opacityPercentage <= 1 ? opacityPercentage : 1); // Ensure opacity doesn't exceed 1\r\n                } else if (mainPageNumber != 0) {\r\n                    dispatch(checkMainSection('checkoutForm'));\r\n                }\r\n            }\r\n\r\n            // else if (scrollPosition > 1150) {\r\n            //     setScrollGlobalOpacity(0.00); // Fully hide global section\r\n            //     setScrollOpacity(1.00);       // Fully show main section\r\n            // }\r\n\r\n            // Scroll down to variant when scrolling between 100px and 200px and if scrolling down\r\n            // if (scrollPosition >= thresholdStart && scrollPosition <= thresholdEnd && scrollDirection === 'down') {\r\n            //     // scrollToSection('variant');\r\n            //     setTimeout(() => {\r\n            //         scrollToSection('variant');\r\n            //     }, 100);\r\n            // }\r\n\r\n            // Get the position of variant section relative to the scrollable container\r\n\r\n            // Check if the variant section is more than 300px from the top of the container and scroll up\r\n            // if (containerToTop > 900 && containerToTop < 1000 \r\n            //     // && scrollDirection == 'up'\r\n            // ) {\r\n            //     console.log('Scrolling back to global');\r\n\r\n            // }\r\n        };\r\n\r\n        // Attach scroll event listener to the container\r\n        container?.addEventListener('scroll', handleScroll);\r\n\r\n        // Cleanup event listener\r\n        return () => {\r\n            container?.removeEventListener('scroll', handleScroll);\r\n\r\n            if (isMobile && scrollTimeout) {\r\n                clearTimeout(scrollTimeout);\r\n            }\r\n        };\r\n    }, [mainPageNumber]);\r\n\r\n\r\n\r\n    const updateDeviceRatioClass = () => {\r\n        const width: number = window.screen.width;\r\n        const height: number = window.screen.height;\r\n        const ratio: number = width / height; // Calculate and round the ratio\r\n        // const ratioClass = `device-ratio-${Math.round(ratio * 100)}`; // Convert to class like .device-ratio-177\r\n\r\n        const globalContainer = document.querySelector('.global-container');\r\n\r\n        // Remove previous ratio classes\r\n        globalContainer?.classList.forEach(className => {\r\n            if (className.startsWith('device-ratio-')) {\r\n                globalContainer?.classList.remove(className);\r\n            }\r\n        });\r\n\r\n        if (ratio >= 1.75 && ratio <= 1.79) {\r\n            globalContainer?.classList.add('device-ratio-177');\r\n        } else if (ratio >= 1.58 && ratio <= 1.62) {\r\n            globalContainer?.classList.add('device-ratio-160');\r\n        } else {\r\n            // Add other conditions as needed for different aspect ratios\r\n            const roundedRatio = Math.round(ratio * 100);\r\n            globalContainer?.classList.add(`device-ratio-${roundedRatio}`);\r\n        }\r\n    };\r\n\r\n    useEffect(() => {\r\n        // Initial check\r\n        updateDeviceRatioClass();\r\n\r\n    }, []);\r\n\r\n\r\n    return (\r\n        <MainLayoutPage>\r\n            {expiryedLink && (\r\n                <div>The link has expired... You will be redirected to LYRIQ configurator …</div>\r\n            )}\r\n            {!expiryedLink && (\r\n                <React.Fragment>\r\n                    <nav className=\"nav-menu\"\r\n                        style={{\r\n                            position: 'fixed', top: 0, zIndex: 1001,\r\n                            width: menuGlobalBtn.vehicles == true || menuGlobalBtn.shop == true || isMobile ? '100%' : 'calc(100% - 15px)'\r\n                        }}\r\n                    >\r\n                        <GlobalMenu activeBtn='configure' />\r\n                    </nav>\r\n\r\n                    <section className='section global' data-section-id='global'\r\n                        style={{\r\n                            // paddingBottom: '385px',\r\n                            display: mainPageNumber != 0 ? 'none' : \"\",\r\n                            height: mainPageNumber != 0 ? '0' : 'auto',\r\n                            opacity: `${scrollGlobalOpacity}`,\r\n                        }}>\r\n                        <div className='animate-item'>\r\n                            <GlobalPage isGlobalDialogOpen={isGlobalDialogOpen} />\r\n                        </div>\r\n                    </section>\r\n\r\n                    <MainPage\r\n                        linkKey={linkKey}\r\n                        selectedCountry={selectedCountry}\r\n                        selectedState={selectedState}\r\n                        selectedVariant={selectedVariant}\r\n                        selectedExterior={selectedExterior}\r\n                        selectedInterior={selectedInterior}\r\n                        isShowBottomPanel={isShowBottomPanel}\r\n                    />\r\n\r\n                    <Footer />\r\n\r\n                </React.Fragment>\r\n            )}\r\n        </MainLayoutPage>\r\n    );\r\n};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n // useEffect(() => {\r\n    //     const options = {\r\n    //         root: null, // relative to the viewport\r\n    //         rootMargin: '0px',\r\n    //         threshold: .7 // 70% of the section must be visible\r\n    //     };\r\n\r\n    //     const observer = new IntersectionObserver((entries) => {\r\n    //         entries.forEach(entry => {\r\n    //             if (entry.isIntersecting) {\r\n    //                 const sectionId = entry.target.getAttribute('data-section-id');\r\n    //                 if (sectionId) {\r\n    //                     dispatch(checkMainSection(sectionId));\r\n\r\n    //                 }\r\n    //             }\r\n    //         });\r\n    //     }, options);\r\n\r\n    //     //Because the last Checkout Form Section height is too large, threshold: 0.8 will cause many issues\r\n    //     // like nav-menu not display etc. so set last section threshold individually is necessary\r\n    //     const lastChildObserver = new IntersectionObserver((entries, observer) => {\r\n    //         entries.forEach(entry => {\r\n    //             if (entry.isIntersecting) {\r\n    //                 const sectionId = entry.target.getAttribute('data-section-id');\r\n    //                 if (sectionId) {\r\n    //                     dispatch(checkMainSection(sectionId));\r\n    //                 }\r\n    //             }\r\n    //         });\r\n    //     }, { threshold: 0.3 });\r\n\r\n    //     const sections = document.querySelectorAll('.d2c-container section');\r\n    //     // sections.forEach(section => observer.observe(section));\r\n\r\n    //     // return () => {\r\n    //     //     sections.forEach(section => observer.unobserve(section));\r\n    //     // };\r\n\r\n    //     sections.forEach((section, index) => {\r\n    //         if (index === sections.length - 1) {\r\n    //             lastChildObserver.observe(section);\r\n    //         } else {\r\n    //             observer.observe(section);\r\n    //         }\r\n    //     });\r\n\r\n    //     return () => {\r\n    //         sections.forEach((section, index) => {\r\n    //             if (index === sections.length - 1) {\r\n    //                 lastChildObserver.unobserve(section);\r\n    //             } else {\r\n    //                 observer.unobserve(section);\r\n    //             }\r\n    //         });\r\n    //     };\r\n    // }, [dispatch]);\r\n\r\n\r\n     // useEffect(() => {\r\n    //     // const container = containerRef.current;\r\n\r\n    //     containerRef.current = document.body;\r\n\r\n    //     let shouldHandleScroll = false;\r\n\r\n    //     // setTimeout(() => {\r\n    //     //     window.scrollTo(0, 0);\r\n    //     // }, 200)\r\n\r\n    //     // document.body.style.overflowY = 'hidden';\r\n    //     // document.body.style.paddingRight = '15px';\r\n\r\n    //     // Set the flag to true after a delay to allow time for the scroll to complete\r\n    //     // setTimeout(() => {\r\n    //     //     shouldHandleScroll = true;\r\n\r\n    //     // }, 200);\r\n\r\n    //     shouldHandleScroll = true;\r\n\r\n    //     // Control d2c container stop scrolling for 2.3s, for display loader and location pop-up\r\n    //     // containerRef.current.style.overflow = 'hidden';\r\n    //     // const enableScrollTimeout = setTimeout(() => {\r\n    //     //     containerRef.current.style.overflowY = 'auto';\r\n    //     // }, 2300);\r\n\r\n    //     let scrollPosition = 0;\r\n\r\n    //     const changeScrollMenuPanel = (e: any) => {\r\n    //         if (shouldHandleScroll) {\r\n    //             // scrollPosition = (e.target as Document).documentElement.scrollTop;\r\n    //             scrollPosition = window.scrollY;\r\n    //             // console.log(window.scrollY)\r\n    //             // console.log(scrollPosition);\r\n    //             if (scrollPosition <= 400) {\r\n    //                 dispatch(setScrollPosition('global'))\r\n    //                 setScrollOpacity(0.00); // Reset opacity to 0 if less than 400\r\n    //                 setScrollGlobalOpacity(1.00);\r\n    //                 const globalOpacityRatio = parseFloat(((370 - scrollPosition) / 200).toFixed(2)); // Opacity from 0 to 1\r\n    //                 setScrollGlobalOpacity(globalOpacityRatio);\r\n    //             } else if (scrollPosition > 400 && scrollPosition <= 550) {\r\n    //                 dispatch(setScrollPosition('global'));\r\n    //                 setScrollGlobalOpacity(0);\r\n    //                 setScrollOpacity(0);\r\n    //             } else if (scrollPosition > 550 && scrollPosition <= 1000) {\r\n    //                 dispatch(setScrollPosition('main'));\r\n    //                 const opacityPercentage = parseFloat(((scrollPosition - 550) / 200).toFixed(2)); // Opacity from 0 to 1\r\n    //                 setScrollOpacity(opacityPercentage);\r\n    //             }\r\n    //             else if (scrollPosition > 1000) {\r\n    //                 setScrollGlobalOpacity(0.00);\r\n    //                 setScrollOpacity(1.00);\r\n    //                 // dispatch(setScrollPosition('main'))\r\n    //             }\r\n    //             // if (y > e.target.scrollTop) {\r\n    //             //     dispatch(checkScrollUpDown(2))\r\n    //             // } else if (y < e.target.scrollTop) {\r\n    //             //     dispatch(checkScrollUpDown(1))\r\n    //             // } else {\r\n    //             //     dispatch(checkScrollUpDown(0))\r\n    //             // }\r\n    //         } else {\r\n    //             return;\r\n    //         }\r\n    //     }\r\n\r\n    //     window.addEventListener('scroll', changeScrollMenuPanel);\r\n\r\n    //     return () => {\r\n    //         window.removeEventListener('scroll', changeScrollMenuPanel)\r\n    //         // clearTimeout(enableScrollTimeout);\r\n\r\n    //         // Enable scrolling immediately if the component is unmounted before the timeout\r\n    //         if (containerRef.current) {\r\n    //             containerRef.current.style.overflow = 'auto';\r\n    //             dispatch(checkMainSection('global'));\r\n    //             setScrollOpacity(0.00); // Reset opacity to 0 if less than 400\r\n    //             setScrollGlobalOpacity(1.00);\r\n    //             shouldHandleScroll = false;\r\n    //         }\r\n    //     }\r\n\r\n    // }, []);\r\n    // }, [handleScrollDown]); \r\n\r\n\r\n\r\n    // const [hasScrolledToVariant, setHasScrolledToVariant] = useState(false); \r\n    // const [hasScrolledBackToGlobal, setHasScrolledBackToGlobal] = useState(false);\r\n    // const [scrollLock, setScrollLock] = useState(false); // Temporary flag to disable scroll handling\r\n\r\n    // useEffect(() => {\r\n    //     const container = document.querySelector('.d2c-container') as HTMLElement;\r\n    //     const variantSection = document.querySelector('[data-section-id=\"variant\"]') as HTMLElement;\r\n\r\n    //     const handleScroll = () => {\r\n    //         if (scrollLock) return; // If scrollLock is true, skip scroll handling\r\n\r\n    //         const thresholdStart = 100;\r\n    //         const thresholdEnd = 200;\r\n    //         const scrollPosition = container?.scrollTop || 0;\r\n\r\n    //         // Scroll to variant when scrolling between 100px and 200px\r\n    //         if (scrollPosition >= thresholdStart && scrollPosition <= thresholdEnd && !hasScrolledToVariant) {\r\n    //             scrollToSection('variant');\r\n    //             setHasScrolledToVariant(true);\r\n    //             setHasScrolledBackToGlobal(false);\r\n    //         }\r\n\r\n    //         // Get the position of variant section relative to the scrollable container\r\n    //         const variantTopRelativeToContainer = variantSection.offsetTop - container.scrollTop;\r\n\r\n    //         // Check if the variant section is more than 300px from the top of the container\r\n    //         if (variantTopRelativeToContainer > 300 && !hasScrolledBackToGlobal) {\r\n    //             console.log('Scrolling back to global');\r\n    //             dispatch(setScrollPosition('global')); // Dispatch action to set scroll position to global\r\n    //             setScrollLock(true); // Lock scroll handling\r\n    //             window.scrollTo(0, 0); // Scroll back to top\r\n\r\n    //             // Unlock scroll handling after scroll is completed\r\n    //             setTimeout(() => {\r\n    //                 setScrollLock(false); // Unlock scroll handling after 100ms\r\n    //                 setHasScrolledBackToGlobal(true);\r\n    //                 setHasScrolledToVariant(false);\r\n    //             }, 100);\r\n    //         }\r\n    //     };\r\n\r\n    //     container?.addEventListener('scroll', handleScroll);\r\n\r\n    //     return () => {\r\n    //         container?.removeEventListener('scroll', handleScroll);\r\n    //     };\r\n    // }, [hasScrolledToVariant, hasScrolledBackToGlobal, scrollLock, scrollToSection]);","import styled from '@emotion/styled';\r\nimport { css } from '@emotion/react';\r\n\r\nexport const gray1 = '#383737';\r\nexport const gray2 = '#5c5a5a';\r\nexport const gray3 = '#857c81';\r\nexport const gray4 = '#b9b9b9';\r\nexport const gray5 = '#e3e2e2';\r\nexport const gray6 = '#f9f9f9';\r\nexport const primary1 = '#681c41';\r\nexport const primary2 = '#824c67';\r\nexport const accent1 = '#dbb365';\r\nexport const accent2 = '#efd197';\r\n\r\nexport const fontFamily = \"'FuturaPT'\";\r\nexport const fontSize = '16px';\r\n\r\nexport const PrimaryButton = styled.button`\r\n  background-color: ${primary2};\r\n  border-color: ${primary2};\r\n  border-style: solid;\r\n  border-radius: 5px;\r\n  font-family: ${fontFamily};\r\n  font-size: ${fontSize};\r\n  padding: 5px 10px;\r\n  color: white;\r\n  cursor: pointer;\r\n  :hover {\r\n    background-color: ${primary1};\r\n  }\r\n  :focus {\r\n    outline-color: ${primary2};\r\n  }\r\n  :disabled {\r\n    opacity: 0.5;\r\n    cursor: not-allowed;\r\n  }\r\n`;\r\n\r\nexport const Fieldset = styled.fieldset`\r\n  margin: 10px auto 0 auto;\r\n  padding: 30px;\r\n  width: 350px;\r\n  //background-color: ${gray6};\r\n  border-radius: 4px;\r\n  border: 1px solid ${gray5};\r\n  //box-shadow: 0 3px 5px 0 rgba(0, 0, 0, 0.16);\r\n`;\r\n\r\nexport const FieldContainer = styled.div`\r\n  margin-bottom: 10px;\r\n`;\r\n\r\nexport const FieldLabel = styled.label`\r\n  //font-weight: bold;\r\n  font-size: 14px;\r\n  margin-bottom: 0;\r\n`;\r\n\r\nconst baseFieldCSS = css`\r\n  box-sizing: border-box;\r\n  font-family: ${fontFamily};\r\n  font-size: ${fontSize};\r\n  margin-bottom: 5px;\r\n  padding: 8px 10px;\r\n  border: 1px solid ${gray5};\r\n  border-radius: 3px;\r\n  color: ${gray2};\r\n  background-color: white;\r\n  width: 100%;\r\n  :focus {\r\n    outline-color: ${gray5};\r\n  }\r\n  :disabled {\r\n    background-color: ${gray6};\r\n  }\r\n`;\r\n\r\nexport const FieldInput = styled.input`\r\n  ${baseFieldCSS}\r\n`;\r\n\r\nexport const FieldTextArea = styled.textarea`\r\n  ${baseFieldCSS}\r\n  height: 100px;\r\n`;\r\n\r\nexport const FieldError = styled.div`\r\n  font-size: 12px;\r\n  color: red;\r\n`;\r\n\r\nexport const FormButtonContainer = styled.div`\r\n  margin: 30px 0 0 0;\r\n  padding: 20px 0 0 0;\r\n  border-top: 1px solid ${gray5};\r\n`;\r\n\r\nexport const SubmissionSuccess = styled.div`\r\n  margin-top: 10px;\r\n  color: green;\r\n`;\r\n\r\nexport const SubmissionFailure = styled.div`\r\n  margin-top: 10px;\r\n  color: red;\r\n`;\r\n","import React from 'react'\r\n\r\nconst Spinner = (props: any) => {\r\n  return (\r\n    <div className='loader' style={{width: `${props.spinnerWidth}px`}}></div>\r\n  )\r\n}\r\n\r\nexport default Spinner","import React, {\r\n    useState,\r\n    useEffect,\r\n    useRef,\r\n} from 'react';\r\nimport { useSearchParams, useNavigate, Link } from 'react-router-dom';\r\nimport { filter, includes, find, isNil, String, clone, isNull } from 'lodash';\r\nimport { Helmet } from 'react-helmet-async';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport { Container, Row, Col, Carousel } from 'react-bootstrap';\r\nimport ScrollToTop from 'components/ScrollToTop';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport {\r\n    getFrontendUrl,\r\n} from 'helpers/Uri';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { GlobalPage } from 'pages/GlobalPage';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { IAppState } from 'model/IAppState';\r\nimport Spinner from 'components/Spinner';\r\n\r\n\r\nexport const NotFoundPage = () => {\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n    const [scrollGlobalOpacity, setScrollGlobalOpacity] = useState(1.00);\r\n    const [isGlobalDialogOpen, setIsGlobalDialogOpen] = useState(true);\r\n    const menuGlobalBtn = useSelector((state: IAppState) => {\r\n        return state.globalDropdown\r\n    })\r\n    const mainPageNumber = useSelector((state: IAppState) => {\r\n        return state.mainPageNumber.mainPageNumber\r\n    })\r\n\r\n    React.useEffect(() => {\r\n        document.title = `Error`;\r\n    })\r\n\r\n    useEffect(() => {\r\n        window.location.href =\"https://www.cadillacanz.com/error/\";\r\n    }, []);\r\n\r\n    return (\r\n        <div className=\"auth-container\">\r\n            <Spinner spinnerWidth={64} />\r\n        </div>\r\n        //<MainLayoutPage sceneId=\"page-error container-has-header\">\r\n        //    <React.Fragment>\r\n        //        <div className='global-options-container'>\r\n\r\n        //            <GlobalMenu activeBtn='test' />\r\n\r\n        //            <div className='error-page-container'>\r\n        //                <div className=\"title\">WE CAN'T SEEM TO FIND</div>\r\n        //                <div className=\"title\">WHAT YOU'RE LOOKING FOR</div>\r\n        //                <div className=\"error-desc\">Error Code: 404</div>\r\n        //            </div>\r\n        //        </div>\r\n        //        {/*<section className='section global' data-section-id='global'*/}\r\n        //        {/*    style={{*/}\r\n        //        {/*        // paddingBottom: '385px',*/}\r\n        //        {/*        display: mainPageNumber != 0 ? 'none' : \"\",*/}\r\n        //        {/*        height: mainPageNumber != 0 ? '0' : 'auto',*/}\r\n        //        {/*        opacity: `${scrollGlobalOpacity}`,*/}\r\n        //        {/*    }}>*/}\r\n        //        {/*    <div className='animate-item'>*/}\r\n        //        {/*        <GlobalPage isGlobalDialogOpen={false} />*/}\r\n        //        {/*    </div>*/}\r\n        //        {/*</section>*/}\r\n\r\n        //        <Footer />\r\n        //    </React.Fragment>\r\n        //</MainLayoutPage>\r\n\r\n    )\r\n}","import React, {\r\n    createRef,\r\n    useRef,\r\n    useLayoutEffect,\r\n    useState,\r\n    useContext,\r\n    createContext,\r\n    useEffect\r\n} from 'react';\r\nimport { useNavigate, useSearchParams } from 'react-router-dom';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { Password } from 'primereact/password';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\n\r\nimport { Helmet } from 'react-helmet-async';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport { Container, Row, Col, Carousel, Button } from 'react-bootstrap';\r\n\r\nimport {\r\n    getFrontendUrl,\r\n} from 'helpers/Uri';\r\nimport { ISessionState } from \"model/ISessionState\";\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\nimport { gotSessionAction } from \"stores/Session\";\r\n\r\nimport * as signInViewModel from 'model/ISignViewModel';\r\nimport * as userService from 'services/User';\r\n\r\nimport { AuthenticatedTemplate, UnauthenticatedTemplate, useMsal } from '@azure/msal-react';\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\n\r\nexport const SignInPage = () => {\r\n    const azureB2C = useAzureB2C();\r\n    //const gaEventTracker = useAnalyticsEventTracker('SignIn');\r\n\r\n    //const dispatch = useDispatch();\r\n    //const navigate = useNavigate();\r\n    //const [searchParams] = useSearchParams();\r\n    //const redirectPage = searchParams.get('redirectPage') || '';\r\n\r\n    //const { instance } = useMsal();  \r\n    //const activeAccount = instance.getActiveAccount();\r\n\r\n    //useEffect(() => {\r\n    //    console.log(\"sign-in\");\r\n    //    if (isNil(activeAccount)) {\r\n    //        console.log(activeAccount);\r\n    //        azureB2C.signIn();\r\n    //    }\r\n    //    else {\r\n    //        navigate(`${getFrontendUrl()}/auth`);\r\n    //    }\r\n    //}, [activeAccount]);\r\n\r\n    //useEffect(() => {\r\n    //    azureB2C.signIn();\r\n    //}, []);\r\n\r\n    setTimeout(() => {\r\n        azureB2C.signIn();\r\n    }, 1000);\r\n\r\n    return (\r\n        <></>\r\n    );\r\n};\r\n\r\n","import React from 'react';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport { Helmet } from 'react-helmet-async';\r\nimport { Link, useLocation, useNavigate } from 'react-router-dom';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport ScrollToTop from 'components/ScrollToTop';\r\nimport {\r\n    getFrontendUrl,\r\n} from 'helpers/Uri';\r\nimport { Button } from 'react-bootstrap';\r\n\r\nexport const ComingSoon = () => {\r\n\r\n    const navigate = useNavigate();\r\n\r\n    const handleBtnClick = () => {\r\n        navigate(`${getFrontendUrl()}`)\r\n    }\r\n\r\n    return (\r\n        <MainLayoutPage sceneId=\"container-has-header\">\r\n            {/* <div className=\"\"> */}\r\n                <div className='coming-soon-container'>\r\n                    <div className='coming-soon-panel page-container-content page-actural-content'>\r\n                        <div className='coming-soon-box '>\r\n                            <div className=\"coming-soon-top \">COMING SOON</div>\r\n                            <div className=\"coming-soon-title \">UNDER CONSTRUCTION</div>\r\n                            <div className=\"coming-soon-content\">\r\n                                Our website is under construction, but we are ready to go! We are preparing somthing amazing and exciting for you.\r\n                            </div>\r\n                            <Button className=\"coming-soon-btn\" onClick={() => handleBtnClick()}>Back to Home Page</Button>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            {/* </div> */}\r\n            <Footer />\r\n        </MainLayoutPage>\r\n    );\r\n};\r\n","import React from \"react\";\r\nimport ReactGA from \"react-ga4\";\r\n\r\nexport const useAnalyticsEventTracker = (category: string) => {\r\n    const eventTracker = (action = \"test action\") => {\r\n        ReactGA.event({ category, action });\r\n    }\r\n    return eventTracker;\r\n}","import React, {\r\n    createRef,\r\n    useRef,\r\n    useLayoutEffect,\r\n    useState,\r\n    useContext,\r\n    createContext,\r\n    useEffect\r\n} from 'react';\r\nimport { useParams, Link, useNavigate } from 'react-router-dom';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport { Helmet } from 'react-helmet-async';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport { Container, Row, Col, Carousel, Button } from 'react-bootstrap';\r\nimport { TabView, TabPanel } from 'primereact/tabview';\r\n\r\nimport {\r\n    IPageLanguageState,\r\n    getCMSAssets,\r\n    getFrontendUrl,\r\n} from 'helpers/Uri';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { MainMenu } from 'scene/Layout/MainMenu';\r\n\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\nimport { Footer } from 'scene/Layout/Footer';\r\n\r\n\r\nimport { sendForgotPasswordEmail } from 'services/User';\r\nimport { useAnalyticsEventTracker } from 'helpers/useAnalyticsEventTracker';\r\nimport Spinner from 'components/Spinner';\r\n\r\ninterface pageState {\r\n    languageState: IPageLanguageState,\r\n}\r\n\r\ninterface SignInState {\r\n    isSent: boolean | null,\r\n    email: string,\r\n    password: string,\r\n    invalidEmail: boolean | null,\r\n    invalidPassword: boolean | null,\r\n}\r\n\r\nexport const ForgotPasswordPage = () => {\r\n    const gaEventTracker = useAnalyticsEventTracker('Forgot Password');\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n\r\n    const [errorMessage, setErrorMessage] = useState(\"\");\r\n    const [loading, setLoading] = useState(false);\r\n\r\n\r\n    /*page state*/\r\n    const initPageState: SignInState = {\r\n        isSent: false,\r\n        email: \"\",\r\n        password: \"\",\r\n        invalidEmail: false,\r\n        invalidPassword: false,\r\n    }\r\n    const [pageState, setPageState] = useState<SignInState>(initPageState);\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    //Scroll to top instantly without any animation\r\n    if (isMobile) {\r\n    //     window.scrollTo({top: 0, behavior: 'instant'} as any);\r\n    // } else {\r\n        document.querySelector(\".container-has-header\")?.scrollTo({ top: 0, behavior: 'instant' } as any);\r\n    }\r\n\r\n    const handleGoBack = () => {\r\n        navigate(`${getFrontendUrl()}/sign-in`);\r\n    }\r\n\r\n    const handleSent = async () => {\r\n\r\n        const emailValidator = !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(pageState?.email);\r\n\r\n        if (isNil(pageState.email) || pageState.email == \"\" || emailValidator) {\r\n            setPageState({ ...pageState, invalidEmail: true });\r\n            return;\r\n        }\r\n\r\n        setErrorMessage(\"\");\r\n        navigate(`${getFrontendUrl()}/email-verification`);\r\n        // setLoading(true);\r\n        // const doResetPassword = await sendForgotPasswordEmail(pageState.email);\r\n        // setLoading(false);\r\n        // if (doResetPassword.status) {\r\n        //     setPageState({\r\n        //         ...pageState,\r\n        //         isSent: true,\r\n        //     });\r\n        // }\r\n        // else {\r\n        //     setErrorMessage(doResetPassword.message);\r\n        // }\r\n    }\r\n\r\n\r\n    return (\r\n        <>\r\n          \r\n                <div className=\"page-container-fullsize password-issue-container\" >\r\n                    <div className='user-left-panel'>\r\n                    <img alt=\"\" className='image' src={`${getCMSAssets()}/users/sign-in-up.png`} />\r\n                    </div>\r\n                    <div className='user-right-panel' >\r\n                        <div className='right-inner-container'>\r\n                            <div className='logo-title-container'>\r\n                            <img alt=\"\" className='logo-image' onClick={() => handleGoBack()} src={`${getCMSAssets()}/users/Cadillac-Logo.svg`} />\r\n                                <h5 className='sign-in-title'>Already have an account? <a className='sign-in-link' onClick={() => handleGoBack()}>Sign in</a></h5>\r\n                            </div>\r\n                            \r\n                            <div className='handle-password-container'>\r\n                                <div className='handle-password-title'>\r\n                                    Forgot your password?\r\n                                </div>\r\n                                <div className='handle-password-subtitle'>\r\n                                    Don't worry, we'll help your. Enter your email address below to confirm your account.\r\n                                </div>\r\n                                <div className='input-item'>\r\n                                    <span className=\"wrapper-box\">\r\n                                        <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                            className={classNames({ \"p-invalid\": pageState?.invalidEmail })}\r\n                                            placeholder=\" \"\r\n                                            value={pageState.email}\r\n                                            onChange={(e) => {\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    email: e.target.value,\r\n                                                    invalidEmail: isNil(e.target.value) || e.target.value == \"\"\r\n                                                })\r\n                                            }}\r\n                                        />\r\n                                        <label>Email</label>\r\n                                    </span>\r\n                                    {pageState?.invalidEmail && (\r\n                                        <small id=\"email-help\" className=\"p-error block\">Email is required.</small>\r\n                                    )}\r\n                                </div>\r\n\r\n                                <div className='handle-password-desc'>\r\n                                    To protect your account. We will send a verification code to your email address. Your code will expire after 30 minutes.\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='handle-password-btn-panel'>\r\n                                {!loading && (\r\n                                    <Button onClick={() => handleSent()}><span>SUBMIT</span></Button>\r\n                                )}\r\n                                {loading && (\r\n                                    <div className=\"spinner-wrapper\">\r\n                                        {/* <ProgressSpinner\r\n                                            style={{ width: '16px', height: '16px' }}\r\n                                            strokeWidth=\"5\"\r\n                                            animationDuration=\".8s\"\r\n                                        /> */}\r\n                                        <Spinner spinnerWidth={64} />\r\n                                    </div>\r\n                                )}\r\n\r\n\r\n                                <Button onClick={() => handleGoBack()}><span>CANCEL</span></Button>\r\n                            \r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n           \r\n        </>\r\n    );\r\n};\r\n\r\n","import React, {\r\n    createRef,\r\n    useRef,\r\n    useLayoutEffect,\r\n    useState,\r\n    useContext,\r\n    createContext,\r\n    useEffect\r\n} from 'react';\r\nimport { useParams, Link, useNavigate } from 'react-router-dom';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { Password } from 'primereact/password';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\n\r\nimport { Helmet } from 'react-helmet-async';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport { Container, Row, Col, Carousel, Button } from 'react-bootstrap';\r\nimport { TabView, TabPanel } from 'primereact/tabview';\r\n\r\nimport {\r\n    IPageLanguageState,\r\n    getCMSAssets,\r\n    getFrontendUrl,\r\n} from 'helpers/Uri';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { MainMenu } from 'scene/Layout/MainMenu';\r\n\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\nimport { Footer } from 'scene/Layout/Footer';\r\n\r\n\r\n\r\nimport { validateResetPasswordToken, updatePassword } from \"services/User\";\r\nimport { useAnalyticsEventTracker } from 'helpers/useAnalyticsEventTracker';\r\n\r\ninterface pageState {\r\n    languageState: IPageLanguageState,\r\n}\r\n\r\ninterface SignInState {\r\n    isSent: boolean | null,\r\n    password: string,\r\n    confirmPassword: string,\r\n    invalidPassword: boolean | null,\r\n    invalidConfirmPassword: boolean | null,\r\n    passwordNoMatched: boolean | null,\r\n}\r\n\r\ninterface PasswordRulesProps {\r\n    number: string,\r\n    upperLowerCase: string,\r\n    characters: string,\r\n}\r\n\r\nexport const ResetPasswordPage = () => {\r\n    const gaEventTracker = useAnalyticsEventTracker('Reset Password');\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n\r\n\r\n    const { token } = useParams();\r\n    const [invalidToken, setInvalidToken] = useState(false);\r\n    const [errorMessage, setErrorMessage] = useState(\"\");\r\n    const [email, setEmail] = useState(\"\");\r\n\r\n    const [pageProcess, setPageProcess] = useState(0);\r\n\r\n    const [secondsRemaining, setSecondsRemaining] = useState(3);\r\n\r\n    /*page state*/\r\n    const initPageState: SignInState = {\r\n        isSent: false,\r\n        password: \"\",\r\n        confirmPassword: \"\",\r\n        invalidPassword: false,\r\n        invalidConfirmPassword: false,\r\n        passwordNoMatched: false,\r\n    }\r\n    const [pageState, setPageState] = useState<SignInState>(initPageState);\r\n\r\n    const initPasswordState: PasswordRulesProps = {\r\n        number: 'default',\r\n        upperLowerCase: 'default',\r\n        characters: 'default',\r\n    }\r\n    const [passwordRules, setPasswordRules] = useState<PasswordRulesProps>(initPasswordState);\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    //Scroll to top instantly without any animation\r\n    if (isMobile) {\r\n    //     window.scrollTo({top: 0, behavior: 'instant'} as any);\r\n    // } else {\r\n        document.querySelector(\".container-has-header\")?.scrollTo({ top: 0, behavior: 'instant' } as any);\r\n    }\r\n\r\n    useEffect(() => {\r\n\r\n        const doValidateToken = async () => {\r\n            let request = await validateResetPasswordToken(token);\r\n\r\n            if (!request.status) {\r\n                setInvalidToken(true);\r\n                setErrorMessage(request.message);\r\n            }\r\n            else {\r\n                setEmail(request.data);\r\n            }\r\n        }\r\n        if (!isNil(token) && token != \"\") {\r\n            doValidateToken();\r\n        }\r\n\r\n    }, [token]);\r\n\r\n    useEffect(() => {\r\n        // Check if pageProcess is 1\r\n        if (pageProcess === 1) {\r\n\r\n            const intervalId = setInterval(() => {\r\n                setSecondsRemaining((prevSeconds) => prevSeconds - 1);\r\n              }, 1000);\r\n\r\n            // Set a timeout for 3 seconds\r\n            const timeoutId = setTimeout(() => {\r\n                // Redirect to the sign-in page\r\n                clearInterval(intervalId);\r\n                navigate('/cadillac/sign-in')\r\n            }, 3000);\r\n    \r\n            // Clean up the timeout on component unmount\r\n            return () => {\r\n                clearInterval(intervalId);\r\n                clearTimeout(timeoutId);\r\n            };\r\n        }\r\n    }, [pageProcess]);\r\n\r\n    const [passwordVisible, setPasswordVisible] = useState({\r\n        isShowPassword: false,\r\n        isShowResetPassword: false,\r\n    })\r\n\r\n    const handleGoBack = () => {\r\n        navigate(`${getFrontendUrl()}/sign-in`);\r\n    }\r\n\r\n    const handleShowPassword = () => {\r\n        setPasswordVisible({\r\n            ...passwordVisible,\r\n            isShowPassword: !passwordVisible.isShowPassword,\r\n        })\r\n    }\r\n\r\n    const handleShowResetPassword = () => {\r\n        setPasswordVisible({\r\n            ...passwordVisible,\r\n            isShowResetPassword: !passwordVisible.isShowResetPassword,\r\n        })\r\n    }\r\n\r\n    const passwordCheck = (passwordEnter: any) => {\r\n        let password = passwordEnter.trim();\r\n        if (isNil(password) \r\n            || password == \"\" \r\n            // Minimum of 1 number\r\n            || !/\\d/.test(password) \r\n            // Minimum of 1 uppercase letter and one lowercase letter\r\n            || !/[A-Z]/.test(password)\r\n            || !/[a-z]/.test(password)\r\n            // Minimum of 8 characters\r\n            || password.length < 8\r\n        ) {\r\n            return true\r\n        } else {\r\n            return false\r\n        }\r\n    }\r\n\r\n    const handlePasswordInsert = (e: any) => { \r\n        setPageState({\r\n            ...pageState,\r\n            password: e.target.value,\r\n            invalidPassword: isNil(e.target.value) || e.target.value == \"\",\r\n            passwordNoMatched: false,\r\n        })\r\n        if (e.target.value.length == 0) {\r\n            setPasswordRules({\r\n                ...passwordRules,\r\n                number: \"default\",\r\n                upperLowerCase: \"default\",\r\n                characters: \"default\"\r\n            })\r\n            return\r\n        } \r\n\r\n        // Check for at least one digit\r\n        if (/\\d/.test(e.target.value)) {\r\n            passwordRules.number = \"success\";\r\n        } else {\r\n            passwordRules.number = \"invalid\";\r\n        }\r\n\r\n        // Check for at least one uppercase and one lowercase letter\r\n        if (/[A-Z]/.test(e.target.value) && /[a-z]/.test(e.target.value)) {\r\n            passwordRules.upperLowerCase = \"success\";\r\n        } else {\r\n            passwordRules.upperLowerCase = \"invalid\";\r\n        }\r\n\r\n        // Check for at least 8 characters\r\n        if (e.target.value.length >= 8) {\r\n            passwordRules.characters = \"success\";\r\n        } else {\r\n            passwordRules.characters = \"invalid\";\r\n        }\r\n\r\n        return passwordRules;\r\n    }\r\n\r\n    const handleUpdate = async () => {\r\n        let invalidNewPass = false;\r\n        let invalidConfirmPass = false;\r\n        let passwordNoMatched = false;\r\n\r\n        if (passwordCheck(pageState.password)) {\r\n            invalidNewPass = true;\r\n        }\r\n        if (passwordCheck(pageState.confirmPassword)) {\r\n            invalidConfirmPass = true;\r\n        }\r\n\r\n        if (pageState.password != \"\" \r\n            // && pageState.password != pageState.confirmPassword\r\n        ) {\r\n            passwordNoMatched = true;\r\n        }\r\n        // console.log(passwordNoMatched);\r\n        let invalid = invalidNewPass \r\n        // || invalidConfirmPass || passwordNoMatched;\r\n        if (invalid) {\r\n            setPageState({\r\n                ...pageState,\r\n                invalidPassword: invalidNewPass,\r\n                invalidConfirmPassword: invalidConfirmPass,\r\n                passwordNoMatched: passwordNoMatched,\r\n            })\r\n        }\r\n        else {\r\n            setPageProcess(1);\r\n        //     let request = await updatePassword(email, pageState.tempPassword, pageState.password);\r\n        //     if (request.status) {\r\n        //         setPageState({\r\n        //             ...pageState,\r\n        //             isSent: true,\r\n        //         });\r\n        //     }\r\n        //     else {\r\n        //         setErrorMessage(request.message);\r\n        //     }\r\n        }\r\n\r\n    }\r\n\r\n    return (\r\n        <>\r\n                <div className=\"page-container-fullsize password-issue-container\" >\r\n                    <div className='user-left-panel'>\r\n                    <img alt=\"\" className='image' src={`${getCMSAssets()}/users/sign-in-up.png`} />\r\n                    </div>\r\n                    {\r\n                        pageProcess == 0\r\n                        ?\r\n                        <div className='user-right-panel' >\r\n                            <div className='right-inner-container'>\r\n                                <div className='logo-title-container'>\r\n                                    <img alt=\"\" className='logo-image' onClick={() => handleGoBack()} src={`${getCMSAssets()}/users/Cadillac-Logo.svg`} />\r\n                                    <h5 className='sign-in-title'>Already have an account? <a className='sign-in-link' onClick={() => handleGoBack()}>Sign in</a></h5>\r\n                                </div>\r\n\r\n                                <div className='handle-password-container'>\r\n                                    <div className='handle-password-title new-password'>\r\n                                        PLEASE CREATE A NEW PASSWORD\r\n                                    </div>\r\n                                    \r\n                                    {\r\n                                        invalidToken\r\n                                            ?\r\n                                            <>\r\n                                                <div className='error-message'>Token is not correct.</div>\r\n                                            </>\r\n                                            :\r\n                                            pageState?.isSent == false\r\n                                                ?\r\n                                                <>\r\n                                                    <div className='input-item'>\r\n                                                        <span className=\"p-input-icon-right wrapper-box\">\r\n                                                            <InputText id=\"password\" aria-describedby=\"password-help\"\r\n                                                                className={classNames({ \"p-invalid\": pageState?.invalidPassword })}\r\n                                                                placeholder=\" \"\r\n                                                                type={passwordVisible.isShowPassword ? 'text' : 'password' }\r\n                                                                value={pageState.password}\r\n                                                                onChange={(e) => handlePasswordInsert(e)}\r\n                                                                autoComplete=\"off\"\r\n                                                            />\r\n                                                            <label>New Password</label>\r\n                                                            <i className=\"password-visible-control\" onClick={() => handleShowPassword()}>{passwordVisible.isShowPassword ? 'Hide' : 'Show'}</i>\r\n                                                        </span>\r\n                                                        {pageState?.invalidPassword && (\r\n                                                            <small id=\"password-help\" className=\"p-error block\">Invalid Password</small>\r\n                                                        )}\r\n                                                    </div>\r\n\r\n                                                    {/* <div className='input-item'>\r\n                                                        <span className=\"p-input-icon-right wrapper-box\">\r\n                                                            <InputText id=\"password\" aria-describedby=\"confirm-password-help\"\r\n                                                                className={classNames({ \"p-invalid\": pageState?.invalidConfirmPassword })}\r\n                                                                placeholder=\" \"\r\n                                                                type={passwordVisible.isShowResetPassword ? 'text' : 'password'}\r\n                                                                value={pageState.confirmPassword}\r\n                                                                onChange={(e) => {\r\n                                                                    setPageState({\r\n                                                                        ...pageState,\r\n                                                                        confirmPassword: e.target.value,\r\n                                                                        invalidConfirmPassword: isNil(e.target.value) || e.target.value == \"\",\r\n                                                                        passwordNoMatched: false,\r\n                                                                    })\r\n                                                                }}\r\n                                                                autoComplete=\"off\"\r\n                                                            />\r\n                                                            <label>Confirm Password</label>\r\n                                                            <i className=\"password-visible-control\" onClick={() => handleShowResetPassword()}>{passwordVisible.isShowResetPassword ? 'Hide' : 'Show'}</i>\r\n                                                        </span>\r\n                                                        {pageState?.invalidConfirmPassword && (\r\n                                                            <small id=\"confirm-password-help\" className=\"p-error block\">Invalid Confirm Password</small>\r\n                                                        )}\r\n                                                        {pageState?.passwordNoMatched && (\r\n                                                            <small id=\"password-unmatch-help\" className=\"p-error block\">{t(`${languageState.LanguageScreenName}:password_not_match`)}</small>\r\n                                                        )}\r\n                                                    </div> */}\r\n                                                    {/* {!isNil(errorMessage) && errorMessage != \"\" && (\r\n                                                        <div className='error-message'>{t(`${languageState.LanguageScreenName}:${errorMessage}`)}</div>\r\n                                                    )} */}\r\n                                                    <div className='insert-rules'>\r\n                                                        <div className='insert-item'>\r\n                                                            {\r\n                                                                passwordRules.number == 'default'\r\n                                                                ?\r\n                                                                    <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/circle.png`} />\r\n                                                                :\r\n                                                                passwordRules.number == 'invalid'\r\n                                                                ?\r\n                                                                        <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/failed-cross.png`} />\r\n                                                                :\r\n                                                                passwordRules.number == 'success'\r\n                                                                ?\r\n                                                                            <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/success-tick.png`} />\r\n                                                                :\r\n                                                                <></>\r\n                                                            }\r\n                                                            <span>Minimum of 1 number</span>\r\n                                                        </div>\r\n                                                        <div className='insert-item'>\r\n                                                            {\r\n                                                                passwordRules.upperLowerCase == 'default'\r\n                                                                ?\r\n                                                                    <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/circle.png`} />\r\n                                                                :\r\n                                                                passwordRules.upperLowerCase == 'invalid'\r\n                                                                ?\r\n                                                                        <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/failed-cross.png`} />\r\n                                                                :\r\n                                                                passwordRules.upperLowerCase == 'success'\r\n                                                                ?\r\n                                                                            <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/success-tick.png`} />\r\n                                                                :\r\n                                                                <></>\r\n                                                            }\r\n                                                            <span>Minimum of 1 uppercase letter and a lower case letter</span>\r\n                                                        </div>\r\n                                                        <div className='insert-item'>\r\n                                                            {\r\n                                                                passwordRules.characters == 'default'\r\n                                                                ?\r\n                                                                    <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/circle.png`} />\r\n                                                                :\r\n                                                                passwordRules.characters == 'invalid'\r\n                                                                ?\r\n                                                                        <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/failed-cross.png`} />\r\n                                                                :\r\n                                                                passwordRules.characters == 'success'\r\n                                                                ?\r\n                                                                            <img alt=\"\" className='logo-image' src={`${getCMSAssets()}/users/success-tick.png`} />\r\n                                                                :\r\n                                                                <></>\r\n                                                            }\r\n                                                            <span>Minimum of 8 characters</span>\r\n                                                        </div>\r\n                                                    </div>\r\n                                                </>\r\n                                                :\r\n                                                <>\r\n                                                    <h1 className='reset_title'></h1>\r\n                                                    <p className='back-to-signin' onClick={handleGoBack}>\r\n                                                    </p>\r\n                                                </>\r\n                                    }\r\n                                </div>\r\n\r\n                                <div className='handle-password-btn-panel reset'>\r\n                                    <Button onClick={handleUpdate}><span>RESET</span></Button>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        :\r\n                        pageProcess == 1\r\n                        ?\r\n                        <div className='user-right-panel'>\r\n                             <div className='right-inner-container'>\r\n                                <div className='logo-title-container'>\r\n                                        <img alt=\"\" className='logo-image' onClick={() => handleGoBack()} src={`${getCMSAssets()}/users/Cadillac-Logo.svg`} />\r\n                                    <h5 className='sign-in-title'>Already have an account? <a className='sign-in-link' onClick={() => handleGoBack()}>Sign in</a></h5>\r\n                                </div>\r\n\r\n                                <div className='handle-password-container'>\r\n                                    <div className='handle-password-title new-password'>\r\n                                        PASSWORD RESET COMPLETE\r\n                                    </div>\r\n                                    <div className='handle-password-desc'>\r\n                                        Your password has been reset, please login with you new password.\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <div className='handle-password-btn-panel reset-complete'>\r\n                                    <Button onClick={handleGoBack}><span>SIGN IN</span></Button>\r\n                                </div>\r\n\r\n                                <div className='redirect-panel'>\r\n                                    your page will redirect to Signin page within {secondsRemaining}s\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                    } \r\n                </div>\r\n            \r\n        </>\r\n    );\r\n};\r\n\r\n\r\n","import React, {\r\n    createRef,\r\n    useRef,\r\n    useLayoutEffect,\r\n    useState,\r\n    useContext,\r\n    createContext,\r\n    useEffect\r\n} from 'react';\r\nimport { useParams, Link, useNavigate } from 'react-router-dom';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport { Password } from 'primereact/password';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\n\r\nimport { Helmet } from 'react-helmet-async';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport { Container, Row, Col, Carousel, Button } from 'react-bootstrap';\r\n\r\nimport {\r\n    getFrontendUrl,\r\n    getCMSAssets,\r\n} from 'helpers/Uri';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { MainMenu } from 'scene/Layout/MainMenu';\r\n\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport { MaintenanceMessage } from 'scene/Layout/MaintenanceMessage';\r\n/*import { useForm } from 'react-hook-form';*/\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\n\r\nimport { validateEmail } from 'services/User';\r\nimport { useAnalyticsEventTracker } from 'helpers/useAnalyticsEventTracker';\r\n\r\ninterface SignInState {\r\n    verifyCode: string,\r\n    invalidCode: boolean | null,\r\n}\r\n\r\nexport const EmailVerficationPage = () => {\r\n    const gaEventTracker = useAnalyticsEventTracker('Email Verfication');\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n\r\n    const { token } = useParams();\r\n\r\n    const [errorMessage, setErrorMessage] = useState(\"\");\r\n\r\n    const initPageState: SignInState = {\r\n        verifyCode: \"\",\r\n        invalidCode: false,\r\n    }\r\n\r\n    const [pageState, setPageState] = useState({\r\n        verifyCode: \"\",\r\n        invalidCode: false,\r\n    })\r\n\r\n\r\n    useEffect(() => {\r\n\r\n        const doValidateEmail = async () => {\r\n            let request = await validateEmail(token);\r\n\r\n            if (request.status) {\r\n                navigate(`${getFrontendUrl()}/sign-in`);\r\n            }\r\n            else {\r\n                setErrorMessage(request.message);\r\n            }\r\n        }\r\n        if (!isNil(token) && token != \"\") {\r\n            doValidateEmail();\r\n        }\r\n    }, [token]);\r\n\r\n\r\n\r\n    const handleGoBack = () => {\r\n        navigate(`${getFrontendUrl()}/sign-in`);\r\n    }\r\n\r\n    const handleGoBackForgot = () => {\r\n        navigate(`${getFrontendUrl()}/forgot-password`);\r\n    }\r\n\r\n    const handleSubmit = () => {\r\n        navigate(`${getFrontendUrl()}/reset-password`);\r\n    }\r\n\r\n    return (\r\n        <>\r\n\r\n            <div className=\"page-container-fullsize password-issue-container\">\r\n                <div className='user-left-panel'>\r\n                    <img alt=\"\" className='image' src={`${getCMSAssets()}/users/sign-in-up.png`} />\r\n                </div>\r\n                <div className='user-right-panel' >\r\n                    <div className='right-inner-container'>\r\n                        <div className='logo-title-container'>\r\n                            <img alt=\"\" className='logo-image' onClick={() => handleGoBack()} src={`${getCMSAssets()}/users/Cadillac-Logo.svg`} />\r\n                            <h5 className='sign-in-title'>Already have an account? <a className='sign-in-link' onClick={() => handleGoBack()}>Sign in</a></h5>\r\n                        </div>\r\n\r\n                        <div className='handle-password-container'>\r\n                            <div className='handle-password-title'>\r\n                                WE'VE EMAILED YOU A CODE\r\n                                </div>\r\n                            <div className='handle-password-subtitle'>\r\n                                We've sent an email with a verification code to . To keep your account safe, this verification code expires in 30 minutes.\r\n                                </div>\r\n                            <div className='input-item'>\r\n                                <span className=\"wrapper-box\">\r\n                                    <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                        className={classNames({ \"p-invalid\": pageState?.invalidCode })}\r\n                                        placeholder=\" \"\r\n                                        value={pageState.verifyCode}\r\n                                        onChange={(e) => {\r\n                                            setPageState({\r\n                                                ...pageState,\r\n                                                verifyCode: e.target.value,\r\n                                                invalidCode: isNil(e.target.value) || e.target.value == \"\"\r\n                                            })\r\n                                        }}\r\n                                    />\r\n                                    <label>Verification Code</label>\r\n                                </span>\r\n                                {/*{pageState?.invalidCode && (*/}\r\n                                {/*    <small id=\"email-help\" className=\"p-error block\">{t(`${languageState.LanguageScreenName}:required_email`)}</small>*/}\r\n                                {/*)}*/}\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='handle-password-btn-panel'>\r\n\r\n                            <Button onClick={() => handleSubmit()}><span>SUBMIT</span></Button>\r\n\r\n                            <Button onClick={() => handleGoBackForgot()}><span>RESEND EMAIL</span></Button>\r\n\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n        </>\r\n    );\r\n}","import React, { useRef, useState, useEffect, Fragment } from 'react';\r\nimport { Container, Row, Col, Carousel, Button } from 'react-bootstrap';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { useParams, Link, useNavigate, useLocation } from 'react-router-dom';\r\nimport { filter, includes, find, isNil } from 'lodash';\r\n\r\nimport { AutoComplete } from 'primereact/autocomplete';\r\n//import { getAddress } from 'services/GoogleApi';\r\n\r\nimport * as locationService from 'services/Locations';\r\nexport const GoogleAutoCompletePage = () => {\r\n    //const [value, setValue] = useState('');\r\n    //const [items, setItems] = useState([]);\r\n    const [address, setAddress] = useState(\"\");\r\n    const [addressList, setAddressList] = useState<any>(null);\r\n    //const [addressList, setAddressList] = useState<any>([\r\n    //    {\r\n    //        \"fullAddress\": \"4 Rochester Street, Homebush NSW 2140\",\r\n    //        \"name\": \"4 Rochester Street, Homebush NSW 2140\",\r\n    //        \"postcode\": \"2140\",\r\n    //        \"suburb\": \"Homebush\"\r\n    //    },\r\n    //    {\r\n    //        \"fullAddress\": \"4 Roche Street, Hawthorn VIC 3122\",\r\n    //        \"name\": \"4 Roche Street, Hawthorn VIC 3122\",\r\n    //        \"postcode\": \"3122\",\r\n    //        \"suburb\": \"Hawthorn\"\r\n    //    },\r\n    //    {\r\n    //        \"fullAddress\": \"4 Rochester Street, Botany NSW 2019\",\r\n    //        \"name\": \"4 Rochester Street, Botany NSW 2019\",\r\n    //        \"postcode\": \"2019\",\r\n    //        \"suburb\": \"Botany\"\r\n    //    },\r\n    //    {\r\n    //        \"fullAddress\": \"4 Rochester Street, Gregory Hills NSW 2557\",\r\n    //        \"name\": \"4 Rochester Street, Gregory Hills NSW 2557\",\r\n    //        \"postcode\": \"2557\",\r\n    //        \"suburb\": \"Gregory Hills\"\r\n    //    },\r\n    //    {\r\n    //        \"fullAddress\": \"4 Roches Terrace, Williamstown VIC 3016\",\r\n    //        \"name\": \"4 Roches Terrace, Williamstown VIC 3016\",\r\n    //        \"postcode\": \"3016\",\r\n    //        \"suburb\": \"Williamstown\"\r\n    //    }\r\n    //]);\r\n\r\n    const doGetAddress = async (event: any) => {\r\n       // return addressList;\r\n        //return addressList[0];\r\n        let returnAddressList:any=[]\r\n        let keywords = event.query;\r\n        if (keywords.length > 4) {\r\n            let result = await locationService.getAddress(\"au\", keywords);\r\n            if (result.status) {\r\n                setAddressList(result.data);\r\n                return;\r\n            }\r\n        }\r\n        setAddressList(returnAddressList);\r\n    }\r\n\r\n    const addressItemTemplate = (item: any) => {\r\n        if (!isNil(item)) {\r\n            return (\r\n                <div>{item.fullAddress}</div>\r\n            )\r\n        }\r\n        return (<></>);\r\n\r\n    }\r\n\r\n    const selectedItemTemplate = (item: any) => {\r\n        if (!isNil(item)) {\r\n            return (\r\n                <div>{item.fullAddress}</div>\r\n            )\r\n        }\r\n        return (<></>);\r\n    }\r\n\r\n    return (\r\n        <div className=\"address-wrapper\">Address: \r\n            <AutoComplete\r\n                field=\"fullAddress\"\r\n                className=\"address-input\"\r\n                placeholder=\"Please enter at least 4 characters\"\r\n                value={address}\r\n                suggestions={addressList}\r\n                completeMethod={doGetAddress}\r\n                onChange={(e) => setAddress(e.value)}\r\n            />\r\n            {/*<AutoComplete*/}\r\n            {/*    className=\"address-input\"*/}\r\n            {/*    placeholder=\"Please enter at least 4 characters\"*/}\r\n            {/*    value={value}*/}\r\n            {/*    suggestions={items}*/}\r\n            {/*    completeMethod={search}*/}\r\n            {/*    onChange={(e) => setValue(e.value)} />*/}\r\n        </div>\r\n    );\r\n\r\n}","import React, {\r\n    createRef,\r\n    useRef,\r\n    useLayoutEffect,\r\n    useState,\r\n    useContext,\r\n    createContext,\r\n    useEffect\r\n} from 'react';\r\nimport { useParams, useNavigate, Link } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { AuthenticatedTemplate } from \"@azure/msal-react\";\r\nimport { useMsal } from \"@azure/msal-react\";\r\nimport {\r\n    IPageLanguageState,\r\n    IImagesState,\r\n    getImageLinkByID2,\r\n    getCMSAssets,\r\n    getFrontendUrl\r\n} from 'helpers/Uri';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport { isNil } from 'lodash';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { ISessionState } from \"model/ISessionState\";\r\nimport * as signInViewModel from 'model/ISignViewModel';\r\nimport * as userService from 'services/User';\r\nimport { gotSessionAction } from \"stores/Session\";\r\nimport { loginRequest } from 'helpers/authConfig';\r\nimport * as rdEnum from \"helpers/enum\";\r\nimport * as orderService from 'services/Order';\r\nimport Spinner from 'components/Spinner';\r\n\r\nexport const AuthPage = () => {\r\n    const { instance } = useMsal();\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n    const activeAccount = instance.getActiveAccount();\r\n\r\n\r\n    const checkoutCustomerFromStore = useSelector((state: IAppState) => {\r\n        return state.checkoutCustomer;\r\n    });\r\n\r\n    const doSetupSession = async () => {\r\n\r\n        let email: string = activeAccount?.idTokenClaims?.email as string;\r\n        if (email == \"\") return;\r\n\r\n        //let yanaCustomerID = \"649ed38a-9995-409a-8222-c791767b49d5\";\r\n        //let yanaCustomerNo = \"CST20240812033513\";\r\n        let user: ISessionState = {\r\n            Email: email || \"\",\r\n            YanaCustomerID: \"\",\r\n            YanaCustomerNo: \"\",\r\n            NZYanaCustomerID: \"\",\r\n            NZYanaCustomerNo: \"\",\r\n        };\r\n\r\n        let response = await userService.setSession(email);\r\n        if (response.status) {\r\n            //for testing\r\n            user = {\r\n                ...user,\r\n                YanaCustomerID: response.data.yanaCustomerID, //, \"649ed38a-9995-409a-8222-c791767b49d5\";\r\n                YanaCustomerNo: response.data.yanaCustomerNo,   //\"CST20240812033513\";\r\n                NZYanaCustomerID: response.data.nzYanaCustomerID,\r\n                NZYanaCustomerNo: response.data.nzYanaCustomerNo,\r\n            }\r\n            dispatch(gotSessionAction(user));\r\n\r\n            if (!isNil(checkoutCustomerFromStore)) {\r\n                //go to customer checkout\r\n                navigate(`${getFrontendUrl()}/?redirectPage=${rdEnum.enumRedirectPage.CheckoutPaymentPage}`);\r\n            }\r\n            else {\r\n                let orderResponse = await orderService.getOrderByYanaCustomerID(\r\n                    user.YanaCustomerID, user.YanaCustomerNo,\r\n                    user.NZYanaCustomerID, user.NZYanaCustomerNo\r\n                );\r\n\r\n                if (orderResponse.status) {\r\n                    if (orderResponse.data.length == 1) {\r\n                        let url = `${getFrontendUrl()}/my-orders/${btoa(orderResponse.data[0].yanaOrderIDs.yanaOrderID)}/${btoa(orderResponse.data[0].yanaOrderIDs.yanaOrderNo)}`;\r\n                        url += `/${btoa(orderResponse.data[0].yanaOrderIDs.yanaCustomerID)}/${btoa(orderResponse.data[0].yanaOrderIDs.yanaCustomerNo)}`;\r\n                        url += `/${orderResponse.data[0].orderVehicle.country}`;\r\n                        navigate(url);\r\n                    }\r\n                    else {\r\n                        navigate(`${getFrontendUrl()}/my-orders`);\r\n                    }\r\n                }\r\n                else {\r\n                    navigate(`${getFrontendUrl()}/my-orders`);\r\n                }\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (!isNil(activeAccount)) {\r\n            doSetupSession()\r\n        }\r\n    }, [activeAccount?.idTokenClaims?.email]);\r\n\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: {},\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n    }, []);\r\n\r\n    return (\r\n        <div className=\"auth-container\">\r\n            {/* <ProgressSpinner\r\n                style={{ width: '64px', height: '64px' }}\r\n                strokeWidth=\"5\"\r\n                animationDuration=\".8s\"\r\n            /> */}\r\n            <Spinner spinnerWidth={64} />\r\n        </div>\r\n        //<div className='pre-loader'>\r\n        //    <img className=\"img\" alt=\"Info icon\" src={`${getCMSAssets()}/home/brand-loader.gif`} />\r\n        //</div>\r\n    );\r\n}","import { useEffect } from 'react';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nexport default function ScrollToTop() {\r\n  const { pathname } = useLocation();\r\n\r\n  useEffect(() => {\r\n    window.scrollTo(0, 0);\r\n  }, [pathname]);\r\n\r\n  return null;\r\n}\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport { useLocation, useNavigate, useParams } from 'react-router-dom';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport {\r\n    getCMSAssets,\r\n    getFrontendUrl,\r\n    getFrontendUrlWithSlash\r\n} from 'helpers/Uri';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { Accordion, Button, Col, Row } from 'react-bootstrap';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { MainMenu } from 'scene/Layout/MainMenu';\r\nimport { InventoryMenu } from 'scene/Layout/InventoryMenu';\r\nimport { Tooltip } from 'primereact/tooltip';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport CarCarousel from 'components/CarCarousel';\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { classNames } from 'primereact/utils';\r\nimport { includes, isNil } from 'lodash';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { ICodeName } from 'model/ICommon';\r\nimport * as availableInventoryModel from 'model/IAvailableInventory';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as interestModel from 'model/IInterest';\r\nimport * as variantModel from 'model/IVehicle';\r\nimport * as selectedConfigModel from 'model/IUserSelectedConfig';\r\nimport * as defaultConfigModel from 'model/IDefaultConfig';\r\nimport * as vehicleSerivce from \"services/Vehicle\";\r\nimport * as interestService from 'services/Interest';\r\nimport * as availableInventoryHelper from \"businessHelpers/AvailableInventoryHelper\";\r\n\r\n\r\nimport * as selectedDeliveryStore from \"stores/UserSelectedDelivery\";\r\nimport * as paymentOptionsStore from \"stores/PaymentOptions\";\r\nimport * as customerTypeStore from \"stores/CustomerType\";\r\nimport * as defaultConfigStore from 'stores/DefaultConfig';\r\nimport * as linkSourceStore from \"stores/LinkSource\";\r\n\r\nimport { setScrollPosition } from 'stores/ScrollPosition';\r\nimport { setMainPageNumber } from 'stores/MainPageNumber';\r\nimport { useScroll } from './Main/ScrollToSection';\r\nimport { hideGlobalPage } from 'stores/MainRightPage';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\nimport { setCountryStateAction } from 'stores/Session';\r\nimport { useCountryState } from 'helpers/useCountryState';\r\nimport SaveDialog from './Main/checkout/SaveDialog';\r\nimport ComparisonDialog from './Main/variant/ComparisonDialog';\r\n\r\nimport { BsXCircle } from \"react-icons/bs\";\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { setGlobalDropdown } from 'stores/GlobalDropdown';\r\n\r\nexport const InventoryPage = () => {\r\n\r\n    const navigate = useNavigate();\r\n\r\n    //const { variant, exterior, interior, outOfStockBoxLocation } = useParams();\r\n    const location = useLocation();\r\n    const searchParams = new URLSearchParams(location.search);\r\n    const defaultSelectedVariant = searchParams.get('variant');     //name\r\n    const defaultSelectedExterior = searchParams.get('exterior');   //name\r\n    const defaultSelectedInterior = searchParams.get('interior');   //name\r\n    const isShopFront = searchParams.get('shopfront');              //if is from shopfront\r\n    const outOfStockBoxLocation = searchParams.get('outOfStockBoxLocation');\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n    const selectedCustomerType = useSelector((state: IAppState) => {\r\n        return state.customerType;\r\n    });\r\n\r\n    const [drawerShow, seDdrawerShow] = useState(true);\r\n\r\n\r\n    const [selectedVariants, setSelectedVariants] = useState<availableInventoryModel.IAISelectedVariant[]>([]);\r\n    const [selectedExteriors, setSelectedExteriors] = useState<availableInventoryModel.IAISelectedExterior[]>([]);\r\n    const [selectedInteriors, setSelectedInteriors] = useState<availableInventoryModel.IAISelectedInterior[]>([]);\r\n\r\n    const [availableInventoryList, setAvailableInventoryList] = useState<availableInventoryModel.IAvailableInventory[]>([]);\r\n    const [availableRequest, setAvailabeRequest] = useState<availableInventoryModel.IAvailableInventoryRequest>(availableInventoryHelper.getAvailableRequest());\r\n\r\n\r\n\r\n    const [sort, setSort] = useState<ICodeName>();\r\n\r\n    const [filterQty, setFilterQty] = useState(0);\r\n\r\n    const [variants, setVariants] = useState<vehicleModel.IVariant[]>([]);\r\n    const [exteriors, setExteriors] = useState<vehicleModel.IExterior[]>([]);\r\n    const [interiors, setInteriors] = useState<vehicleModel.IInterior[]>([]);\r\n    // const [exteriors, setExteriors] = useState<vehicleModel.IExterior[]>([]);\r\n\r\n    const [stock, setStock] = useState<availableInventoryModel.IAvailableInventoryStock[]>([]);\r\n\r\n\r\n    const [searchResultLoadingStatus, setSearchResultLoadingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n\r\n    const [notifyEmail, setNotifyEmail] = useState(\"\");\r\n    const [invalidNotifyEmail, setInvalidNotifyEmail] = useState(false);\r\n    const [notifyProcessStatus, setNotifyProcessStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n    const [notifyMeMessage, setNotifyMeMessage] = useState(\"\");\r\n    const [notifyMeError, setNotifyMeError] = useState(false);\r\n\r\n    const [isButtonClicked, setIsButtonClicked] = useState(false);\r\n\r\n    const abortControllerInitialValue: any = new (\r\n        window as any\r\n    ).AbortController();\r\n    const [inventoryAbortController, setInventoryAbortController] = useState(\r\n        abortControllerInitialValue,\r\n    );\r\n\r\n    var currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n    //const handleBtnClick = () => {\r\n    //    navigate(`/${getFrontendVirtualDir()}`)\r\n    //}\r\n\r\n    const handleDrawerOpen = () => {\r\n        seDdrawerShow(true);\r\n    }\r\n\r\n    const handleDrawerClose = () => {\r\n        seDdrawerShow(false);\r\n    }\r\n\r\n    const handleVariant = (variantID: string, variantName: string) => {\r\n        let updateSelectedVariants: availableInventoryModel.IAISelectedVariant[] = [];\r\n        const index = selectedVariants.findIndex((value: availableInventoryModel.IAISelectedVariant) => value.SelectVariantID === variantID);\r\n        if (index === -1) {\r\n            let newItem: availableInventoryModel.IAISelectedVariant = {\r\n                SelectVariantID: variantID || \"\",\r\n                SelectVariantName: variantName || \"\"\r\n            };\r\n            updateSelectedVariants = [...selectedVariants, newItem];\r\n        }\r\n        else {\r\n            updateSelectedVariants = selectedVariants.filter((value: availableInventoryModel.IAISelectedVariant) => value.SelectVariantID != variantID);\r\n        }\r\n        setSelectedVariants(updateSelectedVariants);\r\n\r\n\r\n        //exteriors\r\n        let exteriorList: vehicleModel.IExterior[] = getExteriorList(stock, updateSelectedVariants);\r\n        setExteriors(exteriorList);\r\n        setSelectedExteriors([]);\r\n\r\n        //interiors\r\n        let interiorList: vehicleModel.IInterior[] = getInteriorList(stock, updateSelectedVariants, []);\r\n        setInteriors(interiorList);\r\n        setSelectedInteriors([]);\r\n\r\n\r\n\r\n    }\r\n\r\n\r\n    const handleExteriorColor = (exteriorName: string) => {\r\n\r\n        let updateSelectedExteriors: availableInventoryModel.IAISelectedExterior[] = [];\r\n        const index = selectedExteriors.findIndex((value: availableInventoryModel.IAISelectedExterior) => value.SelectExteriorName === exteriorName);\r\n        if (index === -1) {\r\n            let newItem: availableInventoryModel.IAISelectedExterior = {\r\n                SelectExteriorID: \"\",\r\n                SelectExteriorName: exteriorName\r\n            };\r\n            updateSelectedExteriors = [...selectedExteriors, newItem];\r\n        }\r\n        else {\r\n            updateSelectedExteriors = selectedExteriors.filter((value: availableInventoryModel.IAISelectedExterior) => value.SelectExteriorName != exteriorName);\r\n        }\r\n        setSelectedExteriors(updateSelectedExteriors);\r\n\r\n\r\n        let interiorList: vehicleModel.IInterior[] = getInteriorList(stock, selectedVariants, updateSelectedExteriors);\r\n        setInteriors(interiorList);\r\n        setSelectedInteriors([]);\r\n    }\r\n\r\n    const handleInteriorColor = (interiorName: any) => {\r\n\r\n        let updateSelectedInteriors: availableInventoryModel.IAISelectedInterior[] = [];\r\n        const index = selectedInteriors.findIndex((value: availableInventoryModel.IAISelectedInterior) => value.SelectInteriorName === interiorName);\r\n        if (index === -1) {\r\n            let newItem: availableInventoryModel.IAISelectedInterior = {\r\n                SelectInteriorID: \"\",\r\n                SelectInteriorName: interiorName\r\n            };\r\n            updateSelectedInteriors = [...selectedInteriors, newItem];\r\n        }\r\n        else {\r\n            updateSelectedInteriors = selectedInteriors.filter((value: availableInventoryModel.IAISelectedInterior) => value.SelectInteriorName !== interiorName);\r\n        }\r\n        setSelectedInteriors(updateSelectedInteriors);\r\n    }\r\n\r\n    const handleRestFilter = () => {\r\n\r\n        setSelectedVariants([]);\r\n        setSelectedExteriors([]);\r\n        setSelectedInteriors([]);\r\n\r\n    }\r\n\r\n    const handleRemoveVariantFilter = () => {\r\n\r\n    }\r\n\r\n    const handleMobileFilterClick = () => {\r\n        setIsButtonClicked(true);\r\n        handleFilterDialogClose();\r\n    };\r\n\r\n    const handleFilterDialogOpen = () => {\r\n        setFilterDialogVisible(true)\r\n    }\r\n\r\n    useEffect(() => {\r\n        //To estimate the quantity of filter conditions\r\n        //let score = selectedFilter.SelectedVariantsID.length;\r\n\r\n        //if (selectedFilter.SelectedExteriorName !== '') {\r\n        //    score += 1;\r\n        //}\r\n        //if (selectedFilter.SelectedInteriorName !== '') {\r\n        //    score += 1;\r\n        //}\r\n        let score = selectedVariants.length + selectedExteriors.length + selectedInteriors.length;\r\n        setFilterQty(score);\r\n    }, [selectedVariants, selectedExteriors, selectedInteriors]);\r\n\r\n    const onSortChange = (e: any) => {\r\n        setSort(e.value);\r\n    }\r\n\r\n    //useEffect(() => {\r\n    //    //1st loading page, get filers\r\n    //    if (!isNil(selectedDeliveryFromStore.Country?.code) && selectedDeliveryFromStore.Country?.code != \"\") {\r\n    //        setDialogVisible(false);\r\n    //        doGetAvailableInventoryFilter();\r\n    //    }\r\n    //    else {\r\n    //        setDialogVisible(true);\r\n    //    }\r\n    //}, [selectedDeliveryFromStore]);\r\n\r\n    useEffect(() => {\r\n        if (isMobile) {\r\n            if (isButtonClicked) {\r\n                if (!isNil(selectedDeliveryFromStore.Country?.code) && selectedDeliveryFromStore.Country?.code != \"\") {\r\n                    buildAvailableRequest(); // doGetAvailableInventory();\r\n                }\r\n                setIsButtonClicked(false);\r\n            }\r\n        } else {\r\n            if (selectedVariants || selectedExteriors || selectedInteriors || sort) {\r\n                if (!isNil(selectedDeliveryFromStore.Country?.code) && selectedDeliveryFromStore.Country?.code != \"\") {\r\n                    buildAvailableRequest(); // doGetAvailableInventory();\r\n                }\r\n            }\r\n        }\r\n       \r\n    }, [selectedVariants, selectedExteriors, selectedInteriors, sort, isButtonClicked, isMobile]);\r\n\r\n    useEffect(() => {\r\n        doGetAvailableInventory();\r\n\r\n        inventoryAbortController.abort();\r\n        return () => {\r\n            inventoryAbortController.abort();\r\n        };\r\n    }, [JSON.stringify(availableRequest)]);\r\n\r\n\r\n    useEffect(() => {\r\n        if (!isNil(defaultSelectedVariant) || !isNil(isShopFront)) {\r\n            \r\n            if (!isNil(selectedDeliveryFromStore.Country?.code) && selectedDeliveryFromStore.Country?.code != \"\") {\r\n                setDialogVisible(false);\r\n                doGetAvailableInventoryFilter();\r\n            }\r\n            else {\r\n                setDialogVisible(true);\r\n            }\r\n        }\r\n        else {\r\n            //from other website\r\n            if (!isNil(selectedDeliveryFromStore.Country?.code) && selectedDeliveryFromStore.Country?.code != \"\") {\r\n                setDialogVisible(false);\r\n                doGetAvailableInventoryFilter();\r\n            }\r\n            else {\r\n                setDialogVisible(true);\r\n            }\r\n        }\r\n    }, [defaultSelectedVariant, isShopFront, selectedDeliveryFromStore]);\r\n\r\n    const doGetAvailableInventoryFilter = async () => {\r\n        let country = selectedDeliveryFromStore.Country?.code || \"\";\r\n        let needDefaultValue = isNil(defaultSelectedVariant) || defaultSelectedVariant == \"\";\r\n        let variantRequestData: variantModel.IVariantYanaRequest = {\r\n            Country: selectedDeliveryFromStore.Country?.code || null,\r\n            State: selectedDeliveryFromStore.State?.code || null,\r\n            Postcode: selectedDeliveryFromStore.SelectedDeliveryPostcode,\r\n            Suburb: selectedDeliveryFromStore.SelectedDeliverySuburb || null,\r\n            CustomerType: selectedCustomerType,\r\n        };\r\n\r\n        let response = await vehicleSerivce.getAvailableInventoryFilters(country, needDefaultValue, variantRequestData);\r\n        if (response.status) {\r\n\r\n            //stocks List\r\n            let stockList: availableInventoryModel.IAvailableInventoryStock[] = [];\r\n            let stockFromBackend = response.data.stocks;\r\n            if (stockFromBackend.length > 0) {\r\n                stockFromBackend.map((item: any) => {\r\n                    stockList.push({\r\n                        VariantID: item.variantID,\r\n                        VariantName: item.variantName,\r\n                        ExteriorID: item.exteriorID,\r\n                        ExteriorName: item.exteriorName,\r\n                        ExteriorFilterImage: item.exteriorFilterImage,\r\n                        InteriorID: item.interiorID,\r\n                        InteriorName: item.interiorName,\r\n                        InteriorFilterImage: item.interiorFilterImage,\r\n                        ExteriorOrderingNo: item.exteriorDisplayOrderingNo,\r\n                        InteriorOrderingNo: item.interiorDisplayOrderingNo,\r\n                        HasStock: item.interiorID,\r\n                    })\r\n                });\r\n            }\r\n            setStock(stockList);\r\n\r\n            //variants\r\n            let variantsList: vehicleModel.IVariant[] = [];\r\n            let variantsFromBackend = response.data.variants;\r\n            let defaultVariantID = \"\";\r\n            let defaultVariantName = \"\";\r\n\r\n            // let defaultVariant: availableInventoryModel.IAISelectedVariant = { SelectVariantID: \"\", SelectVariantName: \"\" };\r\n\r\n            if (variantsFromBackend.length > 0) {\r\n                variantsFromBackend.map((item: any) => {\r\n\r\n                    if (!isNil(!isNil(defaultSelectedVariant) && defaultSelectedVariant != \"\") && item.variantName == defaultSelectedVariant) {\r\n                        //default selected variant name coming from config page\r\n                        defaultVariantID = item.yanaVariantId;\r\n                        defaultVariantName = item.variantName;\r\n                    }\r\n                    else {\r\n                        if (item.isDefaultSelected) {\r\n                            defaultVariantID = item.yanaVariantId;\r\n                            defaultVariantName = item.variantName;\r\n                        }\r\n                    }\r\n\r\n                    let variantHasSock = stockList.find(m => m.VariantID == item.yanaVariantId && m.HasStock);\r\n                    variantsList.push({\r\n                        VariantID: item.yanaVariantId,\r\n                        VariantName: item.variantName,\r\n                        DriveawayPrice: null,\r\n                        VariantPrice: null,\r\n                        Range: null,\r\n                        Power: null,\r\n                        KmHour: null,\r\n                        VariantPicture: null,\r\n                        VariantPictureMobile: null,\r\n                        VariantDescription: null,\r\n                        IsDefault: defaultVariantID == item.yanaVariantId,\r\n                        HasStock: variantHasSock != null ? true : false\r\n                    });\r\n                });\r\n            }\r\n            setVariants(variantsList);\r\n\r\n            if (!isNil(defaultVariantID) && defaultVariantID != \"\") {\r\n                let defaultVariant: availableInventoryModel.IAISelectedVariant[] = [{ SelectVariantID: defaultVariantID, SelectVariantName: defaultVariantName }];\r\n                setSelectedVariants(defaultVariant);\r\n            }\r\n\r\n            //exteriors\r\n            let exteriorList: vehicleModel.IExterior[] = getExteriorList(stockList, []);\r\n            setExteriors(exteriorList);\r\n            let defaultExteriors: availableInventoryModel.IAISelectedExterior[] = [];\r\n            if (!isNil(defaultSelectedExterior) && defaultSelectedExterior != \"\") {\r\n                defaultExteriors = [{\r\n                    SelectExteriorID: \"\",\r\n                    SelectExteriorName: defaultSelectedExterior || \"\",\r\n                }]\r\n            }\r\n            setSelectedExteriors(defaultExteriors);\r\n\r\n            //interiors\r\n            let interiorList: vehicleModel.IInterior[] = getInteriorList(stockList, [], defaultExteriors);\r\n            setInteriors(interiorList);\r\n            let defaultInteriors: availableInventoryModel.IAISelectedInterior[] = [];\r\n            if (!isNil(defaultSelectedInterior) && defaultSelectedInterior != \"\") {\r\n                defaultInteriors = [{\r\n                    SelectInteriorID: \"\",\r\n                    SelectInteriorName: defaultSelectedInterior || \"\",\r\n                }]\r\n            }\r\n\r\n            setSelectedInteriors(defaultInteriors);\r\n        }\r\n    }\r\n\r\n    const getExteriorList = (stockList: availableInventoryModel.IAvailableInventoryStock[], variants: availableInventoryModel.IAISelectedVariant[]): vehicleModel.IExterior[] => {\r\n        let exteriorList: vehicleModel.IExterior[] = [];\r\n        let tempstockList = stockList.filter((stockItem: availableInventoryModel.IAvailableInventoryStock) => {\r\n            if (variants.length == 0) {\r\n                return stockItem;  //if no variants selected, return all exteriors\r\n            }\r\n            else {\r\n                return variants.some((selectedVariant: availableInventoryModel.IAISelectedVariant) => {\r\n                    return stockItem.VariantID == selectedVariant.SelectVariantID;\r\n                });\r\n            }\r\n        });\r\n        tempstockList.map((stockItem: availableInventoryModel.IAvailableInventoryStock) => {\r\n            let exteriorHasStock = stockList.find(m => m.VariantID == stockItem.VariantID && m.ExteriorID == stockItem.ExteriorID && m.HasStock);\r\n            exteriorList.push({\r\n                Country: null,\r\n                VariantID: stockItem.VariantID || \"\",\r\n                VariantName: stockItem.VariantName || \"\",\r\n                ExteriorID: stockItem.ExteriorID || \"\",\r\n                ExteriorColorName: stockItem.ExteriorName || \"\",\r\n                ExteriorColorDescTitle: null,\r\n                ExteriorColorDesc: null,\r\n                ExteriorPrice: null,\r\n                ExteriorPicture: null,\r\n                ExteriorPictureMobile: null,\r\n                ExteriorFilterImage: stockItem.ExteriorFilterImage || \"\",\r\n                ExteriorFilterMobile: null,\r\n                IsDefault: null,\r\n                HasStock: exteriorHasStock != null ? true : false,\r\n                ExteriorOrderingNo: stockItem.ExteriorOrderingNo\r\n            });\r\n        });\r\n\r\n        //distinct data by name\r\n        if (exteriorList.length > 0) {\r\n            exteriorList = exteriorList.filter((value: vehicleModel.IExterior, index: any, self: vehicleModel.IExterior[]) => {\r\n                return self.findIndex((v: vehicleModel.IExterior) => v.ExteriorColorName === value.ExteriorColorName) === index;\r\n            }).sort(m => m.ExteriorOrderingNo);\r\n        }\r\n        return exteriorList;\r\n    }\r\n\r\n\r\n    const getInteriorList = (\r\n        stockList: availableInventoryModel.IAvailableInventoryStock[],\r\n        variants: availableInventoryModel.IAISelectedVariant[],  //variantID: string,\r\n        exteriors: availableInventoryModel.IAISelectedExterior[],  // exteriorName: string | null\r\n    ): vehicleModel.IInterior[] => {\r\n        let interiorList: vehicleModel.IInterior[] = [];\r\n        let tempstockList = stockList.filter((stockItem: availableInventoryModel.IAvailableInventoryStock) => {\r\n            //if (variants.length == 0 && exteriors.length == 0) {\r\n            //    return stockItem;  //if no variants and exteriors selected, return all exteriors\r\n            //}\r\n            //else {\r\n            let hasVariant = true;\r\n            if (variants.length > 0) {\r\n                hasVariant = variants.some((selectedVariant: availableInventoryModel.IAISelectedVariant) => {\r\n                    return stockItem.VariantID == selectedVariant.SelectVariantID;\r\n                });\r\n            }\r\n\r\n            let hasExteriant = true;\r\n            if (exteriors.length > 0) {\r\n                hasExteriant = variants.some((selectedVariant: availableInventoryModel.IAISelectedVariant) => {\r\n                    return stockItem.VariantID == selectedVariant.SelectVariantID;\r\n                });\r\n            }\r\n\r\n            //console.log(hasVariant);\r\n            return hasVariant || hasExteriant;\r\n            //}\r\n        });\r\n\r\n        tempstockList.map((stockItem: availableInventoryModel.IAvailableInventoryStock) => {\r\n            let interiorHasStock = stockList.find(m => m.VariantID == stockItem.VariantID\r\n                && m.ExteriorName == stockItem.ExteriorName\r\n                && m.InteriorID == stockItem.InteriorID\r\n                && m.HasStock);\r\n\r\n            interiorList.push({\r\n                Country: null,\r\n                State: null,\r\n                VariantID: stockItem.VariantID,\r\n                VariantName: stockItem.VariantName,\r\n                ExteriorID: null,\r\n                ExteriorName: stockItem.ExteriorName,\r\n                InteriorID: stockItem.InteriorID,\r\n                InteriorColorName: stockItem.InteriorName,\r\n                InteriorColorDescTitle: null,\r\n                InteriorColorDesc: null,\r\n                InteriorPrice: null,\r\n                InteriorPicture: null,\r\n                InteriorPictureMobile: null,\r\n                InteriorFilterImage: stockItem.InteriorFilterImage,\r\n                InteriorFilterMobile: null,\r\n                IsDefault: null,\r\n                Available: null,\r\n                HasStock: interiorHasStock != null ? true : false,\r\n                InteriorOrderingNo: stockItem.InteriorOrderingNo,\r\n            });\r\n        });\r\n\r\n        //distinct data by name\r\n        if (interiorList.length > 0) {\r\n            interiorList = interiorList.filter((value: vehicleModel.IInterior, index: any, self: vehicleModel.IInterior[]) => {\r\n                return self.findIndex((v: vehicleModel.IInterior) => v.InteriorColorName === value.InteriorColorName) === index;\r\n            }).sort(m => m.InteriorOrderingNo);\r\n        }\r\n        return interiorList;\r\n    }\r\n\r\n    const buildAvailableRequest = () => {\r\n        // window.dataLayer.push({})\r\n        let requestData: availableInventoryModel.IAvailableInventoryRequest = {\r\n            Country: selectedDeliveryFromStore.Country?.code || null,\r\n            State: selectedDeliveryFromStore.State?.code || null,\r\n            Postcode: selectedDeliveryFromStore.SelectedDeliveryPostcode,\r\n            Suburb: selectedDeliveryFromStore.SelectedDeliverySuburb || null,\r\n            CustomerType: selectedCustomerType,\r\n            Variants: selectedVariants,\r\n            Exteriors: selectedExteriors,\r\n            Interiors: selectedInteriors,\r\n            DeliveryOption: selectedDeliveryFromStore.SelectedDeliveryOption || rdEnum.enumDeliveryOptions.Pickup,\r\n            Distance: selectedDeliveryFromStore.SelectedPickupLocation?.Distance || null,\r\n            Sort: sort?.code || \"0\",\r\n        };\r\n        setAvailabeRequest(requestData);\r\n\r\n    }\r\n\r\n    const doGetAvailableInventory = async () => {\r\n        setAvailableInventoryList([]);\r\n        if (isNil(availableRequest.Country) || availableRequest.Country == \"\") return;\r\n\r\n        const abortController = new (window as any).AbortController();\r\n        await setInventoryAbortController(abortController);\r\n\r\n        try {\r\n            setSearchResultLoadingStatus(rdEnum.enumProcessingStatus.Processing);\r\n            let response = await vehicleSerivce.getAvailableInventory(availableRequest, abortController.signal);\r\n            if (response.status) {\r\n\r\n                //search results\r\n                let lst: availableInventoryModel.IAvailableInventory[] = [];\r\n                let availableList = response.data.availableInventorys;\r\n                if (availableList.length > 0) {\r\n                    availableList.map((item: any) => {\r\n                        lst.push({\r\n                            Country: item.country,\r\n                            State: item.state,\r\n                            VariantID: item.yanaVariantId,\r\n                            VariantName: item.variantName,\r\n                            VariantPicture: item.variantPicture,\r\n                            Available: item.available,\r\n                            BasePrice: item.basePrice,\r\n                            DriveawayPrice: item.driveawayPrice,\r\n                            ExteriorID: item.exteriorID,\r\n                            ExteriorName: item.exteriorName,\r\n                            InteriorID: item.interiorID,\r\n                            InteriorName: item.interiorName,\r\n                        })\r\n\r\n                    });\r\n                }\r\n                setAvailableInventoryList(lst);\r\n            }\r\n            setSearchResultLoadingStatus(rdEnum.enumProcessingStatus.Processed);\r\n\r\n        } catch (error: any) {\r\n            if (error.name === 'AbortError') console.log('Request aborted!');\r\n        } finally {\r\n            //if (abortController.signal?.aborted)\r\n        }\r\n    }\r\n\r\n\r\n\r\n    const onGoToOrder = (variantName: string, exteriorName: string, interiorName: string) => {\r\n        let url = `${getFrontendUrl()}/?selectedVariant=${variantName}&selectedExterior=${exteriorName}&selectedInterior=${interiorName}`;\r\n        url += `&selectedCountry=${selectedDeliveryFromStore.Country?.code}&selectedState=${selectedDeliveryFromStore.State?.code}`;\r\n        navigate(url);\r\n    }\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const { scrollToSection } = useScroll();\r\n\r\n    const toConfigure = () => {\r\n        let currentUrl = window.location.href;\r\n        navigate(`${getFrontendUrlWithSlash()}`, { state: { closePreLoader: false, isFromOtherPage: true, isFromHomePage: false } })\r\n        // if (currentUrl.includes(`?redirectPage=${rdEnum.enumRedirectPage.CheckoutPaymentPage}`)) {\r\n\r\n        //     currentUrl = currentUrl.replace(`?redirectPage=${rdEnum.enumRedirectPage.CheckoutPaymentPage}`, '');\r\n\r\n        //     // Update the browser's URL without reloading the page\r\n        //     window.history.replaceState({}, '', currentUrl);\r\n        // }\r\n\r\n        dispatch(hideGlobalPage(false))\r\n        setTimeout(() => {\r\n            scrollToSection('variant')\r\n        }, 300);\r\n\r\n        // setPaymentPageStatus(0);\r\n        // dispatch(setMainPageNumber(0));\r\n\r\n        // navigate(`/${getFrontendVirtualDir()}`, { state: { closePreLoader: false } });\r\n        // dispatch(setScrollPosition('variant'));\r\n        // const sections = document.querySelectorAll('.d2c-container');\r\n\r\n        //     sections.forEach((section: any) => {\r\n        //         section.style.overflowY = 'scroll';\r\n        //         // section.style.paddingRight = '15px';\r\n        //     });\r\n    }\r\n\r\n    const formatPrice = (value: number | null) => {\r\n        if (isNil(value))\r\n            return \"\";\r\n        return currencyFormatter.format(value);\r\n    }\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n    const [countries, setCountries] = useState<ICodeName[]>([]);\r\n    const [selectedCountry, setSelectedCountry] = useState<ICodeName>();\r\n    const [states, setStates] = useState<ICodeName[]>([]);\r\n    const [selectedState, setSelectedState] = useState<any>(null);\r\n    const [isHovered, setIsHovered] = useState(false);\r\n\r\n    const [filterDialogVisible, setFilterDialogVisible] = useState(true);\r\n    \r\n    const countryState = useCountryState();\r\n\r\n    const doGetCountry = async () => {\r\n        let country = await countryState.getCountry();\r\n        setCountries(country);\r\n    }\r\n\r\n    const doGetStates = async () => {\r\n        let states = await countryState.getStates(rdEnum.enumCountryCode.Australia);\r\n        setStates(states);\r\n    }\r\n\r\n    useEffect(() => {\r\n        doGetCountry();\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n       // setSelectedCountry({ code: rdEnum.enumCountryCode.Australia, name: rdEnum.enumCountryName.Australia });\r\n        doGetStates();\r\n        //if (!isNil(selectedCountry?.code) && selectedCountry?.code != \"\") {\r\n        //    doGetStates()\r\n        //}\r\n    }, [selectedCountry?.code]);\r\n\r\n    useEffect(() => {\r\n        if (isMobile) {\r\n            setFilterDialogVisible(true);\r\n        }\r\n    }, [location.state]);\r\n\r\n    useEffect(() => {\r\n        dispatch(checkIsShowScrollBar(true));\r\n    }, []);\r\n\r\n    const onCountryChange = (e: any) => {\r\n        setSelectedCountry(e.value);\r\n    }\r\n\r\n    const onStateChange = (e: any) => {\r\n        setSelectedState(e.value);\r\n    }\r\n\r\n    const onHide = () => {\r\n        if ((selectedCountry?.code == rdEnum.enumCountryCode.Australia && selectedState)\r\n            || selectedCountry?.code == rdEnum.enumCountryCode.NewZealand) {\r\n            // document.body.style.overflowY = 'scroll';\r\n            // document.body.style.paddingRight = '0px';\r\n            dispatch(checkIsShowScrollBar(true));\r\n            setDialogVisible(false);\r\n            //dispatch(setCountryStateAction({ Country: selectedCountry, State: selectedState }));\r\n        }\r\n    }\r\n\r\n    const handleHover = () => {\r\n        setIsHovered((prevIsHovered) => !prevIsHovered);\r\n    };\r\n\r\n    const toTestDrive = () => {\r\n        // navigate(`${getFrontendUrl()}/test-drive`);\r\n        // dispatch(setGlobalDropdown(false, false));\r\n        // dispatch(checkIsShowScrollBar(true))\r\n        window.open('https://www.cadillacanz.com/au-en/register');\r\n    }\r\n\r\n    const onSubmit = () => {\r\n        if ((selectedCountry?.code == rdEnum.enumCountryCode.Australia && selectedState)\r\n            || selectedCountry?.code == rdEnum.enumCountryCode.NewZealand) {\r\n            // document.body.style.overflowY = 'scroll';\r\n            // document.body.style.paddingRight = '0px';\r\n            dispatch(checkIsShowScrollBar(true));\r\n\r\n            //Invoke the onHide function for 1. dispatch Country & State to store, 2. close dialog\r\n            onHide();\r\n\r\n            //update country/state store before call landing page api as this api is too slow to impact on getting variant/exterior/interior\r\n            let delivery: selectedConfigModel.ISelectedDelivery = {\r\n                Country: selectedCountry,\r\n                State: selectedState,\r\n                SelectedPickupLocation: null,\r\n                SelectedDeliveryOption: null,\r\n                SelectedDeliveryFullAddress: null,\r\n                SelectedDeliveryPostcode: null,\r\n                SelectedDeliveryState: null,\r\n                SelectedDeliverySuburb: null,\r\n                //EstDeliveryDate: null,\r\n                PrimaryAddress: null,\r\n                PrimaryPostcode: null,\r\n                PrimarySuburb: null,\r\n                PrimaryState: null,\r\n                InvalidPrimaryAddress: null,\r\n                DeliveryPrice: null,\r\n                DeliveryAvailable: null,\r\n                DeliveryPriceErrorCode: null,\r\n                DeliveryDistance: null,\r\n                PickupLocationName: null,\r\n            };\r\n            dispatch(selectedDeliveryStore.updateDeliveryAction(delivery));\r\n\r\n            //clear payment options\r\n            dispatch(paymentOptionsStore.clearPaymentOptionsAction());\r\n\r\n            //default set customer type as private customer\r\n            dispatch(customerTypeStore.setCustomerTypeAction(rdEnum.enumClientTypes.Private.Code));\r\n\r\n            //if the users are from interest link or from inventory page, wont show this popup\r\n            //so clear default config store\r\n            let defaultConfig: defaultConfigModel.IDefaultConfig = {\r\n                Country: null,\r\n                State: null,\r\n                VariantName: null,\r\n                ExteriorName: null,\r\n                InteriorName: null,\r\n                Options: [],\r\n                Loaded: false,\r\n                LinkKey: null,\r\n                ExpiryDateText: null,\r\n            }\r\n            dispatch(defaultConfigStore.setDefaultConfigAction(defaultConfig));\r\n            dispatch(linkSourceStore.setLinkSourceAction(null));\r\n\r\n        }\r\n    }\r\n\r\n\r\n    const topPanel = () => {\r\n        return (\r\n            <div className='top-control-container'>\r\n                <div className='top-control-panel'>\r\n                    <div className='filter-panel'>\r\n                        <span>\r\n                            <span className='filter-title'>Filters</span>\r\n                            <div className='filter-quantity'>\r\n                                <span>{filterQty}</span>\r\n                            </div>\r\n                        </span>\r\n\r\n                        {\r\n                            isMobile\r\n                            ?\r\n                            <img alt=\"\" className='cross' onClick={() => handleFilterDialogClose()} src={`${getCMSAssets()}/main/cross.svg`} />\r\n                            :\r\n                            <></>\r\n                        }\r\n                        \r\n                    </div>\r\n\r\n                    <div className='reset-panel' onClick={() => handleRestFilter()}>\r\n                        <img alt=\"\" className='control-icon' data-pr-tooltip=\"Reset\"\r\n                            src={`${getCMSAssets()}/inventory/reset.svg`}\r\n                        />\r\n                        <span>Reset</span>\r\n                        {/* {\r\n                            drawerShow == true \r\n                            ?\r\n                            <span>Reset</span>\r\n                            :\r\n                            <></>\r\n                        } */}\r\n                    </div>\r\n                    <div className='hide-drawer' onClick={() => drawerShow == true ? handleDrawerClose() : handleDrawerOpen()}>\r\n                        {\r\n                            drawerShow == true && !isMobile\r\n                                ?\r\n                                <img alt=\"\" className='control-icon' data-pr-tooltip=\"Open\"\r\n                                    src={`${getCMSAssets()}/inventory/hide.svg`}\r\n                                />\r\n                                :\r\n                                <></>\r\n                        }\r\n                        {\r\n                            drawerShow == true && !isMobile\r\n                                ?\r\n                                <span>Hide</span>\r\n                                :\r\n                                drawerShow == false && !isMobile\r\n                                ?\r\n                                <span>Show</span>\r\n                                :\r\n                                <></>\r\n                        }\r\n                        {\r\n                            drawerShow != true && !isMobile\r\n                                ?\r\n                                <img alt=\"\" className='control-icon' data-pr-tooltip=\"Open\"\r\n                                    src={`${getCMSAssets()}/inventory/hide.svg`}\r\n                                    style={{ transform: 'rotate(180deg)', marginLeft: '.5rem' }}\r\n                                />\r\n                                :\r\n                                <></>\r\n                        }\r\n                    </div>\r\n                </div>\r\n\r\n                <div className={classNames({\r\n                    'table-list-header': true,\r\n                    \"align-end\": isNil(outOfStockBoxLocation) || outOfStockBoxLocation == \"\",\r\n                    \"align-around\": !isNil(outOfStockBoxLocation) && outOfStockBoxLocation != \"\"\r\n                })}>\r\n                    {/*if initally from configuration page*/}\r\n                    {!isNil(outOfStockBoxLocation) && outOfStockBoxLocation != \"\" && (\r\n                        <div className='back-to-configure' onClick={() => {\r\n                            onGoToOrder(defaultSelectedVariant || \"\", defaultSelectedExterior || \"\", defaultSelectedInterior || \"\");\r\n                        }}>\r\n                            <img alt=\"\" src={`${getCMSAssets()}/inventory/arrow.svg`} />\r\n                            <span>Return to configuration</span>\r\n                        </div>\r\n                    )}\r\n\r\n                    <div className='dropdown-panel'>\r\n                        <Dropdown\r\n                            value={sort || ''}\r\n                            options={rdEnum.enumInventorySort}\r\n                            onChange={(e) => onSortChange(e)}\r\n                            className='list-category'\r\n                            optionLabel=\"name\"\r\n                            placeholder=\"\"\r\n                        />\r\n                        <label className={sort ? 'sort-by-label selected' : 'sort-by-label'}>Sort by</label>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        )\r\n    }\r\n\r\n    const filterPanel = () => {\r\n        return (\r\n            <div className={drawerShow == true ? 'inventory-drawer' : 'inventory-drawer close'}>\r\n                <div className='main-drawer'\r\n                    style={{ display: drawerShow == true ? '' : 'none' }} //Hide the main drawer when close\r\n                >\r\n                    <div className='variant-section'>\r\n                        <div className='section-title'>\r\n                            VARIANT\r\n                        </div>\r\n\r\n                        {\r\n                            !isMobile\r\n                            ?\r\n                            <div className='checkbox-panel'>\r\n                                {variants.length > 0 && variants.map((item: vehicleModel.IVariant, index: number) => {\r\n                                    return (\r\n                                        <div className='inventory-variant-btn-panel' key={\"variant_filter_\" + item.VariantID + index}>\r\n                                            <Button\r\n                                                className={classNames({\r\n                                                    \"inventory-variant-btn\": true,\r\n                                                    \"disabled-wrapper\": !item.HasStock,\r\n                                                    \"selected\": selectedVariants.some((selectedItem: availableInventoryModel.IAISelectedVariant) => { return selectedItem.SelectVariantID === item.VariantID })\r\n                                                })}\r\n                                                onClick={() => {\r\n                                                    handleVariant(item.VariantID || \"\", item.VariantName || \"\");\r\n                                                }}\r\n                                            >\r\n                                                <h6>{item.VariantName}</h6>\r\n                                            </Button>\r\n                                        </div>\r\n                                    )\r\n                                })}\r\n                            </div>\r\n                            :\r\n                            <div className='checkbox-panel'>\r\n                                {variants.length > 0 && variants.map((item: vehicleModel.IVariant, index: number) => {\r\n                                    return (\r\n                                        <div className='inventory-variant-btn-panel' key={\"variant_filter_\" + item.VariantID + index}>\r\n                                            <Checkbox\r\n                                                // className={classNames({\r\n                                                //     \"inventory-variant-btn\": true,\r\n                                                //     \"disabled-wrapper\": !item.HasStock,\r\n                                                //     \"selected\": selectedVariants.some((selectedItem: availableInventoryModel.IAISelectedVariant) => { return selectedItem.SelectVariantID === item.VariantID })\r\n                                                // })}\r\n                                                // onClick={() => {\r\n                                                //     handleVariant(item.VariantID || \"\", item.VariantName || \"\");\r\n                                                // }}\r\n                                                name={`cb-ack + ${item.VariantID}`}\r\n                                                inputId={`cb-ack + ${item.VariantID}`}\r\n                                                onChange={() => {\r\n                                                    handleVariant(item.VariantID || \"\", item.VariantName || \"\")\r\n                                                }}\r\n                                                checked={selectedVariants.some((selectedItem: availableInventoryModel.IAISelectedVariant) => { return selectedItem.SelectVariantID === item.VariantID })}\r\n                                            >\r\n                                                {/* <h6>{item.VariantName}</h6> */}\r\n                                            </Checkbox>\r\n                                            <label htmlFor={`cb-ack + ${item.VariantID}`} className=\"p-checkbox-label\">\r\n                                                {item.VariantName}\r\n                                            </label>\r\n                                        </div>\r\n                                    )\r\n                                })}\r\n                            </div>\r\n                        }\r\n                    </div>\r\n\r\n                    {\r\n                        !isMobile\r\n                        ?\r\n                        <>\r\n                            {/*exterior*/}\r\n                            <Accordion defaultActiveKey=\"0\" className='exterior-section'>\r\n                                <Accordion.Item eventKey=\"0\">\r\n                                    <Accordion.Header className='section-title'>\r\n                                        EXTERIOR\r\n                                    </Accordion.Header>\r\n\r\n                                    <Accordion.Body className='options-container' >\r\n                                        {exteriors.length > 0 && exteriors.map((item: vehicleModel.IExterior, index: number) => {\r\n                                            //use exterior name to compare as exterior id is not correct\r\n                                            return (\r\n                                                <div className={classNames({\r\n                                                    \"color-options-item\": true,\r\n                                                    \"active\": selectedExteriors.some((selectedItem: availableInventoryModel.IAISelectedExterior) => { return selectedItem.SelectExteriorName === item.ExteriorColorName }),\r\n                                                    \"disabled-wrapper\": !item.HasStock\r\n                                                })}\r\n                                                    key={\"ai_e_\" + item + index}\r\n                                                    onClick={() => {\r\n                                                        if (item.HasStock) {\r\n                                                            handleExteriorColor(item.ExteriorColorName || \"\");\r\n                                                        }\r\n                                                    }}\r\n                                                    data-pr-tooltip={item.ExteriorColorName}\r\n                                                >\r\n                                                    <div className='color-options-round'>\r\n                                                        <img className=\"image\" src={item.ExteriorFilterImage || \"\"} />\r\n                                                    </div>\r\n                                                    <div className='options-content'>\r\n                                                        {item.ExteriorColorName}\r\n                                                    </div>\r\n                                                </div>\r\n                                            );\r\n\r\n                                        })}\r\n\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n                            </Accordion>\r\n\r\n                            {/*interior*/}\r\n                            <Accordion defaultActiveKey=\"0\" className='interior-section'>\r\n                                <Accordion.Item eventKey=\"0\">\r\n                                    <Accordion.Header className='section-title'>\r\n                                        INTERIOR\r\n                                    </Accordion.Header>\r\n\r\n                                    <Accordion.Body className='options-container' >\r\n                                        {interiors.length > 0 && interiors.map((item: vehicleModel.IInterior, index: number) => {\r\n                                            return (\r\n                                                <div className={classNames({\r\n                                                    \"color-options-item\": true,\r\n                                                    \"active\": selectedInteriors.some((selectedItem: availableInventoryModel.IAISelectedInterior) => { return selectedItem.SelectInteriorName === item.InteriorColorName }),\r\n                                                    \"disabled-wrapper\": !item.HasStock\r\n                                                })}\r\n                                                    key={\"ai_i_\" + item + index}\r\n                                                    onClick={() => {\r\n                                                        if (item.HasStock) {\r\n                                                            handleInteriorColor(item.InteriorColorName);\r\n                                                        }\r\n                                                    }}\r\n                                                    data-pr-tooltip={item.InteriorColorName}\r\n                                                >\r\n                                                    <div className='color-options-round'>\r\n                                                        <img className=\"image\" src={item.InteriorFilterImage || \"\"} />\r\n                                                    </div>\r\n                                                    <div className='options-content'>\r\n                                                        {item.InteriorColorName}\r\n                                                    </div>\r\n                                                </div>\r\n                                            );\r\n                                        })}\r\n                                    </Accordion.Body>\r\n                                </Accordion.Item>\r\n                            </Accordion >\r\n                        </>\r\n                        :\r\n                        <>\r\n                        {/*exterior*/}\r\n                        <div className='exterior-section'>\r\n                            \r\n                            <div className='section-title'>\r\n                                EXTERIOR\r\n                            </div>\r\n\r\n                            <div className='options-container' >\r\n                                {exteriors.length > 0 && exteriors.map((item: vehicleModel.IExterior, index: number) => {\r\n                                    //use exterior name to compare as exterior id is not correct\r\n                                    return (\r\n                                        <div className={classNames({\r\n                                            \"color-options-item\": true,\r\n                                            \"active\": selectedExteriors.some((selectedItem: availableInventoryModel.IAISelectedExterior) => { return selectedItem.SelectExteriorName === item.ExteriorColorName }),\r\n                                            \"disabled-wrapper\": !item.HasStock\r\n                                        })}\r\n                                            key={\"ai_e_\" + item + index}\r\n                                            onClick={() => {\r\n                                                if (item.HasStock) {\r\n                                                    handleExteriorColor(item.ExteriorColorName || \"\");\r\n                                                }\r\n                                            }}\r\n                                            data-pr-tooltip={item.ExteriorColorName}\r\n                                        >\r\n                                            <div className='color-options-round'>\r\n                                                <img className=\"image\" src={item.ExteriorFilterImage || \"\"} />\r\n                                            </div>\r\n                                            <div className='options-content'>\r\n                                                {item.ExteriorColorName}\r\n                                            </div>\r\n                                        </div>\r\n                                    );\r\n\r\n                                })}\r\n\r\n                            </div>\r\n                        </div>\r\n\r\n                        {/*interior*/}\r\n                        <div className='interior-section'>\r\n                            <div className='section-title'>\r\n                                INTERIOR\r\n                            </div>\r\n\r\n                            <div className='options-container' >\r\n                                {interiors.length > 0 && interiors.map((item: vehicleModel.IInterior, index: number) => {\r\n                                    return (\r\n                                        <div className={classNames({\r\n                                            \"color-options-item\": true,\r\n                                            \"active\": selectedInteriors.some((selectedItem: availableInventoryModel.IAISelectedInterior) => { return selectedItem.SelectInteriorName === item.InteriorColorName }),\r\n                                            \"disabled-wrapper\": !item.HasStock\r\n                                        })}\r\n                                            key={\"ai_i_\" + item + index}\r\n                                            onClick={() => {\r\n                                                if (item.HasStock) {\r\n                                                    handleInteriorColor(item.InteriorColorName);\r\n                                                }\r\n                                            }}\r\n                                            data-pr-tooltip={item.InteriorColorName}\r\n                                        >\r\n                                            <div className='color-options-round'>\r\n                                                <img className=\"image\" src={item.InteriorFilterImage || \"\"} />\r\n                                            </div>\r\n                                            <div className='options-content'>\r\n                                                {item.InteriorColorName}\r\n                                            </div>\r\n                                        </div>\r\n                                    );\r\n                                })}\r\n                            </div>\r\n                        </div >\r\n\r\n                        <div className='variant-btn-panel'>\r\n                            <Button className='variant-btn' onClick={() => {\r\n                                handleMobileFilterClick()\r\n                            }}>\r\n                                <h6>SHOW RESULTS</h6>\r\n                            </Button>\r\n                        </div>\r\n                    </>\r\n                    }\r\n                </div>\r\n\r\n                {\r\n                    drawerShow != true\r\n                        ?\r\n                        <>\r\n                            <Tooltip target=\".control-icon\" />\r\n                            <Tooltip target=\".variant-btn\" />\r\n                            <Tooltip target=\".color-options-item\" style={{ maxWidth: '300px' }}>\r\n                            </Tooltip>\r\n                        </>\r\n                        :\r\n                        <></>\r\n                }\r\n\r\n            </div>\r\n        )\r\n    }\r\n\r\n    const handleFilterDialogClose = () => {\r\n        setFilterDialogVisible(false);\r\n    }\r\n\r\n    const isScrollbarVisible = useSelector((state: IAppState) => {\r\n        return state.isShowScrollBar.isShowScrollBar\r\n    });\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: {},\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n    }, []);\r\n\r\n    return (\r\n        <MainLayoutPage sceneId=\"container-has-fixed-header\">\r\n\r\n            {/* <InventoryMenu /> */}\r\n\r\n            <GlobalMenu />\r\n\r\n            {\r\n                isMobile\r\n                ?\r\n                <Dialog className='filter-dialog' visible={filterDialogVisible} position='bottom' draggable={false} resizable={true} onHide={() => handleFilterDialogClose()}>\r\n                    {\r\n                        topPanel()\r\n                    }\r\n                    {\r\n                        filterPanel()\r\n                    }\r\n                </Dialog>\r\n                :\r\n                <></>\r\n            }\r\n\r\n            {\r\n                !isMobile\r\n                ?\r\n                topPanel()\r\n                :\r\n                <></>\r\n            }\r\n\r\n            <div className='inventory-container'>\r\n                {\r\n                    !isMobile\r\n                    ?\r\n                    filterPanel()\r\n                    :\r\n                    <></>\r\n                }\r\n                {searchResultLoadingStatus != rdEnum.enumProcessingStatus.Processed && (\r\n                    <div className='inventory-list-container' style={{ marginLeft: drawerShow == true ? '8vw' : '0' }}>\r\n                        <div className='pre-loader'>\r\n                            <img className=\"img\" alt=\"Info icon\" src={`${getCMSAssets()}/home/brand-loader.gif`} />\r\n                        </div>\r\n                    </div>\r\n                )}\r\n                {\r\n                    isMobile\r\n                    ?\r\n                    <div className='filter-to-exapnd-container'>\r\n                        <div className='filter-to-exapnd-box' onClick={() => handleFilterDialogOpen()}>\r\n                            <img className=\"img\" alt=\"Info icon\" src={`${getCMSAssets()}/inventory/setting.svg`} />\r\n                            <div className='filter-quantity'>\r\n                                <span>{filterQty}</span>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    :\r\n                    <></>\r\n                }\r\n                {searchResultLoadingStatus == rdEnum.enumProcessingStatus.Processed && (\r\n\r\n                    <div className={drawerShow == true ? 'inventory-list-container' : 'inventory-list-container expand'} style={{ marginLeft: drawerShow == true ? '8vw' : '0' }}>\r\n                        <Row className='inventory-table-list'>\r\n                            {availableInventoryList.length == 0 && (\r\n                                <div className=\"filter-reset-wrapper\">\r\n                                    <h1>NO MATCHES FOUND</h1>\r\n                                    <p>Try removing Filters</p>\r\n                                    <div className='selected-filters-wrapper'>\r\n                                        {selectedVariants.map((item: availableInventoryModel.IAISelectedVariant, index: number) => {\r\n                                            return (\r\n                                                <div className=\"selected-filter-item\" key={\"selected_filter_v_\" + index}\r\n                                                    onClick={() => handleRemoveVariantFilter()}\r\n                                                >\r\n                                                    <span>Variant: {item.SelectVariantName}</span>\r\n                                                    <BsXCircle className=\"icon\" size=\"20\" />\r\n                                                </div>\r\n                                            );\r\n                                        })}\r\n\r\n                                        {selectedExteriors.map((item: availableInventoryModel.IAISelectedExterior, index: number) => {\r\n                                            return (\r\n                                                <div className=\"selected-filter-item\" key={\"selected_filter_e_\" + index}\r\n                                                    onClick={() => {\r\n                                                        handleExteriorColor(item.SelectExteriorName || \"\");\r\n                                                    }}\r\n                                                >\r\n                                                    <span>Exterior: {item.SelectExteriorName}</span>\r\n                                                    <BsXCircle className=\"icon\" size=\"20\" />\r\n                                                </div>\r\n                                            );\r\n                                        })}\r\n\r\n                                        {selectedInteriors.map((item: availableInventoryModel.IAISelectedInterior, index: number) => {\r\n                                            return (\r\n                                                <div className=\"selected-filter-item\" key={\"selected_filter_i_\" + index}\r\n                                                    onClick={() => {\r\n                                                        handleInteriorColor(item.SelectInteriorName || \"\");\r\n                                                    }}\r\n                                                >\r\n                                                    <span>Interior: {item.SelectInteriorName}</span>\r\n                                                    <BsXCircle className=\"icon\" size=\"20\" />\r\n                                                </div>\r\n                                            );\r\n                                        })}\r\n                                    </div>\r\n                                    <div className=\"link-remove-all\" onClick={() => handleRestFilter()}>\r\n                                        <BsXCircle className=\"icon\" size=\"20\" />\r\n                                        <span>Remove All</span>\r\n                                    </div>\r\n                                </div>\r\n                            )}\r\n\r\n                            {availableInventoryList.length > 0 && availableInventoryList.map((item: availableInventoryModel.IAvailableInventory, index: number) => {\r\n                                return (\r\n                                    <Col lg={drawerShow != true ? 3 : 4}\r\n                                        className={drawerShow == true ? 'inventory-card' : 'inventory-card full'}\r\n                                        key={\"ai_\" + item + index}\r\n                                    >\r\n                                        <div className='inventory-card-inner'>\r\n                                            <div className='inventory-header'>\r\n                                                <div className='name-type'>\r\n                                                    <h6>{rdEnum.constModel}</h6>\r\n                                                    <h6>{formatPrice(item?.DriveawayPrice)}</h6>\r\n                                                </div>\r\n                                                <div className='price-payment'>\r\n                                                    <div className='inner-panel'>\r\n                                                        <span>{item.VariantName}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='vehicle-image-panel'>\r\n                                                <img src={item.VariantPicture || undefined} />\r\n                                            </div>\r\n                                            <div className='color-panel'>\r\n                                                <div className='exterior-box'>\r\n                                                    <span>Exterior</span>\r\n                                                    <div className='color-options-item' >\r\n                                                        {/* <div className='color-options-round'>\r\n                                                            <img className=\"image\" src={item.ExteriorPicture || undefined} />\r\n                                                        </div> */}\r\n                                                        <div className='options-content'>\r\n                                                            {item.ExteriorName}\r\n                                                        </div>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='interior-box'>\r\n                                                    <span>Interior</span>\r\n                                                    <div className='color-options-item' >\r\n                                                        {/* <div className='color-options-round'>\r\n                                                            <img className=\"image\" src={item.InteriorPicture || undefined} />\r\n                                                        </div> */}\r\n                                                        <div className='options-content'>\r\n                                                            {item.InteriorName}\r\n                                                        </div>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </div>\r\n                                            <div className='bottom-panel'>\r\n                                                <div className='est-delivery-time'>\r\n                                                    <p>{item.Available}</p>\r\n                                                    <ComparisonDialog pageName=\"Inventory\" />\r\n                                                </div>\r\n                                                <div className='variant-btn-panel'>\r\n                                                    <Button className='variant-btn' onClick={() => {\r\n                                                        onGoToOrder(item.VariantName || \"\", item.ExteriorName || \"\", item.InteriorName || \"\");\r\n                                                    }}>\r\n                                                        <h6>ORDER</h6>\r\n                                                    </Button>\r\n                                                </div>\r\n                                            </div>\r\n                                        </div>\r\n                                    </Col>\r\n                                );\r\n                            })}\r\n                        </Row>\r\n\r\n                        <div className='inventory-join-waitlist-panel'>\r\n                            <div className='inventory-join-waitlist-card'>\r\n                                <div className='join-waitlist-context'>\r\n                                    STILL NOT WHAT YOU'RE LOOKING FOR?\r\n                                </div>\r\n                                <SaveDialog props='inventory' />\r\n                                {/* <div className='variant-btn-panel' style={{ borderRadius: '4px' }}>\r\n                                    <Button className=\"variant-btn\" style={{ marginTop: '0rem' }}\r\n                                        // onClick={() => toJoinWaitlistCheckoutForm()}\r\n                                    >JOIN OUR WAITLIST HERE</Button>\r\n                                </div> */}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                )}\r\n            </div>\r\n\r\n\r\n            <Dialog header={isNil(selectedCountry?.code) || !selectedCountry?.code || selectedCountry?.code == rdEnum.enumCountryCode.NewZealand ? \"SELECT YOUR COUNTRY\" : 'SELECT YOUR LOCATION'}\r\n                className='global-dialog' visible={dialogVisible} position='bottom' draggable={false} resizable={true}\r\n                onHide={() => onHide()}>\r\n                <div className='dropdown-container'>\r\n                    <Dropdown\r\n                        value={selectedCountry}\r\n                        options={countries}\r\n                        onChange={(e) => onCountryChange(e)}\r\n                        className='global-location-dropdown'\r\n                        optionLabel=\"name\"\r\n                        placeholder={ !isNil(countries) && countries.length > 0 ? \"Country\" : \"Loading...\"} \r\n                    />\r\n\r\n                    <Dropdown\r\n                        value={selectedState}\r\n                        options={states}\r\n                        onChange={(e) => onStateChange(e)}\r\n                        className='global-location-dropdown'\r\n                        style={{ display: selectedCountry?.code == rdEnum.enumCountryCode.NewZealand ? 'none' : '' }}\r\n                        optionLabel=\"name\"\r\n                        placeholder=\"State\"\r\n                        disabled={!selectedCountry}\r\n                    />\r\n                </div>\r\n\r\n                <Button className='global-location-btn'\r\n                    onMouseEnter={handleHover}\r\n                    onMouseLeave={handleHover}\r\n                    onClick={() => onSubmit()}\r\n                >\r\n                    <span>SUBMIT</span>\r\n                </Button>\r\n            </Dialog> \r\n\r\n            {/*<Dialog header={\"SELECT YOUR COUNTRY\"}*/}\r\n            {/*    className='global-dialog' visible={dialogVisible} position='bottom' draggable={false} resizable={true}*/}\r\n            {/*    onHide={() => onHide()}>*/}\r\n            {/*    <Row className='temp-location-container'>*/}\r\n            {/*        <Col lg={6} xs={12} className='temp-au-container'>*/}\r\n            {/*            <div className='dropdown-container'>*/}\r\n            {/*                <div className='country-title'>*/}\r\n            {/*                    AUSTRALIA*/}\r\n            {/*                </div>*/}\r\n            {/*                <br/>*/}\r\n            {/*                <div className='reminder-box'>*/}\r\n            {/*                    Please select your state to proceed.*/}\r\n            {/*                </div>*/}\r\n      \r\n            {/*                <Dropdown*/}\r\n            {/*                    value={selectedState}*/}\r\n            {/*                    options={states}*/}\r\n            {/*                    onChange={(e) => onStateChange(e)}*/}\r\n            {/*                    className='global-location-dropdown'*/}\r\n            {/*                    style={{ display: selectedCountry?.code == rdEnum.enumCountryCode.NewZealand ? 'none' : '' }}*/}\r\n            {/*                    optionLabel=\"name\"*/}\r\n            {/*                    placeholder=\"State\"*/}\r\n            {/*                />*/}\r\n            {/*            </div>*/}\r\n\r\n            {/*            <Button className='global-location-btn'*/}\r\n            {/*                onMouseEnter={handleHover}*/}\r\n            {/*                onMouseLeave={handleHover}*/}\r\n            {/*                onClick={() => onSubmit()}*/}\r\n            {/*            >*/}\r\n            {/*                <span >SUBMIT</span>*/}\r\n            {/*            </Button>*/}\r\n            {/*        </Col>*/}\r\n\r\n            {/*        <Col lg={6} xs={12}className='temp-nz-container'>*/}\r\n            {/*            <div className='dropdown-container'>*/}\r\n            {/*                <div className='country-title'>*/}\r\n            {/*                    NEW ZEALAND*/}\r\n            {/*                </div>*/}\r\n            {/*                <div className='coming-soon'>*/}\r\n            {/*                    COMING SOON*/}\r\n            {/*                </div>*/}\r\n            {/*                <br />*/}\r\n            {/*                <div className='new-zealand-info-panel'>*/}\r\n            {/*                    We're busy building an iconic design and build experience for New Zealand customers.*/}\r\n            {/*                </div>*/}\r\n            {/*                <br/>*/}\r\n            {/*                <div className='new-zealand-info-panel'>*/}\r\n            {/*                    We can't wait to welcome you. Be sure to sign up for Cadillac brand, product and order updates below.*/}\r\n            {/*                </div>*/}\r\n            {/*            </div>*/}\r\n\r\n            {/*            <Button className='global-location-btn'*/}\r\n            {/*                // onMouseEnter={handleHover}*/}\r\n            {/*                // onMouseLeave={handleHover}*/}\r\n            {/*                onClick={() => toTestDrive()}*/}\r\n            {/*            >*/}\r\n            {/*                <span >KEEP UPDATED</span>*/}\r\n            {/*            </Button>*/}\r\n            {/*        </Col>*/}\r\n            {/*    </Row>*/}\r\n            {/*</Dialog>*/}\r\n\r\n        </MainLayoutPage>\r\n    );\r\n};\r\n","import * as availableInventoryModel from 'model/IAvailableInventory';\r\n\r\nexport const getAvailableInventoryFilter = (): availableInventoryModel.IAvailableInventoryFilter => {\r\n    let initAvailableInventory: availableInventoryModel.IAvailableInventoryFilter = {\r\n        SelectedVariantsID: [],\r\n        SelectedVariantsName: [],\r\n        SelectedExteriorID: \"\",\r\n        SelectedExteriorName: \"\",\r\n        SelectedInteriorID: \"\",\r\n        SelectedInteriorName: \"\",\r\n    };\r\n\r\n    return initAvailableInventory;\r\n}\r\n\r\n\r\nexport const getAvailableRequest = (): availableInventoryModel.IAvailableInventoryRequest => {\r\n    let initAvailableInventory: availableInventoryModel.IAvailableInventoryRequest = {\r\n        Country: null,\r\n        State: null,\r\n        Postcode: null,\r\n        Suburb: null,\r\n        CustomerType: \"\",\r\n        Variants: [],\r\n        Exteriors: [],\r\n        Interiors: [],\r\n        DeliveryOption: null,\r\n        Distance: null,\r\n        Sort: null,\r\n    };\r\n\r\n    return initAvailableInventory;\r\n}","import WhyCollecting from 'components/WhyCollecting';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { FileUpload } from 'primereact/fileupload';\r\nimport React, { useEffect, useState, useRef } from 'react';\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport { Calendar } from 'primereact/calendar';\r\nimport { InputMask } from 'primereact/inputmask';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport IsNumberVerification from 'components/IsNumberVerification'\r\nimport { enumClientTypes, enumDocumentType } from \"helpers/enum\";\r\nimport { getBackendPath, getCMSAssets } from \"helpers/Uri\";\r\nimport { IAppState } from 'model/IAppState';\r\nimport { ICodeName } from 'model/ICommon';\r\nimport moment from 'moment';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as orderCustomerDetailsHelper from 'businessHelpers/OrderCustomerDetailsHelper';\r\nimport * as docHelper from 'businessHelpers/DocumentHelper';\r\nimport * as orderCustomerDetailsModel from 'model/IOrderCustomerDetails';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as addressModel from 'model/IAddress';\r\nimport * as driverLicenseModel from 'model/IDriverLicense';\r\nimport * as docModel from 'model/IDocuments';\r\nimport * as orderCustomerDetailsStore from 'stores/OrderCustomerDetails';\r\nimport * as orderService from 'services/Order';\r\nimport * as docService from 'services/Document';\r\nimport * as orderDetailPageVersionStore from 'stores/OrderDetailPageDataVersion';\r\nimport { useCountryState } from 'helpers/useCountryState';\r\nimport { Page } from '../../../../Page';\r\n\r\nconst ProvideDetails = (props: any) => {\r\n    const dispatch = useDispatch();\r\n    const countryState = useCountryState();\r\n    const { buttonText } = props;\r\n\r\n    const inputFile = useRef<FileUpload>(null);\r\n    const uploadFile1 = useRef<HTMLInputElement>(null);\r\n    const uploadFile2 = useRef<HTMLInputElement>(null);\r\n\r\n    const detailsRef = useRef<any>(null);\r\n    const businessRef = useRef<any>(null);\r\n    const billingRef = useRef<any>(null);\r\n    const registrationRef = useRef<any>(null);\r\n    const deliveryRef = useRef<any>(null);\r\n\r\n    const driveLicenseFrontRef = useRef<any>(null);\r\n    const driveLicenseBackRef = useRef<any>(null);\r\n\r\n    const orderCustomerDetailsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderCustomerDetails;\r\n    });\r\n    const orderDocumentsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderDocuments;\r\n    });\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n    const [pageState, setPageState] = useState<orderCustomerDetailsModel.IOrderCustomerDetails>(orderCustomerDetailsHelper.getInitDetails());\r\n    const [invaidPageState, setInvaidPageState] = useState<orderCustomerDetailsModel.IInvalidOrderCustomerDetails>(orderCustomerDetailsHelper.getInitInvalidCustomerDetails());\r\n\r\n    const [driveLicenseImages, setDriveLicenseImages] = useState<docModel.IDocumentItem[]>(docHelper.getInitDriveLicenseImages());\r\n    const [states, setStates] = useState<ICodeName[]>([]);\r\n\r\n    const [savingStatus, setSavingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n\r\n    const [submitMessage, setSubmitMessage] = useState(\"\");\r\n    const [submitStatus, setSubmitStatus] = useState<boolean | null>(null);\r\n\r\n    //const [upload1Base64, setUpload1Base64] = useState<any>(null);\r\n    //const [upload2Base64, setUpload2Base64] = useState<any>(null);\r\n\r\n    //const [invalidDriveLicense1Image, setInvalidDriveLicense1Image] = useState<boolean>(false);\r\n    //const [invalidDriveLicense2Image, setInvalidDriveLicense2Image] = useState<boolean>(false);\r\n\r\n    const [invalidABNLength, setInvalidABNLength] = useState(false)\r\n\r\n    const uploadFileMaxSize = 50;\r\n\r\n    useEffect(() => {\r\n        if (!isNil(orderCustomerDetailsFromStore)) {\r\n            setPageState(orderCustomerDetailsFromStore);\r\n        }\r\n    }, [orderCustomerDetailsFromStore]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(orderDocumentsFromStore) && dialogVisible) {\r\n            doGetDoc();\r\n        }\r\n    }, [orderDocumentsFromStore, dialogVisible]);\r\n\r\n    //const fetchBase64FromUrl = async (inputUrl: string) => {\r\n    //    try {\r\n    //        const response = await fetch(inputUrl);\r\n    //        const blob = await response.blob();\r\n\r\n    //        const reader = new FileReader();\r\n    //        reader.onloadend = () => {\r\n    //            if (reader.result) {\r\n    //                console.log(reader.result);\r\n    //                const base64String = reader.result.toString().replace('data:', '').replace(/^.+,/, '');\r\n    //                //console.log(base64String);\r\n    //            }\r\n    //        };\r\n    //        reader.readAsDataURL(blob);\r\n    //    } catch (err) {\r\n    //        //setError('Failed to fetch or convert the URL to Base64');\r\n    //        console.error('Error fetching the image:', err);\r\n    //    }\r\n    //};\r\n\r\n    const doGetDoc = async () => {\r\n        let findFrontDocs = orderDocumentsFromStore.filter((m: docModel.IDocumentItem) => m.DocumentType == enumDocumentType.DriveLicenseFront);\r\n        let findFrontDoc: docModel.IDocumentItem = docHelper.getInitDriveLicenseImage();\r\n        if (!isNil(findFrontDocs) && findFrontDocs.length > 0) {\r\n            findFrontDoc = findFrontDocs[findFrontDocs.length - 1];\r\n        }\r\n\r\n        let findBackDocs = orderDocumentsFromStore.filter((m: docModel.IDocumentItem) => m.DocumentType == enumDocumentType.DriveLicenseBack);\r\n        let findBackDoc: docModel.IDocumentItem = docHelper.getInitDriveLicenseImage();\r\n        if (!isNil(findBackDocs) && findBackDocs.length > 0) {\r\n            findBackDoc = findBackDocs[findBackDocs.length - 1];\r\n        }\r\n\r\n        setDriveLicenseImages([\r\n            findFrontDoc,\r\n            findBackDoc\r\n        ]);\r\n\r\n        //if (!isNil(findDocs) && findDocs.length > 0) {\r\n        //    let requestFrontData: docModel.IDocument = {\r\n        //        YanaCustomerID: orderCustomerDetailsFromStore?.yanaCustomerID || \"\",\r\n        //        YanaCustomerNo: orderCustomerDetailsFromStore?.yanaCustomerNo || \"\",\r\n        //        YanaOrderID: orderCustomerDetailsFromStore?.yanaOrderID || \"\",\r\n        //        YanaOrderNo: orderCustomerDetailsFromStore?.yanaOrderNo || \"\",\r\n        //        Country: orderCustomerDetailsFromStore?.country || \"\",\r\n        //        Documents: [findDocs[findDocs.length - 1]]\r\n        //    };\r\n        //    let response = await docService.getSpecificDocuments(requestFrontData);\r\n        //    if (response.status) {\r\n        //        fileName = response.data[0].reportName;\r\n        //        let downloadUrl = response.data[0].downloadUrl;\r\n\r\n        //    }\r\n        //}\r\n    }\r\n\r\n    const doGetStates = async () => {\r\n        let states = await countryState.getStates(pageState?.country || \"\");\r\n        setStates(states);\r\n    }\r\n\r\n    useEffect(() => {\r\n        doGetStates();\r\n    }, [pageState?.country]);\r\n\r\n    const onBillingStateChange = (e: any) => {\r\n        setPageState({\r\n            ...pageState,\r\n            billingAddress: {\r\n                ...pageState.billingAddress,\r\n                State: e.value,\r\n            }\r\n        });\r\n    }\r\n\r\n    const onRegoStateChange = (e: any) => {\r\n        setPageState({\r\n            ...pageState,\r\n            regoAddress: {\r\n                ...pageState.regoAddress,\r\n                State: e.value,\r\n            }\r\n        });\r\n    }\r\n\r\n    const onDeliveryStateChange = (e: any) => {\r\n        setPageState({\r\n            ...pageState,\r\n            deliveryAddress: {\r\n                ...pageState.deliveryAddress,\r\n                State: e.value,\r\n            }\r\n        });\r\n    }\r\n\r\n    const onShowDialog = () => {\r\n        setDialogVisible(true);\r\n    }\r\n\r\n    const onHideDialog = () => {\r\n        setDialogVisible(false);\r\n    }\r\n\r\n    const isNumberKey = (e: any) => {\r\n        IsNumberVerification(e);\r\n    }\r\n\r\n    const validationInput = (): boolean => {\r\n        let invalidForm = false;\r\n\r\n        let invalidBirthday = false;\r\n        let invalidDriveLicenseNo = false;\r\n        let invalidDrivLicenseExpDate = false;\r\n\r\n        let isInvalid = false;\r\n        let invalidABN = false;\r\n        let invalidABNLength = false;\r\n        let invalidBusiness = false;\r\n        let invalidFirstname = false;\r\n        let invalidLastname = false;\r\n        let invalidEmail = false;\r\n        let invalidPhone1 = false;\r\n\r\n        if (isNil(pageState?.birthday)) {\r\n            invalidBirthday = true;\r\n            invalidForm = true;\r\n        }\r\n        else {\r\n            let validBirthday = moment(pageState?.birthday, \"DD/MM/YYYY\");\r\n            invalidBirthday = !validBirthday.isValid();\r\n            if (invalidBirthday) invalidForm = true;\r\n        }\r\n\r\n        if (isNil(pageState?.driverLicense?.driverLicenseNo) || pageState?.driverLicense?.driverLicenseNo == \"\") {\r\n            invalidDriveLicenseNo = true;\r\n            invalidForm = true;\r\n        }\r\n\r\n        if (isNil(pageState?.driverLicense?.driverLicenseExpiryDate)) {\r\n            invalidDrivLicenseExpDate = true;\r\n            invalidForm = true;\r\n        }\r\n        else {\r\n            let validExpdate = moment(pageState?.driverLicense?.driverLicenseExpiryDate, \"DD/MM/YYYY\");\r\n            invalidDrivLicenseExpDate = !validExpdate.isValid();\r\n            if (invalidDrivLicenseExpDate) invalidForm = true;\r\n        }\r\n\r\n        if (pageState.customerType == enumClientTypes.Business.Code) {\r\n            if (isNil(pageState?.abn) || pageState?.abn == \"\") {\r\n                invalidABN = true;\r\n                invalidForm = true;\r\n            } else {\r\n                if (pageState.country == rdEnum.enumCountryCode.Australia) {\r\n                    if (pageState.abn.length != 11) {\r\n                        invalidABNLength = true;\r\n                        isInvalid = true;\r\n                        invalidForm = true;\r\n                    }\r\n                }\r\n                else if (pageState.country == rdEnum.enumCountryCode.NewZealand) {\r\n                    if (pageState.abn.length != 13) {\r\n                        invalidABNLength = true;\r\n                        isInvalid = true;\r\n                        invalidForm = true;\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (isNil(pageState?.businessName) || pageState?.businessName == \"\") {\r\n                invalidBusiness = true;\r\n                invalidForm = true;\r\n            }\r\n        }\r\n\r\n        if (isNil(pageState?.firstname) || pageState?.firstname == \"\") {\r\n            invalidFirstname = true;\r\n            invalidForm = true;\r\n        }\r\n\r\n        if (isNil(pageState?.lastname) || pageState?.lastname == \"\") {\r\n            invalidLastname = true;\r\n            invalidForm = true;\r\n        }\r\n\r\n        if (isNil(pageState?.email) || pageState?.email == \"\") {\r\n            invalidEmail = true;\r\n            invalidForm = true;\r\n        }\r\n        else {\r\n            invalidEmail = !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(pageState?.email);\r\n            if (invalidEmail) invalidForm = true;\r\n        }\r\n\r\n        if (isNil(pageState?.phone) || pageState?.phone == \"\") {\r\n            invalidPhone1 = true;\r\n            invalidForm = true;\r\n        }\r\n\r\n        let invalidDriveLicenseImage1 = false;\r\n        if (isNil(driveLicenseImages[0].DocumentName) || driveLicenseImages[0].DocumentName == \"\") {\r\n            invalidDriveLicenseImage1 = true;\r\n            invalidForm = true;\r\n        }\r\n\r\n        let invalidDriveLicenseImage2 = false;\r\n        if (isNil(driveLicenseImages[1].DocumentName) || driveLicenseImages[1].DocumentName == \"\") {\r\n            invalidDriveLicenseImage2 = true;\r\n            invalidForm = true;\r\n        }\r\n\r\n        console.log(driveLicenseImages[0].InvalidDocment, driveLicenseImages[1].InvalidDocment);\r\n\r\n        const validateDetails = () => {\r\n            if (invalidBirthday || invalidDriveLicenseNo || invalidDrivLicenseExpDate || invalidDriveLicenseImage1 || invalidDriveLicenseImage2 ) {\r\n                return true; \r\n            }            \r\n        };\r\n\r\n        const validateBusiness = () => {\r\n            if (invalidABN || invalidBusiness || invalidFirstname || invalidLastname || invalidEmail || invalidPhone1 || invalidABNLength) {\r\n                return true; \r\n            }     \r\n        };\r\n    \r\n        // const validateBilling = () => {\r\n         \r\n        //     return true; \r\n        // };\r\n    \r\n        // const validateRegistration = () => {\r\n           \r\n        //     return true; \r\n        // };\r\n    \r\n        // const validateDelivery = () => {\r\n           \r\n        //     return true; \r\n        // };\r\n\r\n        console.log(validateDetails(), validateBusiness())\r\n\r\n        let errorRefs = [];\r\n        \r\n        // Validate each section and collect refs for sections with errors\r\n        if (validateDetails()) errorRefs.push(detailsRef);\r\n        if (validateBusiness()) errorRefs.push(businessRef);\r\n        // if (!validateBilling()) errorRefs.push(billingRef);\r\n        // if (!validateRegistration()) errorRefs.push(registrationRef);\r\n        // if (!validateDelivery()) errorRefs.push(deliveryRef);\r\n        console.log(errorRefs)\r\n        // If there are errors, scroll to the first section with an error\r\n        if (errorRefs.length > 0) {\r\n            errorRefs[0].current.scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n        } else {\r\n            // If no errors, you can proceed with form submission or further actions\r\n            console.log('Form is valid and ready to submit!');\r\n        }\r\n\r\n        setInvaidPageState({\r\n            ...invaidPageState,\r\n            invalidBirthday: invalidBirthday,\r\n            invalidDriverLicense: {\r\n                ...invaidPageState.invalidDriverLicense,\r\n                invalidExpiryDate: invalidDrivLicenseExpDate,\r\n                invalidNo: invalidDriveLicenseNo\r\n            },\r\n            invalidFirstname: invalidFirstname,\r\n            invalidLastname: invalidLastname,\r\n            invalidEmail: invalidEmail,\r\n            invalidPhone: invalidPhone1,\r\n            invalidABN: invalidABN,\r\n            invalidBusinessname: invalidBusiness\r\n        });\r\n\r\n        setInvalidABNLength(invalidABNLength);\r\n\r\n        let updateDoc1 = {\r\n            ...driveLicenseImages[0],\r\n            InvalidDocment: invalidDriveLicenseImage1\r\n        };\r\n        let updateDoc2 = {\r\n            ...driveLicenseImages[1],\r\n            InvalidDocment: invalidDriveLicenseImage2\r\n        };\r\n        setDriveLicenseImages([\r\n            updateDoc1,\r\n            updateDoc2\r\n        ]);\r\n\r\n        if (invalidForm) {\r\n            let dialogContentRef = document.getElementsByClassName(\"p-dialog-content\");   //order-details-dialog \r\n            if (dialogContentRef && dialogContentRef.length > 0) {\r\n                dialogContentRef[0].scrollTo({\r\n                    top: 0,\r\n                    behavior: 'smooth',\r\n                });\r\n            }\r\n        }\r\n\r\n        return invalidForm;\r\n    }\r\n\r\n    const onSaveAndSubmit = async (isSubmit: boolean) => {\r\n        let invalid = validationInput();\r\n        if (invalid) return;\r\n        let updateData = { ...pageState, actionType: isSubmit ? \"Submit\" : \"Save\" };\r\n        setSavingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await orderService.updateOrderDetails(updateData, driveLicenseImages);\r\n        setSavingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            dispatch(orderDetailPageVersionStore.setOrderDetailPageDataVersionAction());\r\n            setSubmitStatus(true);\r\n            setSubmitMessage(\"You have \" + (isSubmit ? \"submitted\" : \"saved\") + \" successfully.\");\r\n        }\r\n        else {\r\n            setSubmitStatus(false);\r\n            setSubmitMessage(response.message);\r\n        }\r\n    }\r\n\r\n    const onBirthdayChange = (e: any) => {\r\n        setPageState({\r\n            ...pageState,\r\n            birthday: e.value\r\n        });\r\n\r\n        setInvaidPageState({\r\n            ...invaidPageState,\r\n            invalidBirthday: isNil(e.value)\r\n        });\r\n    }\r\n\r\n    const onDriveLicenseExpDateChange = (e: any) => {\r\n        setPageState({\r\n            ...pageState,\r\n            driverLicense: {\r\n                ...pageState.driverLicense,\r\n                driverLicenseExpiryDate: e.target.value\r\n            }\r\n        });\r\n\r\n        setInvaidPageState({\r\n            ...invaidPageState,\r\n            invalidDriverLicense: {\r\n                ...invaidPageState.invalidDriverLicense,\r\n                invalidExpiryDate: isNil(e.target.value) || e.target.value == \"\"\r\n            }\r\n        });\r\n    }\r\n\r\n    const onSelect = async (event: any, isFront: boolean) => {\r\n        // convert file to base64 encoded \r\n        const file = event.target.files[0];\r\n\r\n        let invalidFizeSize = false;\r\n        let invalidFileName = false;\r\n\r\n\r\n        let fileSize = file.size;\r\n        if (fileSize > uploadFileMaxSize * 1024 * 1024) {\r\n            invalidFizeSize = true;\r\n        }\r\n\r\n        const allowedExtensions = /(\\.jpg|\\.jpeg|\\.png|\\.gif|\\.pdf)$/i;\r\n        if (file && allowedExtensions.test(file.name)) {\r\n        }\r\n        else {\r\n            invalidFileName = true;\r\n        }\r\n\r\n\r\n        if (invalidFizeSize || invalidFileName) {\r\n            let invalidMessage = \"\";\r\n            if (invalidFileName) {\r\n                invalidMessage = \"Upload file is invalid.\";\r\n            }\r\n            else if (invalidFizeSize) {\r\n                invalidMessage = \"Upload size is invalid\";\r\n            }\r\n           \r\n\r\n            if (isFront) {\r\n                let updateDoc = {\r\n                    ...driveLicenseImages[0],\r\n                    InvalidDocment: true,\r\n                    InvalidReason: invalidMessage,\r\n                };\r\n                setDriveLicenseImages([\r\n                    updateDoc,\r\n                    driveLicenseImages[1]\r\n                ]);\r\n            }\r\n            else {\r\n                let updateDoc = {\r\n                    ...driveLicenseImages[1],\r\n                    InvalidDocment: true,\r\n                    InvalidReason: invalidMessage,\r\n                };\r\n                setDriveLicenseImages([\r\n                    driveLicenseImages[0],\r\n                    updateDoc,\r\n                ]);\r\n            }\r\n            return;\r\n        }\r\n\r\n\r\n        const reader = new FileReader();\r\n        reader.readAsDataURL(file);\r\n        reader.onloadend = function () {\r\n            const base64data = (reader.result)?.toString().split(',')[1];\r\n            //console.log(base64data);\r\n            if (isFront) {\r\n                let updateDoc = {\r\n                    ...driveLicenseImages[0],\r\n                    DocumentName: file.name,\r\n                    DocumentType: rdEnum.enumDocumentType.DriveLicenseFront,\r\n                    Base64: base64data\r\n                };\r\n                setDriveLicenseImages([\r\n                    updateDoc,\r\n                    driveLicenseImages[1]\r\n                ]);\r\n            }\r\n            else {\r\n                let updateDoc = {\r\n                    ...driveLicenseImages[1],\r\n                    DocumentName: file.name,\r\n                    DocumentType: rdEnum.enumDocumentType.DriveLicenseBack,\r\n                    Base64: base64data\r\n                };\r\n                setDriveLicenseImages([\r\n                    driveLicenseImages[0],\r\n                    updateDoc\r\n                ]);\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    const showInvalidFileError = (isFront: boolean) => {\r\n        if (isFront) {\r\n            if (driveLicenseImages[0].InvalidDocment) {\r\n                if (isNil(driveLicenseImages[0].InvalidReason) || driveLicenseImages[0].InvalidReason == \"\") {\r\n                    return (<small id=\"drivelicense-front-image-help\" className=\"p-error block\">Please Upload Driver Licence Front Image</small>);\r\n                }\r\n                else {\r\n                    return (<small id=\"drivelicense-front-image-help\" className=\"p-error block\">{driveLicenseImages[0].InvalidReason}</small>);\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            if (driveLicenseImages[1].InvalidDocment) {\r\n                if (isNil(driveLicenseImages[1].InvalidReason) || driveLicenseImages[1].InvalidReason == \"\") {\r\n                    return (<small id=\"drivelicense-front-image-help\" className=\"p-error block\">Please Upload Driver Licence Front Image</small>);\r\n                }\r\n                else {\r\n                    return (<small id=\"drivelicense-front-image-help\" className=\"p-error block\">{driveLicenseImages[1].InvalidReason}</small>);\r\n                }\r\n            }\r\n        }\r\n        return (<></>);\r\n\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className='pipeline-btn-panel'>\r\n                <Button className='pipeline-btn'\r\n                    onClick={() => onShowDialog()}\r\n                >\r\n                    <h6>{buttonText}</h6>\r\n                </Button>\r\n            </div>\r\n            <Dialog className='order-details-dialog' visible={dialogVisible}\r\n                position='bottom' style={{ maxWidth: '1100px' }}\r\n                draggable={false} resizable={true} onHide={() => onHideDialog()}>\r\n                {/* <div className='order-details-dialog-container'> */}\r\n                    <div className='provide-info-container' ref={detailsRef}>\r\n                        <h3>PROVIDE YOUR DETAILS</h3>\r\n                        <Row>\r\n\r\n                            <Col lg={6} className='provide-info-item' style={{ paddingBottom: '36px' }}>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            {/*<InputText id=\"birthday\"*/}\r\n                                            {/*    aria-describedby=\"birthday-help\"*/}\r\n                                            {/*    placeholder=\"Date of birth: dd/mm/yyyy\"*/}\r\n                                            {/*    value={pageState?.birthday || \"\"}*/}\r\n                                            {/*    maxLength={10}*/}\r\n                                            {/*    onChange={(e: any) => {*/}\r\n                                            {/*        setPageState({*/}\r\n                                            {/*            ...pageState,*/}\r\n                                            {/*            birthday: e.target.value*/}\r\n                                            {/*        });*/}\r\n                                            {/*        setInvaidPageState({*/}\r\n                                            {/*            ...invaidPageState,*/}\r\n                                            {/*            invalidBirthday: isNil(e.target.value) || e.target.value == \"\"*/}\r\n                                            {/*        });*/}\r\n                                            {/*    }}*/}\r\n                                            {/*/>*/}\r\n\r\n                                            <InputMask id=\"birthday\"\r\n                                                aria-describedby=\"birthday-help\"\r\n                                                placeholder=\"Date of birth: dd/mm/yyyy\"\r\n                                                value={pageState?.birthday || \"\"}\r\n                                                mask=\"99/99/9999\"\r\n                                                onChange={(e: any) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        birthday: e.target.value\r\n                                                    });\r\n                                                    setInvaidPageState({\r\n                                                        ...invaidPageState,\r\n                                                        invalidBirthday: isNil(e.target.value) || e.target.value == \"\"\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>Date of birth: dd/mm/yyyy</label>\r\n\r\n                                        </span>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidBirthday && (\r\n                                        <small id=\"birthday-help\" className=\"p-error block\">Require a Valid Date of Birth.</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item' style={{ paddingBottom: '36px' }}>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            {/*nz driver license: xx123456. Version 999*/}\r\n                                            <InputText id=\"driverlicense_no\"\r\n                                                aria-describedby=\"driverlicense_no-help\"\r\n                                                placeholder=\"Driver Licence Number\"\r\n                                                value={pageState?.driverLicense?.driverLicenseNo || \"\"}\r\n                                                maxLength={pageState?.country == rdEnum.enumCountryCode.Australia ? 9 : 22}\r\n                                                keyfilter={pageState?.country == rdEnum.enumCountryCode.Australia ? \"int\" : \"alphanum\"}\r\n                                                onChange={(e: any) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        driverLicense: {\r\n                                                            ...pageState.driverLicense,\r\n                                                            driverLicenseNo: e.target.value\r\n                                                        }\r\n                                                    });\r\n                                                    setInvaidPageState({\r\n                                                        ...invaidPageState,\r\n                                                        invalidDriverLicense: {\r\n                                                            ...invaidPageState.invalidDriverLicense,\r\n                                                            invalidNo: isNil(e.target.value) || e.target.value == \"\"\r\n                                                        }\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>Driver Licence Number</label>\r\n                                        </span>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidDriverLicense?.invalidNo && (\r\n                                        <small id=\"driverlicense_no-help\" className=\"p-error block\">Require Valid Driver Licence No</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n\r\n                            <Col lg={6} className='provide-info-item' style={{ paddingBottom: '36px' }}>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            {/*<InputText id=\"driveLicenseExpDate\"*/}\r\n                                            {/*    aria-describedby=\"driveLicenseExpDate-help\"*/}\r\n                                            {/*    placeholder=\"Driver's Licence Expiry Date: dd/mm/yyyy\"*/}\r\n                                            {/*    maxLength={10}*/}\r\n                                            {/*    value={pageState?.driverLicense?.driverLicenseExpiryDate || \"\"}*/}\r\n                                            {/*    onChange={(e: any) => {*/}\r\n                                            {/*        onDriveLicenseExpDateChange(e);*/}\r\n                                            {/*    }}*/}\r\n                                            {/*/>*/}\r\n\r\n                                            <InputMask id=\"driveLicenseExpDate\"\r\n                                                aria-describedby=\"driveLicenseExpDate-help\"\r\n                                                placeholder=\"Driver's Licence Expiry Date: dd/mm/yyyy\"\r\n                                                mask=\"99/99/9999\"\r\n                                                value={pageState?.driverLicense?.driverLicenseExpiryDate || \"\"}\r\n                                                onChange={(e: any) => {\r\n                                                    onDriveLicenseExpDateChange(e);\r\n                                                }}\r\n                                            />\r\n\r\n                                            <label>Driver's Licence Expiry Date: dd/mm/yyyy</label>\r\n                                        </span>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidDriverLicense?.invalidExpiryDate && (\r\n                                        <small id=\"driveLicenseExpDate-help\" className=\"p-error block\">Require a valid expiry date of Driver Licence.</small>\r\n                                    )}\r\n                                    {/* <WhyCollecting />*/}\r\n                                </div>\r\n                            </Col>\r\n                        </Row>\r\n                        <Row>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item' onClick={() => {\r\n                                        if (uploadFile1.current != null) {\r\n                                            uploadFile1?.current?.click();\r\n                                        }\r\n                                        driveLicenseFrontRef?.current?.focus();\r\n                                    }}>\r\n                                        <span className=\"wrapper-box\">\r\n                                            {!isNil(driveLicenseImages) && driveLicenseImages.length > 0 && (\r\n                                                <InputText id=\"driveLicenseFrontImage\"\r\n                                                    className=\"uplad-file-input\"\r\n                                                    aria-describedby=\"driveLicenseFrontImage-help\"\r\n                                                    placeholder=\"Driver's Licence Upload (Front)\"\r\n                                                    value={driveLicenseImages[0].DocumentName}\r\n                                                    ref={driveLicenseFrontRef}\r\n                                                />\r\n                                            )}\r\n                                            <label htmlFor=\"driveLicenseFrontImage\">Front Driver's Licence Upload</label>\r\n                                            <img alt=\"\" className='upload-icon' src={`${getCMSAssets()}/order/upload.svg`} />\r\n                                        </span>\r\n                                        <input type=\"file\" className=\"upload-file-wrapper\"\r\n                                            accept=\".jpg, .jpeg, .png, .gif, .pdf\"\r\n                                            ref={uploadFile1}\r\n                                            onChange={(e: any) => {\r\n                                                onSelect(e, true);\r\n                                            }}\r\n                                        />\r\n                                        {showInvalidFileError(true)}\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item' onClick={() => {\r\n                                        if (uploadFile2.current != null) {\r\n                                            uploadFile2?.current?.click();\r\n                                        }\r\n                                        driveLicenseBackRef?.current?.focus();\r\n                                    }}>\r\n                                        <span className=\"wrapper-box\">\r\n                                            {!isNil(driveLicenseImages) && driveLicenseImages.length > 1 && (\r\n                                                <InputText id=\"driveLicenseBackImage\"\r\n                                                    className=\"uplad-file-input\"\r\n                                                    aria-describedby=\"driveLicenseBackImage-help\"\r\n                                                    placeholder=\"Driver's Licence Upload (Rear)\"\r\n                                                    value={driveLicenseImages[1].DocumentName}\r\n                                                    ref={driveLicenseBackRef}\r\n                                                />\r\n                                            )}\r\n                                            <label htmlFor=\"driveLicenseBackImage\">Rear Driver's Licence Upload</label>\r\n                                            <img alt=\"\" className='upload-icon' src={`${getCMSAssets()}/order/upload.svg`} />\r\n                                        </span>\r\n                                        <input type=\"file\" className=\"upload-file-wrapper\"\r\n                                            accept=\".jpg, .jpeg, .png, .pdf\"\r\n                                            ref={uploadFile2}\r\n                                            onChange={(e: any) => {\r\n                                                onSelect(e, false);\r\n                                            }}\r\n                                        />\r\n                                        {showInvalidFileError(false)}\r\n                                        {/*{driveLicenseImages[1].InvalidDocment && (*/}\r\n                                        {/*    <small id=\"drivelicense-front-image-help\" className=\"p-error block\">Please Upload Driver License Back Image</small>*/}\r\n                                        {/*)}*/}\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                        </Row>\r\n                    </div>\r\n\r\n                    <div className='personal-info-container' ref={businessRef}>\r\n                        <h3>{pageState.customerType == enumClientTypes.Business.Code ? \"BUSINESS\" : \"PERSONAL\"} INFORMATION</h3>\r\n                        <Row>\r\n                            {pageState.customerType == enumClientTypes.Business.Code && (\r\n                                <React.Fragment>\r\n                                    <Col lg={6} className='provide-info-item'>\r\n                                        <div className='provide-info-inner'>\r\n                                            <div className='input-item'>\r\n                                                <span className=\"wrapper-box\">\r\n                                                    <InputText id=\"business-name\" aria-describedby=\"business-name-help\"\r\n                                                        placeholder=\"Business Name\"\r\n                                                        value={pageState.businessName}\r\n                                                        onChange={(e) => {\r\n                                                            setPageState({\r\n                                                                ...pageState,\r\n                                                                businessName: e.target.value,\r\n                                                            });\r\n\r\n                                                            setInvaidPageState({\r\n                                                                ...invaidPageState,\r\n                                                                invalidBusinessname: isNil(e.target.value) || e.target.value == \"\"\r\n                                                            });\r\n                                                        }}\r\n                                                    />\r\n                                                    <label>Business Name</label>\r\n                                                </span>\r\n                                            </div>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidBusinessname && (\r\n                                        <small id=\"business-name-help\" className=\"p-error block\">Require Valid Business name</small>\r\n                                    )}\r\n                                    </Col>\r\n                                    <Col lg={6} className='provide-info-item'>\r\n                                        <div className='provide-info-inner'>\r\n                                            <div className='input-item'>\r\n                                                <span className=\"wrapper-box\">\r\n                                                    <InputText id=\"abn\" aria-describedby=\"abn-help\"\r\n                                                        placeholder=\"ABN\"\r\n                                                        value={pageState.abn}\r\n                                                        onChange={(e) => {\r\n                                                            setPageState({\r\n                                                                ...pageState,\r\n                                                                abn: e.target.value\r\n                                                            });\r\n\r\n                                                            setInvaidPageState({\r\n                                                                ...invaidPageState,\r\n                                                                invalidABN: isNil(e.target.value) || e.target.value == \"\"\r\n                                                            });\r\n\r\n                                                            setInvalidABNLength(false)\r\n                                                        }}\r\n                                                    />\r\n                                                    {\r\n                                                        orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                                            ?\r\n                                                            <label>ABN</label>\r\n                                                            :\r\n                                                            <label>NZBN</label>\r\n                                                    }\r\n                                                </span>\r\n                                            </div>\r\n                                            {invaidPageState?.invalidABN && (\r\n                                                <small id=\"abn-help\" className=\"p-error block\">\r\n                                                    {/* Require Valid {orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia ? \"ABN\" :\"NZBN\"} */}\r\n                                                    Require valid\r\n                                                    {\r\n                                                        orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                                            ?\r\n                                                            <span>ABN</span>\r\n                                                            :\r\n                                                            <span>NZBN</span>\r\n                                                    } code\r\n                                                </small>\r\n                                            )}\r\n                                            {invalidABNLength && (\r\n                                                <small id=\"abn-help\" className=\"p-error block\">\r\n                                                    {/* Require Valid {orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia ? \"ABN\" :\"NZBN\"} */}\r\n                                                    {\r\n                                                        orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                                            ?\r\n                                                            <span>ABN</span>\r\n                                                            :\r\n                                                            <span>NZBN</span>\r\n                                                    }\r\n                                                    &nbsp;length should be {orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia ? 11 : 13} digits.\r\n                                                </small>\r\n                                            )}\r\n                                        </div>\r\n                                    </Col>\r\n                                </React.Fragment>\r\n                            )}\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"firstname\" aria-describedby=\"firstname-help\"\r\n                                                className={classNames({ \"p-invalid\": invaidPageState?.invalidFirstname })}\r\n                                                placeholder=\" \"\r\n                                                style={{ borderBottom: invaidPageState?.invalidFirstname ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                value={pageState.firstname}\r\n                                                onChange={(e) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        firstname: e.target.value,\r\n                                                    });\r\n\r\n                                                    setInvaidPageState({\r\n                                                        ...invaidPageState,\r\n                                                        invalidFirstname: isNil(e.target.value) || e.target.value == \"\"\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>First Name *</label>\r\n                                        </span>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidFirstname && (\r\n                                        <small id=\"fristname-help\" className=\"p-error block\">Require Valid First Name</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"middlename\" aria-describedby=\"middlename-help\"\r\n                                                placeholder=\" \"\r\n                                                value={pageState.middlename}\r\n                                                onChange={(e) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        middlename: e.target.value,\r\n                                                    })\r\n                                                }}\r\n                                            />\r\n                                            <label>Middle Name(Optional)</label>\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    {/* <p className='collect-title'>Last Name</p> */}\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"lastname\" aria-describedby=\"lastname-help\"\r\n                                                className={classNames({ \"p-invalid\": invaidPageState?.invalidLastname })}\r\n                                                placeholder=\" \"\r\n                                                value={pageState.lastname}\r\n                                                style={{ borderBottom: invaidPageState?.invalidLastname ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                onChange={(e) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        lastname: e.target.value,\r\n                                                    });\r\n\r\n                                                    setInvaidPageState({\r\n                                                        ...invaidPageState,\r\n                                                        invalidLastname: isNil(e.target.value) || e.target.value == \"\"\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>Last Name *</label>\r\n                                        </span>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidLastname && (\r\n                                        <small id=\"lastname-help\" className=\"p-error block\">Require Valid Last Name</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                                className={classNames({ \"p-invalid\": invaidPageState?.invalidEmail })}\r\n                                                placeholder=\" \"\r\n                                                value={pageState.email}\r\n                                                style={{ borderBottom: invaidPageState?.invalidEmail ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                onChange={(e) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        email: e.target.value,\r\n\r\n                                                    })\r\n\r\n                                                    setInvaidPageState({\r\n                                                        ...invaidPageState,\r\n                                                        invalidEmail: isNil(e.target.value) || e.target.value == \"\"\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>Email Address *</label>\r\n                                        </span>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidEmail && (\r\n                                        <small id=\"email-help\" className=\"p-error block\">Require Valid Email</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"phone\" aria-describedby=\"phone-help\"\r\n                                                className={classNames({ \"p-invalid\": invaidPageState?.invalidPhone })}\r\n                                                placeholder=\" \"\r\n                                                value={pageState?.phone || ''}\r\n                                                style={{ borderBottom: invaidPageState?.invalidPhone ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                onKeyPress={(e: any) => isNumberKey(e)}\r\n                                                onInput={(event: any) => {\r\n                                                    let phone = event.target.value.slice(0, 11);\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        phone: phone,\r\n                                                    });\r\n\r\n                                                    setInvaidPageState({\r\n                                                        ...invaidPageState,\r\n                                                        invalidPhone: isNil(event.target.value) || event.target.value == \"\"\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>Phone Number *</label>\r\n                                        </span>\r\n                                    </div>\r\n                                    {invaidPageState?.invalidPhone && (\r\n                                        <small id=\"lastname-help\" className=\"p-error block\">Require Valid Phone Number</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"secondaryPhone\" aria-describedby=\"secondaryPhone-help\"\r\n                                                className={classNames({ \"p-invalid\": invaidPageState?.invalidSecondaryPhone })}\r\n                                                placeholder=\" \"\r\n                                                value={pageState?.secondaryPhone || ''}\r\n                                                style={{ borderBottom: invaidPageState?.invalidSecondaryPhone ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                onKeyPress={(e: any) => isNumberKey(e)}\r\n                                                onInput={(event: any) => {\r\n                                                    let secondaryPhone = event.target.value.slice(0, 11);\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        secondaryPhone: secondaryPhone,\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>Secondary Phone Number</label>\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                        </Row>\r\n                    </div>\r\n\r\n                    <div className='provide-address-container' ref={billingRef}>\r\n                        <h3>BILLING ADDRESS</h3>\r\n                        <Row>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"billing-suburb\" aria-describedby=\"billing-suburb-help\"\r\n                                                placeholder=\"Suburb\"\r\n                                                value={pageState.billingAddress?.Address1}\r\n                                                disabled={true}\r\n                                                onChange={(e) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        billingAddress: {\r\n                                                            ...pageState.billingAddress,\r\n                                                            Address1: e.target.value,\r\n                                                        }\r\n                                                    })\r\n                                                }}\r\n                                            />\r\n                                            <label>Address</label>\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"billing-suburb\" aria-describedby=\"billing-suburb-help\"\r\n                                                placeholder=\"Suburb\"\r\n                                                value={pageState.billingAddress?.Suburb}\r\n                                                disabled={true}\r\n                                                onChange={(e) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        billingAddress: {\r\n                                                            ...pageState.billingAddress,\r\n                                                            Suburb: e.target.value,\r\n                                                        }\r\n                                                    })\r\n                                                }}\r\n                                            />\r\n                                            <label>Suburb</label>\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                            {\r\n                                 orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                 ?\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"billing-suburb\" aria-describedby=\"billing-suburb-help\"\r\n                                                    placeholder=\"Suburb\"\r\n                                                    value={pageState.billingAddress?.State?.code}\r\n                                                    disabled={true}\r\n\r\n                                                />\r\n                                                <label>State</label>\r\n                                                {/*onChange={(e) => {*/}\r\n                                                {/*    setPageState({*/}\r\n                                                {/*        ...pageState,*/}\r\n                                                {/*        billingAddress: {*/}\r\n                                                {/*            ...pageState.billingAddress,*/}\r\n                                                {/*            State: e.target.value,*/}\r\n                                                {/*        }*/}\r\n                                                {/*    })*/}\r\n                                                {/*}}*/}\r\n                                                {/*<Dropdown*/}\r\n                                                {/*    value={pageState.billingAddress?.State}*/}\r\n                                                {/*    options={states}*/}\r\n                                                {/*    disabled={true}*/}\r\n                                                {/*    onChange={(e) => onBillingStateChange(e)}*/}\r\n                                                {/*    className='global-location-dropdown'*/}\r\n                                                {/*    optionLabel=\"name\"*/}\r\n                                                {/*    placeholder=\"State*\"*/}\r\n                                                {/*/>*/}\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                                :\r\n                                <></>\r\n                            }\r\n                            <Col lg={6} className='provide-info-item'>\r\n                                <div className='provide-info-inner'>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"billing-postcode\" aria-describedby=\"billing-postcode-help\"\r\n                                                placeholder=\"Post Code\"\r\n                                                value={pageState.billingAddress?.Postcode || ''}\r\n                                                style={{ borderBottom: invaidPageState.invalidBillingAddress.InvalidPostcode ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                onKeyPress={(e: any) => isNumberKey(e)}\r\n                                                disabled={true}\r\n                                                onInput={(event: any) => {\r\n                                                    let postcode = event.target.value.slice(0, 4);\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        billingAddress: {\r\n                                                            ...pageState.billingAddress,\r\n                                                            Postcode: event.target.value\r\n                                                        }\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>Post Code</label>\r\n                                        </span>\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                        </Row>\r\n\r\n                        <div className='registration-address-container' ref={registrationRef}>\r\n                            <h3>REGISTRATION ADDRESS</h3>\r\n                            <Row>\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"rego-address1\" aria-describedby=\"rego-address1-help\"\r\n                                                    placeholder=\"Address Line 1\"\r\n                                                    value={pageState.regoAddress?.Address1}\r\n                                                    disabled={true}\r\n                                                    onChange={(e) => {\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            regoAddress: {\r\n                                                                ...pageState.regoAddress,\r\n                                                                Address1: e.target.value\r\n                                                            }\r\n                                                        })\r\n                                                    }}\r\n                                                />\r\n                                                {\r\n                                                    orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                                    ?\r\n                                                    <label>Address Line 1</label>\r\n                                                    :\r\n                                                    <label>Address</label>\r\n                                                }\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"rego-suburb\" aria-describedby=\"rego-suburb-help\"\r\n                                                    placeholder=\"Suburb\"\r\n                                                    value={pageState.regoAddress?.Suburb}\r\n                                                    disabled={true}\r\n                                                    onChange={(e) => {\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            regoAddress: {\r\n                                                                ...pageState.regoAddress,\r\n                                                                Suburb: e.target.value\r\n                                                            }\r\n                                                        })\r\n                                                    }}\r\n                                                />\r\n                                                <label>Suburb</label>\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                                {\r\n\r\n                                    <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"rego-suburb\" aria-describedby=\"rego-suburb-help\"\r\n                                                    placeholder=\"Suburb\"\r\n                                                    value={pageState.regoAddress.State?.code}\r\n                                                    disabled={true}\r\n                                                    onChange={(e) => {\r\n                                                        //setPageState({\r\n                                                        //    ...pageState,\r\n                                                        //    regoAddress: {\r\n                                                        //        ...pageState.regoAddress,\r\n                                                        //        State: e.target.value\r\n                                                        //    }\r\n                                                        //})\r\n                                                    }}\r\n                                                />\r\n                                                {\r\n                                                    orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                                    ?\r\n                                                    <label>State</label>\r\n                                                    :\r\n                                                    <label>City or Region</label>\r\n                                                }\r\n                                                {/*<Dropdown*/}\r\n                                                {/*    disabled={true}*/}\r\n                                                {/*    value={pageState.regoAddress?.State}*/}\r\n                                                {/*    options={states}*/}\r\n                                                {/*    onChange={(e) => onRegoStateChange(e)}*/}\r\n                                                {/*    className='global-location-dropdown'*/}\r\n                                                {/*    optionLabel=\"name\"*/}\r\n                                                {/*    placeholder=\"State*\"*/}\r\n                                                {/*/>*/}\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                    </Col>\r\n                                }\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"rego-postcode\" aria-describedby=\"rego-postcode-help\"\r\n                                                    placeholder=\"Post Code\"\r\n                                                    disabled={true}\r\n                                                    value={pageState.regoAddress?.Postcode || ''}\r\n                                                    style={{ borderBottom: invaidPageState.invalidRegoAddress.InvalidPostcode ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                    onKeyPress={(e: any) => isNumberKey(e)}\r\n                                                    onInput={(event: any) => {\r\n                                                        let primaryPostcode = event.target.value.slice(0, 4);\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            regoAddress: {\r\n                                                                ...pageState.regoAddress,\r\n                                                                Postcode: event.target.value\r\n                                                            }\r\n                                                        });\r\n                                                        //invalidPrimaryPostcode: isNil(event.target.value) || event.target.value == \"\"\r\n                                                    }}\r\n                                                />\r\n                                                <label>Post Code</label>\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                            </Row>\r\n                        </div>\r\n\r\n                        <div className='delivery-address-container' ref={deliveryRef}>                          \r\n                            <h3>DELIVERY ADDRESS</h3>\r\n                            <Row>\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"delivery-address1\" aria-describedby=\"delivery-address1-help\"\r\n                                                    placeholder=\"Address Line 1\"\r\n                                                    value={pageState.deliveryAddress?.Address1}\r\n                                                    disabled={true}\r\n                                                    onChange={(e) => {\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            deliveryAddress: {\r\n                                                                ...pageState.deliveryAddress,\r\n                                                                Address1: e.target.value\r\n                                                            }\r\n                                                        })\r\n                                                    }}\r\n                                                />\r\n                                                {\r\n                                                    orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                                    ?\r\n                                                    <label>Address Line 1</label>\r\n                                                    :\r\n                                                    <label>Address</label>\r\n                                                }\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"delivery-suburb\" aria-describedby=\"delivery-suburb-help\"\r\n                                                    placeholder=\"Suburb\"\r\n                                                    value={pageState.deliveryAddress?.Suburb}\r\n                                                    disabled={true}\r\n                                                    onChange={(e) => {\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            deliveryAddress: {\r\n                                                                ...pageState.deliveryAddress,\r\n                                                                Suburb: e.target.value\r\n                                                            }\r\n                                                        })\r\n                                                    }}\r\n                                                />\r\n                                                <label>Suburb</label>\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"rego-suburb\" aria-describedby=\"rego-suburb-help\"\r\n                                                    placeholder=\"Suburb\"\r\n                                                    value={pageState.deliveryAddress.State?.code}\r\n                                                    disabled={true}\r\n                                                />\r\n                                                {\r\n                                                    orderCustomerDetailsFromStore?.country == rdEnum.enumCountryCode.Australia\r\n                                                    ?\r\n                                                    <label>State</label>\r\n                                                    :\r\n                                                    <label>City or Region</label>\r\n                                                }\r\n                                                {/*<Dropdown*/}\r\n                                                {/*    disabled={true}*/}\r\n                                                {/*    value={pageState.deliveryAddress?.State}*/}\r\n                                                {/*    options={states}*/}\r\n                                                {/*    onChange={(e) => onDeliveryStateChange(e)}*/}\r\n                                                {/*    className='global-location-dropdown'*/}\r\n                                                {/*    optionLabel=\"name\"*/}\r\n                                                {/*    placeholder=\"State*\"*/}\r\n                                                {/*/>*/}\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                                <Col lg={6} className='provide-info-item'>\r\n                                    <div className='provide-info-inner'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"rego-postcode\" aria-describedby=\"rego-postcode-help\"\r\n                                                    placeholder=\"Post Code\"\r\n                                                    disabled={true}\r\n                                                    value={pageState.deliveryAddress?.Postcode || ''}\r\n                                                    style={{ borderBottom: invaidPageState.invalidDeliveryAddress.InvalidPostcode ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                    onKeyPress={(e: any) => isNumberKey(e)}\r\n                                                    onInput={(event: any) => {\r\n                                                        let primaryPostcode = event.target.value.slice(0, 4);\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            deliveryAddress: {\r\n                                                                ...pageState.deliveryAddress,\r\n                                                                Postcode: event.target.value\r\n                                                            }\r\n                                                        });\r\n                                                        //invalidPrimaryPostcode: isNil(event.target.value) || event.target.value == \"\"\r\n                                                    }}\r\n                                                />\r\n                                                <label>Post Code</label>\r\n                                            </span>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                            </Row>\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className='btn-panel'>\r\n                        <div className='variant-btn-panel'>\r\n\r\n                            {savingStatus == rdEnum.enumProcessingStatus.Processing && (\r\n                                <React.Fragment>\r\n                                    {/*<Button className='variant-btn'*/}\r\n                                    {/*    style={{ marginRight: '1rem', border: '2px #060606 solid' }}>*/}\r\n                                    {/*    <ProgressSpinner*/}\r\n                                    {/*        style={{ width: '16px', height: '16px' }}*/}\r\n                                    {/*        strokeWidth=\"5\"*/}\r\n                                    {/*        animationDuration=\".8s\"*/}\r\n                                    {/*    />*/}\r\n                                    {/*</Button>*/}\r\n                                    <Button className='variant-btn btnSubmitProvideDetails'>\r\n                                        <ProgressSpinner\r\n                                            style={{ width: '16px', height: '16px' }}\r\n                                            strokeWidth=\"5\"\r\n                                            animationDuration=\".8s\"\r\n                                        />\r\n                                    </Button>\r\n                                </React.Fragment>\r\n                            )}\r\n                            {savingStatus != rdEnum.enumProcessingStatus.Processing && (\r\n                                <React.Fragment>\r\n                                {/*<Button className='variant-btn'*/}\r\n                                {/*    style={{ marginRight: '1rem', border: '2px #060606 solid', display: \"none\" }}*/}\r\n                                {/*        onClick={(e: any) => {*/}\r\n                                {/*            onSaveAndSubmit(false);*/}\r\n                                {/*        }}*/}\r\n                                {/*    >*/}\r\n                                {/*        <span>SAVE</span>*/}\r\n                                {/*    </Button>*/}\r\n                                    <Button className='variant-btn btnSubmitProvideDetails'\r\n                                        onClick={(e: any) => {\r\n                                            onSaveAndSubmit(true);\r\n                                        }}\r\n                                    >\r\n                                        <span style={{ color: 'white' }}>SUBMIT</span>\r\n                                    </Button>\r\n                                </React.Fragment>\r\n                            )}\r\n                        </div>\r\n                    </div>\r\n\r\n\r\n                    <div className={classNames({\r\n                        \"provide-details-message\": true,\r\n                        \"text-error\": !submitStatus,\r\n                        \"text-success\": submitStatus\r\n                    })}>\r\n                        <div>{submitMessage}</div>\r\n                    </div>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ProvideDetails","import * as orderCustomerDetailsModel from 'model/IOrderCustomerDetails';\r\nimport * as driverLicenseModel from 'model/IDriverLicense';\r\nimport * as addressHelper from 'businessHelpers/AddressHelper';\r\nimport * as driverLicenseHelper from 'businessHelpers/DriverLicenseHelper';\r\n\r\nexport const getInitDetails = (): orderCustomerDetailsModel.IOrderCustomerDetails => {\r\n    let initAddress: orderCustomerDetailsModel.IOrderCustomerDetails = {\r\n        country: \"\",\r\n        birthday: \"\" ,// undefined,\r\n        //birthdayFormat: \"\",\r\n        driverLicense: driverLicenseHelper.getInitDriverLicense(),\r\n        customerType: \"\",\r\n        firstname: \"\",\r\n        middlename: \"\",\r\n        lastname: \"\",\r\n        email: \"\",\r\n        phone: \"\",\r\n        secondaryPhone: \"\",\r\n        abn: \"\",\r\n        businessName: \"\",\r\n        billingAddress: addressHelper.getInitAddress(),\r\n        regoAddress: addressHelper.getInitAddress(),\r\n        deliveryAddress: addressHelper.getInitAddress(),\r\n        paymentOption: \"\",\r\n        yanaCustomerID: \"\",\r\n        yanaCustomerNo: \"\",\r\n        yanaOrderID: \"\",\r\n        yanaOrderNo: \"\",\r\n        actionType: \"\"\r\n    };\r\n\r\n    return initAddress;\r\n}\r\n\r\nexport const getInitInvalidCustomerDetails = (): orderCustomerDetailsModel.IInvalidOrderCustomerDetails => {\r\n    let init: orderCustomerDetailsModel.IInvalidOrderCustomerDetails = {\r\n        invalidBirthday: null,\r\n        invalidBusinessname: null,\r\n        invalidABN: null,\r\n        invalidFirstname: null,\r\n        invalidLastname: null,\r\n        invalidEmail: null,\r\n        invalidPhone: null,\r\n        invalidSecondaryPhone: null,\r\n        invalidDriverLicense: driverLicenseHelper.getInitInvalidDriverLicense(),\r\n        invalidBillingAddress: addressHelper.getInitInvalidAddress(),\r\n        invalidRegoAddress: addressHelper.getInitInvalidAddress(),\r\n        invalidDeliveryAddress: addressHelper.getInitInvalidAddress(),\r\n    };\r\n\r\n    return init;\r\n}","import * as driverLicenseModel from 'model/IDriverLicense';\r\n\r\nexport const getInitDriverLicense = (): driverLicenseModel.IDriverLicense => {\r\n    let init: driverLicenseModel.IDriverLicense = {\r\n        driverLicenseNo: \"\",\r\n        driverLicenseExpiryDate: \"\", //undefined,\r\n        //driverLicenseExpiryDateFormat: \"\",\r\n        //driverLicenseUploadDoc1YanaID: null,\r\n        //driverLicenseUploadDoc1YanaNo: null,\r\n        //driverLicenseUploadDoc2YanaID: null,\r\n        //driverLicenseUploadDoc2YanaNo: null,\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\nexport const getInitInvalidDriverLicense = (): driverLicenseModel.IInvalidDriverLicense => {\r\n    let init: driverLicenseModel.IInvalidDriverLicense = {\r\n        invalidNo: null,\r\n        invalidExpiryDate: null,\r\n        invalidUploadDoc1: null,\r\n        invalidUploadDoc2: null,\r\n    };\r\n\r\n    return init;\r\n}","import { IAddress, IInvalidAddress } from 'model/IAddress';\r\n\r\n\r\nexport const getInitAddress = (): IAddress => {\r\n    let initAddress: IAddress = {\r\n        Address1: \"\",\r\n        Address2: \"\",\r\n        Suburb: \"\",\r\n        State: null,\r\n        Postcode: \"\",\r\n    };\r\n\r\n    return initAddress;\r\n}\r\n\r\nexport const getInitInvalidAddress = (): IInvalidAddress => {\r\n    let initAddress: IInvalidAddress = {\r\n        InvalidAddress1: null,\r\n        InvalidAddress2: null,\r\n        InvalidSuburb:  null,\r\n        InvalidState:  null,\r\n        InvalidPostcode:  null,\r\n    };\r\n\r\n    return initAddress;\r\n}","import { enumDocumentType } from \"helpers/enum\";\r\n\r\nimport * as docModel from 'model/IDocuments';\r\n\r\n\r\nexport const getInitDriveLicenseImage = (): docModel.IDocumentItem => {\r\n    let init: docModel.IDocumentItem = {\r\n        DocumentName: \"\",\r\n        DocumentType: \"\",\r\n        Base64: null,\r\n        InvalidDocment: false,\r\n        DocumentKey: null,\r\n        DocumentUrl: null,\r\n        DocumentDownloadUrl: null,\r\n        InvalidReason: null\r\n    };\r\n    return init;\r\n}\r\n\r\nexport const getInitDriveLicenseImages = (): docModel.IDocumentItem[] => {\r\n    let init: docModel.IDocumentItem[] = [{\r\n        DocumentName: \"\",\r\n        DocumentType: enumDocumentType.DriveLicenseFront,\r\n        Base64: null,\r\n        InvalidDocment: false,\r\n        InvalidReason: null,\r\n        DocumentKey: null,\r\n        DocumentUrl: null,\r\n        DocumentDownloadUrl: null,\r\n    },\r\n    {\r\n        DocumentName: \"\",\r\n        DocumentType: enumDocumentType.DriveLicenseBack,\r\n        Base64: null,\r\n        InvalidDocment: false,\r\n        InvalidReason: null,\r\n        DocumentKey: null,\r\n        DocumentUrl: null,\r\n        DocumentDownloadUrl: null,\r\n    }\r\n    ];\r\n    return init;\r\n}","import { Dialog } from 'primereact/dialog';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { enumCountryCode, enumDeliveryOptions } from 'helpers/enum';\r\nimport * as Uri from 'helpers/Uri';\r\nimport { isNil } from 'lodash';\r\nimport moment from 'moment';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as bankInfoModel from 'model/IBankInfo';\r\n\r\nconst ArrangePayment = (props: any) => {\r\n\r\n    const orderDetailsFromStore: orderModel.IOrderRequest | null = useSelector((state: IAppState) => {\r\n        return state?.orderDetails;\r\n    });\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n    const { buttonText } = props;\r\n\r\n    const onShowDialog = () => {\r\n        setDialogVisible(true);\r\n    }\r\n\r\n    const onHideDialog = () => {\r\n        setDialogVisible(false);\r\n    }\r\n\r\n\r\n    const [bankDetails, setBankDetails] = useState<bankInfoModel.IBankInfo>(rdEnum.enumAuBank);\r\n\r\n    useEffect(() => {\r\n        if (orderDetailsFromStore?.Country === rdEnum.enumCountryCode.NewZealand) {\r\n            setBankDetails(rdEnum.enumNZBank);\r\n        }\r\n        else {\r\n            setBankDetails(rdEnum.enumAuBank);\r\n        }\r\n    }, [orderDetailsFromStore?.Country]);\r\n\r\n\r\n    var currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n    const showPrice = (price: number | null | undefined) => {\r\n        if (price != null) {\r\n            return currencyFormatter.format(price);\r\n        }\r\n        return '';\r\n    }\r\n\r\n\r\n    return (\r\n        <>\r\n            <div className='pipeline-btn-panel'>\r\n                <Button className='pipeline-btn'\r\n                    onClick={() => onShowDialog()}\r\n                >\r\n                    {buttonText}\r\n                </Button>\r\n            </div>\r\n\r\n            <Dialog className='order-details-dialog arrange-payment-dialog' visible={dialogVisible} position='bottom'\r\n                style={{ maxWidth: '1100px' }} draggable={false} resizable={true} onHide={() => onHideDialog()}>\r\n                <div className='arrange-payment-dialog-container'>\r\n                <Row>\r\n                    <Col className=\"container-title\">ARRANGE PAYMENT</Col>\r\n                </Row>\r\n                <Row>\r\n                    <Col className=\"container-desc desc1\">HOW DO I PAY FOR MY CADILLAC?</Col>\r\n                </Row>\r\n                <Row>\r\n                    <Col className=\"container-desc\">Payment for your Cadillac is done via Electronic Funds Transfer (EFT), commonly known as a bank transfer.\r\n                    You can start to make payments toward the total driveaway price of your vehicle now that it is confirmed status.\r\n                    with the total balance due no later than 3 business days prior to instore collection, or for regional delivery customers,\r\n                    prior to organising last mile transport from our store. Below is the information you'll need to arrange payment.\r\n                        </Col>\r\n                </Row>\r\n                <Row>\r\n                    <Col md={4} xs={12} className=\"arrange-payment-wrapper\">\r\n                        <div className='arrange-payment-section'>\r\n                            <div className='section-title'>ORDER INFOMATION</div>\r\n\r\n                            <div className='arrange-payment-item'>\r\n                                <div className=\"title\">Payment Reference</div>\r\n                                <div className=\"data\">{orderDetailsFromStore?.YanaOrderNo}</div>\r\n                                <div className=\"desc\">Please use your order number as a reference for all payments.</div>\r\n                            </div>\r\n                            <div className='arrange-payment-item'>\r\n                                <div className=\"title\">Total Outstanding</div>\r\n                                <div className=\"data\">{showPrice(orderDetailsFromStore?.Balance)}</div>\r\n                                <div className=\"desc\">This is the amount outstanding to be paid 3 business days prior to delivery. Note recent transactions can take up to 3 business days to be reflected here.</div>\r\n                            </div>\r\n                            <div className='arrange-payment-item'>\r\n                                {\r\n                                    (isNil(orderDetailsFromStore?.PaymentDueDate) || orderDetailsFromStore?.PaymentDueDate === \"\") ? (\r\n                                        <>\r\n                                            <div className=\"title\">Due Date:</div>\r\n                                            <div className=\"data\">3 business days prior to delivery</div>\r\n                                            <div className=\"desc\">Full payment for your vehicle is due 3 business days prior to your delivery appointment. This date will update once your delivery is scheduled.</div>\r\n                                        </>\r\n                                    ) : (\r\n                                            <>\r\n                                                <div className=\"title\">Due Date:</div>\r\n                                                <div className=\"data\">{moment(orderDetailsFromStore?.PaymentDueDate, \"DD.MM.YYYY\").format(\"dddd, DD MMMM YYYY\")}</div>\r\n                                                <div className=\"desc\">Full payment for your vehicle is due 3 business days prior to your delivery appointment. Please allow extra time for transfer delays.</div>\r\n                                            </>\r\n                                        )\r\n                                }\r\n                            </div>\r\n                        </div>\r\n                    </Col>\r\n                    <Col md={4} xs={12} className=\"arrange-payment-wrapper\">\r\n                        <div className='arrange-payment-section'>\r\n                            <div className='section-title'>CADILLAC BANK DETAILS</div>\r\n\r\n                            <div className='arrange-payment-item'>\r\n                                <div className=\"title\">Bank Name</div>\r\n                                <div className=\"data\">\r\n                                    {bankDetails.BankName}\r\n                                    {bankDetails.BankBranchName !== \"\" && (\r\n                                        <>\r\n                                            <br />\r\n                                            {bankDetails.BankBranchName}\r\n                                        </>\r\n                                    )}\r\n                                </div>\r\n                            </div>\r\n                            <div className='arrange-payment-item'>\r\n                                <div className=\"title\">Account Name</div>\r\n                                <div className=\"data\">{bankDetails.AccountName}</div>\r\n                                <div className=\"desc\">Cadillac is a subsidiary of General Motors (GM). You will be making your payment to GM.</div>\r\n                            </div>\r\n                            <div className='arrange-payment-item'>\r\n                                <div className=\"title\">BSB Number</div>\r\n                                <div className=\"data\">{bankDetails.BSBNumber}</div>\r\n                            </div>\r\n                            <div className='arrange-payment-item'>\r\n                                <div className=\"title\">Account Number</div>\r\n                                <div className=\"data\">{bankDetails.AccountNumber}</div>\r\n                            </div>\r\n                            <div className='arrange-payment-item'>\r\n                                <div className=\"title\">Payment Reference</div>\r\n                                <div className=\"data\">{orderDetailsFromStore?.YanaOrderNo}</div>\r\n                            </div>\r\n\r\n                        </div>\r\n                    </Col>\r\n                    <Col md={4} xs={12} className=\"arrange-payment-wrapper\">\r\n                        <div className='arrange-payment-section'>\r\n                            <div className='section-title'>GET SUPPORT</div>\r\n                                <div className='section-desc'>We're here to help every step of the way. Please contact your Cadillac Sales Ambassador if you need support arranging your payment.</div>\r\n                            <div className='arrange-payment-item'>\r\n                                {\r\n                                    orderDetailsFromStore?.Country === rdEnum.enumCountryCode.NewZealand ? (\r\n                                        <div className='arrange-payment-item'>\r\n                                            <div className=\"title\">Cadillac New Zealand</div>\r\n                                            <div className=\"data\">{bankDetails.Phone}</div>\r\n                                        </div>\r\n                                    ) : (\r\n                                            <div className='arrange-payment-item'>\r\n                                                <div className=\"title\">Cadillac Australia</div>\r\n                                                <div className=\"data\">{bankDetails.Phone}</div>\r\n                                            </div>\r\n                                        )\r\n                                }\r\n                            </div>\r\n                        </div>\r\n                    </Col>\r\n                    </Row>\r\n                </div>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ArrangePayment","import { getBackendPath } from 'helpers/Uri';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const getAddress = async (keywords: any): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            keywords: keywords,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/GoogleAPIs/get-address`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getGeometryLocation = async (country: any, address: any): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            country: country,\r\n            address: address,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/GoogleAPIs/get-geometry-location`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import React, { useEffect, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { GoogleMap, useJsApiLoader, LoadScript, Marker, InfoWindow } from '@react-google-maps/api';\r\nimport { getCMSAssets, getGoogleMapAPIKey, getImageFileNameByID2 } from 'helpers/Uri';\r\nimport { isNil } from 'lodash';\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { classNames } from 'primereact/utils';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport * as deliveryModel from 'model/IDelivery';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as googleApiService from 'services/GoogleApi';\r\nimport * as locationService from 'services/Locations';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\n\r\ninterface googleMapState {\r\n    googleMapAPIKey: string,\r\n    zoom: number,\r\n    containerStyle: any,\r\n    center: any,\r\n    activeMarker: any | null,\r\n}\r\n\r\n\r\nconst SelectLocation = () => {\r\n\r\n    const [deliveryLocation, setDeliveryLocation] = useState<any>(null);\r\n    const [distance, setDistance] = useState<number>(0);\r\n\r\n    const orderScheduleDeliveryFromStore: scheduleDeliveryModel.IOrderScheduleDelivery = useSelector((state: IAppState) => {\r\n        return state?.orderScheduleDelivery;\r\n    });\r\n    const orderDetailsFromStore: orderModel.IOrderRequest | null = useSelector((state: IAppState) => {\r\n        return state?.orderDetails;\r\n    });\r\n    const selectedVehicleFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedVehicle;\r\n    });\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const initGoogleMapState: googleMapState = {\r\n        googleMapAPIKey: getGoogleMapAPIKey(),\r\n        zoom: 12,\r\n        containerStyle: {\r\n            width: '100%',\r\n            height: '500px'\r\n        },\r\n        center: {\r\n            lat: -37.840935,\r\n            lng: 144.946457,\r\n        },\r\n        activeMarker: null\r\n    };\r\n    const [googleMapState, setGoogleMapState] = useState<googleMapState>(initGoogleMapState);\r\n\r\n    const { isLoaded } = useJsApiLoader({\r\n        //id: 'google-map-script',\r\n        googleMapsApiKey: googleMapState.googleMapAPIKey,\r\n        region: \"AU\",\r\n        language: \"en-AU\"\r\n    });\r\n\r\n\r\n    useEffect(() => {\r\n\r\n        if (!isNil(orderScheduleDeliveryFromStore)) {\r\n            doGetGeometryLocation();\r\n        }\r\n\r\n    }, [orderScheduleDeliveryFromStore]);\r\n\r\n\r\n    useEffect(() => {\r\n        if (!isNil(orderDetailsFromStore)) {\r\n            doGetDistance();\r\n        }\r\n    }, [orderDetailsFromStore]);\r\n\r\n    const doGetGeometryLocation = async () => {\r\n        let response = await googleApiService.getGeometryLocation(orderScheduleDeliveryFromStore?.Country, orderScheduleDeliveryFromStore.DeliveryLocationAddress);\r\n        if (response.status) {\r\n            setDeliveryLocation(response.data);\r\n            setGoogleMapState({\r\n                ...googleMapState,\r\n                center: {\r\n                    lat: response.data.lat,\r\n                    lng: response.data.lng,\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n    const doGetDistance = async () => {\r\n        let request: deliveryModel.IGetPriceRequest = {\r\n            Country: orderDetailsFromStore?.Country || \"\",\r\n            DeliveryAddress: orderDetailsFromStore?.DeliveryLocationAddress || \"\",\r\n            DeliveryState: orderDetailsFromStore?.DeliveryLocationState || \"\",\r\n            DeliveryPostcode: orderDetailsFromStore?.DeliveryLocationPostcode || \"\",\r\n            DeliverySuburb: orderDetailsFromStore?.DeliveryLocationSuburb || \"\",\r\n            PickupAddress: orderDetailsFromStore?.RegoAddress || \"\",\r\n            PickupState: orderDetailsFromStore?.RegoState || \"\",\r\n            PickupPostcode: orderDetailsFromStore?.RegoPostcode || \"\",\r\n            PickupSuburb: orderDetailsFromStore?.RegoSuburb || \"\",\r\n            CustomerType: orderDetailsFromStore?.CustomerType || \"\",\r\n            VariantName: orderDetailsFromStore?.VariantName || \"\",\r\n            VehicleSubTotal: selectedVehicleFromStore?.Subtotal || 0,\r\n        }\r\n        let response = await locationService.getDistance(request);\r\n        if (response.status) {\r\n            setDistance(response.data);\r\n        }\r\n        else {\r\n            setDistance(0);\r\n        }\r\n    }\r\n\r\n\r\n    return (\r\n        <Row className='select-location-popup-container'>\r\n            <Col lg={4} className='select-location-popup-context'>\r\n                <div className=\"service-centre-items\">\r\n                    <h6>Deliver To:</h6>\r\n                    <p>{orderScheduleDeliveryFromStore?.PickupLocationName}</p>\r\n                    <div className=\"delivery-address\">\r\n                        <p>{orderScheduleDeliveryFromStore?.DeliveryLocationAddress}</p>\r\n                        <span>{distance} km</span>\r\n                    </div>\r\n                    <div className=\"delivery-address\">\r\n                        <span>Earliest availability</span>\r\n                        <span>{orderScheduleDeliveryFromStore?.Available}</span>\r\n                    </div>\r\n                </div>\r\n                <div className='need-support-container'>\r\n                    <h6>Need support?</h6>\r\n                    <p>If you wish to change your delivery option</p>\r\n                    <span>Please call 1800 CADILLAC (223455) for assistant.</span>\r\n                </div>\r\n            </Col>\r\n            <Col lg={8} className='select-location-popup-map'>\r\n                {\r\n                    isLoaded && (\r\n                        <GoogleMap\r\n                            mapContainerStyle={googleMapState.containerStyle}\r\n                            center={googleMapState.center}\r\n                            zoom={googleMapState.zoom}\r\n                        >\r\n                            {!isNil(orderScheduleDeliveryFromStore?.DeliveryLocationAddress) && !isNil(deliveryLocation) && (\r\n\r\n                                <React.Fragment>\r\n                                    <Marker position={deliveryLocation} onClick={() => {\r\n                                        setGoogleMapState({\r\n                                            ...googleMapState,\r\n                                            activeMarker: orderScheduleDeliveryFromStore?.DeliveryLocationAddress\r\n                                        });\r\n                                    }}>\r\n                                        {/*{!isNil(googleMapState.activeMarker) && (*/}\r\n                                        {/*    <InfoWindow position={deliveryLocation}*/}\r\n                                        {/*        onCloseClick={() => {*/}\r\n                                        {/*            setGoogleMapState({ ...googleMapState, activeMarker: null });*/}\r\n                                        {/*        }}>*/}\r\n                                        {/*        <div className=\"search-dealer-result-for-map\">*/}\r\n                                        {/*            {orderScheduleDeliveryFromStore?.DeliveryLocationAddress}*/}\r\n                                        {/*        </div>*/}\r\n                                        {/*    </InfoWindow>*/}\r\n                                        {/*)}*/}\r\n                                    </Marker>\r\n                                </React.Fragment>\r\n\r\n                            )}\r\n                        </GoogleMap>\r\n                    )\r\n                }\r\n            </Col>\r\n        </Row>\r\n    )\r\n}\r\n\r\nexport default SelectLocation","import React, { useEffect, useState } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Col, Row } from 'react-bootstrap'\r\nimport { Calendar } from 'primereact/calendar'\r\nimport moment from 'moment';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as orderService from 'services/Order';\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport * as scheduleDeliveryStore from 'stores/OrderScheduleDelivery';\r\nimport * as rdEnum from 'helpers/enum';\r\n\r\nconst SelectDateTime = () => {\r\n    const dipatch = useDispatch();\r\n\r\n    const [selectedDate, setSelectedDate] = useState<Date>();\r\n    const [selectedTime, setSelectedTime] = useState<string | null>(null);\r\n    const [timeList, setTimeList] = useState<string[]>([]);\r\n    const [timeListLoadingStatus, setTimeListLoadingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n\r\n    //get delivery address, delivery options and yanaIDs\r\n    const orderScheduleDeliveryFromStore: scheduleDeliveryModel.IOrderScheduleDelivery = useSelector((state: IAppState) => {\r\n        return state?.orderScheduleDelivery;\r\n    });\r\n\r\n    const doGetTime = async () => {\r\n        let scheduleDelivery: scheduleDeliveryModel.IOrderScheduleDelivery = {\r\n            ...orderScheduleDeliveryFromStore,\r\n            DeliveryFormatDate: moment(selectedDate).format(\"DD.MM.YYYY\"),\r\n        };\r\n        setTimeListLoadingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await orderService.getScheduleAvailabeTime(scheduleDelivery || null);\r\n        setTimeListLoadingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            setTimeList(response.data);\r\n        }\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (!isNil(orderScheduleDeliveryFromStore) && selectedDate != undefined) {\r\n            doGetTime();\r\n        }\r\n    }, [selectedDate]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(orderScheduleDeliveryFromStore)) {\r\n            if (!isNil(orderScheduleDeliveryFromStore.DeliveryDate) && orderScheduleDeliveryFromStore.DeliveryDate != undefined) {\r\n                setSelectedDate(orderScheduleDeliveryFromStore.DeliveryDate);\r\n            }\r\n            else {\r\n                setSelectedDate(moment(new Date()).add(\"d\", 20).toDate());\r\n            }\r\n            setSelectedTime(orderScheduleDeliveryFromStore.DeliveryTime);\r\n        }\r\n    }, [orderScheduleDeliveryFromStore]);\r\n   \r\n    return (\r\n        <Row className='select-date-time-container'>\r\n            <Col lg={7} className='select-calendar'>\r\n                <Calendar\r\n                    value={selectedDate}\r\n                    minDate={moment(new Date()).add(\"d\", 20).toDate()}\r\n                    onChange={(e: any) => {\r\n                        setSelectedDate(e.value);\r\n                        dipatch(scheduleDeliveryStore.setScheduleDateAction(\r\n                            e.value,\r\n                            moment(selectedDate).format(\"DD.MM.YYYY\"),\r\n                        ));\r\n                    }}\r\n                    inline showWeek\r\n                />\r\n            </Col>\r\n            <Col lg={5} className='select-date-time-context'>\r\n                <div className='schedule-selected-date-container'>\r\n                    <h5>{moment(selectedDate).format(\"dddd, DD MMMM YYYY\")}</h5>\r\n                </div>\r\n                <div className='schedule-options-container'>\r\n                    {(timeListLoadingStatus == rdEnum.enumProcessingStatus.Processed && (isNil(timeList) || timeList.length == 0)) && (\r\n                        <div className=\"text-error\">No available time found.</div>\r\n                    )}\r\n                    {!isNil(timeList) && timeList.length > 0 && timeList.map((time: any, index: number) => {\r\n                        return (\r\n                            <div className='schedule-options-item' key={\"time_\" + index.toString()}>\r\n                                <div className={classNames({\r\n                                    \"schedule-options-inner\": true,\r\n                                    \"selected\": time == selectedTime\r\n                                })}\r\n                                    onClick={() => {\r\n                                        setSelectedTime(time);\r\n                                        dipatch(scheduleDeliveryStore.setScheduleTimeAction(time));\r\n                                    }}\r\n                                >\r\n                                    <span>{time}</span>\r\n                                </div>\r\n                            </div>\r\n                        );\r\n\r\n                    })}\r\n                </div>\r\n                <div className='need-support-container'>\r\n                    <h6>Need support?</h6>\r\n                    <p>If you wish to change your delivery option</p>\r\n                    <span>Please call 1800 CADILLAC (223455) for assistant.</span>\r\n                </div>\r\n            </Col>\r\n        </Row>\r\n\r\n    )\r\n}\r\n\r\nexport default SelectDateTime","import { GoogleMap, InfoWindow, Marker, useJsApiLoader } from '@react-google-maps/api';\r\nimport { getGoogleMapAPIKey } from 'helpers/Uri';\r\nimport React, { useState, useEffect } from 'react'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isNil } from 'lodash';\r\nimport { Col, Row } from 'react-bootstrap';\r\nimport { IAppState } from 'model/IAppState';\r\nimport moment from 'moment';\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport * as googleApiService from 'services/GoogleApi';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\n\r\n\r\ninterface googleMapState {\r\n    googleMapAPIKey: string,\r\n    zoom: number,\r\n    containerStyle: any,\r\n    center: any,\r\n    activeMarker: any | null,\r\n}\r\n\r\n\r\nconst PickupLocation = () => {\r\n\r\n    const [deliveryLocation, setDeliveryLocation] = useState<any>(null);\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const orderScheduleDeliveryFromStore: scheduleDeliveryModel.IOrderScheduleDelivery = useSelector((state: IAppState) => {\r\n        return state?.orderScheduleDelivery;\r\n    });\r\n\r\n    const initGoogleMapState: googleMapState = {\r\n        googleMapAPIKey: getGoogleMapAPIKey(),\r\n        zoom: 12,\r\n        containerStyle: {\r\n            width: '100%',\r\n            height: '150px'\r\n        },\r\n        center: {\r\n            lat: 13.819960794599261,\r\n            lng: 100.56316492912957,\r\n        },\r\n        activeMarker: null\r\n    };\r\n    const [googleMapState, setGoogleMapState] = useState<googleMapState>(initGoogleMapState);\r\n\r\n    const { isLoaded } = useJsApiLoader({\r\n        //id: 'google-map-script',\r\n        googleMapsApiKey: googleMapState.googleMapAPIKey,\r\n        region: \"AU\",\r\n        language: \"en-AU\"\r\n    });\r\n\r\n\r\n    useEffect(() => {\r\n\r\n        if (!isNil(orderScheduleDeliveryFromStore)) {\r\n            doGetGeometryLocation();\r\n        }\r\n\r\n    }, [orderScheduleDeliveryFromStore]);\r\n\r\n    const doGetGeometryLocation = async () => {\r\n        let response = await googleApiService.getGeometryLocation(orderScheduleDeliveryFromStore?.Country, orderScheduleDeliveryFromStore.DeliveryLocationAddress);\r\n        if (response.status) {\r\n            setDeliveryLocation(response.data);\r\n            setGoogleMapState({\r\n                ...googleMapState,\r\n                center: {\r\n                    lat: response.data.lat,\r\n                    lng: response.data.lng,\r\n                }\r\n            })\r\n        }\r\n    }\r\n\r\n\r\n   \r\n    return (\r\n        <Row className='pickup-location-container'>\r\n            <Col lg={8} className='pickup-location-panel'>\r\n                <div className='pickup-location-map'>\r\n                    {\r\n                        !isMobile\r\n                        ?\r\n                        <span>{orderScheduleDeliveryFromStore?.DeliveryOption} Location</span>\r\n                        :\r\n                        <></>\r\n                    }\r\n                    \r\n                    <div className='pickup-location-map-box'>\r\n                        <div className='address-panel'>\r\n                            {\r\n                                isMobile\r\n                                ?\r\n                                <p>{orderScheduleDeliveryFromStore?.DeliveryOption} Location</p>\r\n                                :\r\n                                <></>\r\n                            }\r\n                            <span>{orderScheduleDeliveryFromStore?.DeliveryLocationAddress}</span>\r\n\r\n                            {\r\n                                isMobile\r\n                                ?\r\n                                <>\r\n                                    <p>Date and Time</p>\r\n                                    <div className='date-and-time-box'>\r\n                                        <div className='date-and-time'>\r\n                                            <span>{moment(orderScheduleDeliveryFromStore?.DeliveryDate).format(\"dddd, DD MMMM YYYY\")}</span>\r\n                                            <span>{orderScheduleDeliveryFromStore?.DeliveryTime}</span>\r\n                                        </div>\r\n                                    </div>\r\n                                </>\r\n                                :\r\n                                <></>\r\n                            }\r\n                           \r\n                        </div>\r\n                        <div className='map-panel'>\r\n                            { isLoaded && (\r\n                                <GoogleMap\r\n                                    mapContainerStyle={googleMapState.containerStyle}\r\n                                    center={googleMapState.center}\r\n                                    zoom={googleMapState.zoom}\r\n                                >\r\n                                    {!isNil(orderScheduleDeliveryFromStore?.DeliveryLocationAddress) && !isNil(deliveryLocation) && (\r\n\r\n                                        <React.Fragment>\r\n                                            <Marker position={deliveryLocation}\r\n                                                onClick={() => {\r\n                                                    setGoogleMapState({\r\n                                                        ...googleMapState,\r\n                                                        activeMarker: orderScheduleDeliveryFromStore?.DeliveryLocationAddress\r\n                                                    });\r\n                                                }}\r\n                                            >\r\n                                                {/*{googleMapState.activeMarker == item.dealerCode && (*/}\r\n                                                {/*    <InfoWindow position={item.location}*/}\r\n                                                {/*        onCloseClick={() => {*/}\r\n                                                {/*            setGoogleMapState({ ...googleMapState, activeMarker: null});*/}\r\n                                                {/*        }}>*/}\r\n                                                {/*        <div className=\"search-dealer-result-for-map\">*/}\r\n                                                {/*            {dealerDetailTemplate(item)}*/}\r\n                                                {/*        </div>*/}\r\n                                                {/*    </InfoWindow>*/}\r\n                                                {/*)}*/}\r\n                                            </Marker>\r\n                                        </React.Fragment>\r\n                                    )}\r\n                                   \r\n                                </GoogleMap>\r\n                            )\r\n                        }\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                {\r\n                    !isMobile\r\n                    ?\r\n                    <div className='pickup-location-schedule'>\r\n                        <span>Date and Time</span>\r\n                        <div className='date-and-time-box'>\r\n                            <div className='date-and-time'>\r\n                                <p>{moment(orderScheduleDeliveryFromStore?.DeliveryDate).format(\"dddd, DD MMMM YYYY\")}</p>\r\n                                <p>{orderScheduleDeliveryFromStore?.DeliveryTime}</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    :\r\n                    <></>\r\n                }\r\n                \r\n            </Col>\r\n            <Col lg={4} className='pickup-need-help-panel'>\r\n                <div className='need-support-container'>\r\n                    <h6>Need support?</h6>\r\n                    <p>If you wish to change your delivery option</p>\r\n                    <span>Please call 1800 CADILLAC (223455) for assistant.</span>\r\n                </div>\r\n            </Col>\r\n        </Row>\r\n    )\r\n}\r\n\r\nexport default PickupLocation","import { getCMSAssets } from 'helpers/Uri';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useState } from 'react'\r\nimport { Button } from 'react-bootstrap';\r\nimport { isNil } from 'lodash';\r\nimport SelectLocation from './SelectLocation';\r\nimport SelectDateTime from './SelectDateTime';\r\nimport PickupLocation from './PickupLocation';\r\nimport { classNames } from 'primereact/utils';\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as orderService from 'services/Order';\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { TabPanel, TabView } from 'primereact/tabview';\r\n\r\ninterface IIsRescheduleProps {\r\n    isReschedule: boolean,\r\n    buttonText: string | null,\r\n}\r\n\r\nconst ScheduleDelivery = (props: IIsRescheduleProps) => {\r\n\r\n    const orderScheduleDeliveryFromStore: scheduleDeliveryModel.IOrderScheduleDelivery = useSelector((state: IAppState) => {\r\n        return state?.orderScheduleDelivery;\r\n    });\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n\r\n    const [scheduleStep, setScheduleStep] = useState(0);\r\n\r\n    const { isReschedule, buttonText } = props;\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const onShowDialog = () => {\r\n        setDialogVisible(true);\r\n    }\r\n\r\n    const onHideDialog = () => {\r\n        setDialogVisible(false);\r\n    }\r\n\r\n    const toNextStep = () => {\r\n        if (scheduleStep != 2) {\r\n            setScheduleStep(scheduleStep + 1);\r\n        }\r\n    }\r\n\r\n    const handleConfirm = async () => {\r\n        //save data to api\r\n        let response = await orderService.saveScheduleAvailabeTime(orderScheduleDeliveryFromStore);\r\n        if (response.status) {\r\n            setDialogVisible(false);\r\n        }\r\n\r\n    }\r\n\r\n    const toLocationStep = () => {\r\n        setScheduleStep(0);\r\n    }\r\n\r\n    const toDateTimeStep = () => {\r\n        if (scheduleStep >= 1) {\r\n            setScheduleStep(1);\r\n        }\r\n    }\r\n\r\n    const ifDisableButton = (): boolean => {\r\n        if (scheduleStep == 1) {\r\n            if (orderScheduleDeliveryFromStore.DeliveryDate == undefined\r\n                || isNil(orderScheduleDeliveryFromStore.DeliveryTime) || orderScheduleDeliveryFromStore.DeliveryTime == \"\") {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n\r\n    const handleTabClick = (index: any) => {\r\n        if (\r\n            (index === 1 && scheduleStep === 0) || // Prevent clicking on \"Date and time\" if scheduleStep is 0\r\n            (index === 2 && scheduleStep !== 2)    // Prevent clicking on \"Summary\" if scheduleStep is not 2\r\n        ) {\r\n            return; // Do not change the tab if it's disabled\r\n        }\r\n        setScheduleStep(index); // Change the active tab\r\n    };\r\n\r\n    return (\r\n        <>\r\n            <div className='variant-btn-panel'>\r\n                <Button className='variant-btn'\r\n                    onClick={() => onShowDialog()}\r\n                >\r\n                    <h6>{buttonText}</h6>\r\n                    {/*{*/}\r\n                    {/*    isReschedule*/}\r\n                    {/*        ?*/}\r\n                    {/*        <h6>RESCHEDULE</h6>*/}\r\n                    {/*        :*/}\r\n                    {/*        <h6>SCHEDULE DELIVERY</h6>*/}\r\n                    {/*}*/}\r\n                </Button>\r\n            </div>\r\n\r\n            <Dialog header={scheduleStep == 0 ? \"SCHEDULE DELIVERY\" : scheduleStep == 1 ? 'SELECT A DATE AND TIME' : 'CONFIRM YOUR DELIVERY'}\r\n                className='schedule-steps-dialog'\r\n                visible={dialogVisible} position='bottom'\r\n                style={{ maxWidth: '1100px' }} draggable={false}\r\n                resizable={true}\r\n                onHide={() => onHideDialog()}\r\n            >\r\n                <div className='schedule-steps-dialog-container'>\r\n                    {\r\n                        !isMobile\r\n                        ?\r\n                        <div className='schedule-steps-container'>\r\n                            <div className='steps-panel'>\r\n                                <div className='step-item' onClick={() => toLocationStep()}>\r\n                                    {\r\n                                        scheduleStep != 0\r\n                                            ?\r\n                                            <img alt=\"\" src={`${getCMSAssets()}/users/tick-circle.svg`} />\r\n                                            :\r\n                                            <div className='current-step-circle-panel'>\r\n                                                <div className='inner-circle'></div>\r\n                                            </div>\r\n                                    }\r\n                                    <span>Location</span>\r\n                                </div>\r\n                                <div className='step-line-panel'>\r\n                                    <div className='step-line'></div>\r\n                                </div>\r\n                                <div className='step-item' onClick={() => toDateTimeStep()}>\r\n                                    {\r\n                                        scheduleStep == 2\r\n                                            ?\r\n                                            <img alt=\"\" src={`${getCMSAssets()}/users/tick-circle.svg`} />\r\n                                            :\r\n                                            scheduleStep == 1\r\n                                                ?\r\n                                                <div className='current-step-circle-panel'>\r\n                                                    <div className='inner-circle'></div>\r\n                                                </div>\r\n                                                :\r\n                                                <div className='next-step-circle-panel'></div>\r\n                                    }\r\n                                    <span>Date and time</span>\r\n                                </div>\r\n                                <div className='step-line-panel'>\r\n                                    <div className='step-line'></div>\r\n                                </div>\r\n                                <div className='step-item'>\r\n                                    {\r\n        \r\n                                        scheduleStep == 2\r\n                                            ?\r\n                                            <div className='current-step-circle-panel'>\r\n                                                <div className='inner-circle'></div>\r\n                                            </div>\r\n                                            :\r\n                                            scheduleStep != 2\r\n                                                ?\r\n                                                <div className='next-step-circle-panel'></div>\r\n                                                :\r\n                                                <></>\r\n                                    }\r\n                                    <span>Summary</span>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='pipeline-btn-panel' style={{ width: \"200px\" }}>\r\n                                <Button className='pipeline-btn'\r\n                                    disabled={ifDisableButton()}\r\n                                    style={{border: 'none', backgroundColor: ifDisableButton() ? '#CCCCCC' : '#282828'}}\r\n                                    onClick={() =>\r\n                                        scheduleStep != 2 ? toNextStep() : handleConfirm()}>\r\n                                    {\r\n                                        scheduleStep != 2\r\n                                            ?\r\n                                            <span style={{color: ifDisableButton() ? '#707070' : '#fff'}}>NEXT</span>\r\n                                            :\r\n                                            <span style={{color: ifDisableButton() ? '#707070' : '#fff'}}>CONFIRM</span>\r\n                                    }\r\n                                </Button>\r\n                            </div>\r\n                        </div>\r\n                        :\r\n                        <div className=\"schedule-steps-container\">\r\n                            <TabView activeIndex={scheduleStep} onTabChange={(e) => setScheduleStep(e.index)}>\r\n                                <TabPanel header=\"Location\">\r\n                                   \r\n                                </TabPanel>\r\n                                <TabPanel header=\"Date and time\" disabled={ scheduleStep == 0 ? true : false}>\r\n                                    \r\n                                </TabPanel>\r\n                                <TabPanel header=\"Summary\" disabled={ scheduleStep == 2 ? false : true}>\r\n                                    \r\n                                </TabPanel>\r\n                            </TabView>\r\n\r\n                            \r\n                        </div>\r\n                    }\r\n\r\n                    {\r\n                        scheduleStep == 0\r\n                            ?\r\n                            <SelectLocation />\r\n                            :\r\n                            scheduleStep == 1\r\n                                ?\r\n                                <SelectDateTime />\r\n                                :\r\n                                scheduleStep == 2\r\n                                    ?\r\n                                    <PickupLocation />\r\n                                    :\r\n                                    <></>\r\n                    }\r\n\r\n                    {\r\n                        isMobile\r\n                        ?\r\n                        <div className='pipeline-btn-panel' style={{ width: \"200px\" }}>\r\n                            <Button className='pipeline-btn'\r\n                                disabled={ifDisableButton()}\r\n                                style={{border: 'none', backgroundColor: ifDisableButton() ? '#CCCCCC' : '#282828'}}\r\n                                onClick={() =>\r\n                                    scheduleStep != 2 ? toNextStep() : handleConfirm()}>\r\n                                {\r\n                                    scheduleStep != 2\r\n                                        ?\r\n                                        <span style={{color: ifDisableButton() ? '#707070' : '#fff'}}>NEXT</span>\r\n                                        :\r\n                                        <span style={{color: ifDisableButton() ? '#707070' : '#fff'}}>CONFIRM</span>\r\n                                }\r\n                            </Button>\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                    }\r\n                </div>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ScheduleDelivery","import { getBackendPath } from 'helpers/Uri';\r\nimport * as docModel from 'model/IDocuments';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const uploadDocuments = async (\r\n    doc: docModel.IDocument\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(doc),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Documents/upload-documents`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getAllDocuments = async (\r\n    doc: docModel.IDocument\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(doc),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Documents/get-documents`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getSpecificDocuments = async (\r\n    doc: docModel.IDocument\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(doc),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/Documents/get-specific-document`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import { Dialog } from 'primereact/dialog'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { InputText } from 'primereact/inputtext'\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport IsNumberVerification from 'components/IsNumberVerification'\r\nimport { getCMSAssets } from 'helpers/Uri';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as orderService from 'services/Order';\r\nimport * as contractModel from 'model/IContract';\r\nimport * as docModel from 'model/IDocuments';\r\nimport * as docHelper from 'businessHelpers/DocumentHelper';\r\nimport * as docService from 'services/Document';\r\nimport * as orderDetailPageVersionStore from 'stores/OrderDetailPageDataVersion';\r\nimport { enumClientTypes, enumDocumentType } from \"helpers/enum\";\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\n\r\n// import {Document, Page, pdfjs} from 'react-pdf';\r\n// pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;\r\n\r\nconst ReviewContract = (props: any) => {\r\n    const dispatch = useDispatch();\r\n    const { buttonText } = props;\r\n\r\n    \r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n    const [fullName, setFullName] = useState(\"\");\r\n    const [invalidFullname, setInvalidFullname] = useState(false);\r\n    const [consent, setConsent] = useState(false);\r\n    const [errorMessage, setErrorMessage] = useState(\"\");\r\n    const [pdfLink, setPDFLink] = useState(\"\");\r\n\r\n    const orderCustomerDetailsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderCustomerDetails;\r\n    });\r\n    const orderDocumentsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderDocuments;\r\n    });\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const onShowDialog = () => {\r\n        setDialogVisible(true);\r\n    }\r\n\r\n    const onHideDialog = () => {\r\n        setDialogVisible(false);\r\n    }\r\n\r\n\r\n    useEffect(() => {\r\n        if (!isNil(orderDocumentsFromStore) && dialogVisible) {\r\n            doGetDoc();\r\n        }\r\n    }, [orderDocumentsFromStore, dialogVisible]);\r\n\r\n\r\n    const doGetDoc = async () => {\r\n        let findDocs = orderDocumentsFromStore.filter((m: docModel.IDocumentItem) => m.DocumentType == enumDocumentType.Contract);\r\n\r\n        if (!isNil(findDocs) && findDocs.length > 0) {\r\n            let requestFrontData: docModel.IDocument = {\r\n                YanaCustomerID: orderCustomerDetailsFromStore?.yanaCustomerID || \"\",\r\n                YanaCustomerNo: orderCustomerDetailsFromStore?.yanaCustomerNo || \"\",\r\n                YanaOrderID: orderCustomerDetailsFromStore?.yanaOrderID || \"\",\r\n                YanaOrderNo: orderCustomerDetailsFromStore?.yanaOrderNo || \"\",\r\n                Country: orderCustomerDetailsFromStore?.country || \"\",\r\n                Documents: [findDocs[findDocs.length - 1]]\r\n            };\r\n            let response = await docService.getSpecificDocuments(requestFrontData);\r\n            if (response.status) {\r\n                let fileName = response.data[0].reportName;\r\n                let displayUrl = response.data[0].displayUrl;\r\n                let key = response.data[0].key;\r\n                setPDFLink(displayUrl + \"?\" + key);\r\n            }\r\n        }\r\n    }\r\n\r\n    const onSignContract = async () => {\r\n        setErrorMessage(\"\");\r\n\r\n        if (isNil(fullName) || fullName == \"\") {\r\n            setInvalidFullname(true);\r\n            return;\r\n        }\r\n        setInvalidFullname(false);\r\n        let request: contractModel.IContract = {\r\n            Country: orderCustomerDetailsFromStore?.country || \"\",\r\n            YanaCustomerID: orderCustomerDetailsFromStore?.yanaCustomerID || \"\",\r\n            YanaCustomerNo: orderCustomerDetailsFromStore?.yanaCustomerNo || \"\",\r\n            YanaOrderID: orderCustomerDetailsFromStore?.yanaOrderID || \"\",\r\n            YanaOrderNo: orderCustomerDetailsFromStore?.yanaOrderNo || \"\",\r\n            FullName: fullName,\r\n        };\r\n\r\n        let response = await orderService.confirmContract(request);\r\n        if (response.status) {\r\n            dispatch(orderDetailPageVersionStore.setOrderDetailPageDataVersionAction());\r\n            onHideDialog();\r\n        }\r\n        else {\r\n            setErrorMessage(response.message);\r\n        }\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className='pipeline-btn-panel'>\r\n                <Button className='pipeline-btn'\r\n                    onClick={() => onShowDialog()}\r\n                >\r\n                    {buttonText}\r\n                </Button>\r\n            </div>\r\n\r\n            <Dialog className='review-contract-dialog'\r\n                visible={dialogVisible}\r\n                position='bottom'\r\n                style={{ maxWidth: '1100px' }}\r\n                draggable={false}\r\n                resizable={true}\r\n                onHide={() => onHideDialog()}>\r\n                <div className='review-contract-dialog-container'>\r\n                    <div className='review-contract-container'>\r\n                        {/*<object data={`${getCMSAssets()}/order/[AU] Draft - Cadillac Contract of Sale.pdf`}*/}\r\n                        {/*    type=\"application/pdf\" width=\"100%\" height=\"100%\">*/}\r\n                        {/*</object>*/}\r\n                        {/* <object data={pdfLink}\r\n                            type=\"application/pdf\" width=\"100%\" height=\"100%\">\r\n                        </object> */}\r\n                        {\r\n                            !isMobile\r\n                            ?\r\n                            <object data={pdfLink}\r\n                            type=\"application/pdf\" width=\"100%\" height=\"100%\">\r\n                            </object>\r\n                            :\r\n                            <div className='variant-btn-panel'>\r\n                                <Button className='variant-btn'>\r\n                                    <a href={pdfLink} download target=\"_blank\" rel=\"noopener noreferrer\">View</a>\r\n                                </Button>\r\n                                \r\n                            </div>\r\n                            // <Document file={pdfLink}>\r\n                            //     <Page pageNumber={0} />\r\n                            //     {/* Add more <Page> components as needed for multi-page PDFs */}\r\n                            // </Document>\r\n                        }\r\n                    </div>\r\n                    <div className=\"fullname-wrapper\">\r\n                        <div className='input-item'>\r\n                            <span className=\"wrapper-box\">\r\n                                <InputText id=\"fullname\"\r\n                                    aria-describedby=\"fullname-help\"\r\n                                    placeholder=\"Buyer Full Name\"\r\n                                    value={fullName || ''}\r\n                                    onChange={(e: any) => {\r\n                                        setFullName(e.target.value);\r\n                                    }}\r\n                                />\r\n                                <label>Buyer Full Name</label>\r\n                            </span>\r\n                        </div>\r\n                        {invalidFullname && (\r\n                            <small id=\"fullname-help\" className=\"p-error block\">Require Valid Full Name</small>\r\n                        )}\r\n                    </div>\r\n                    <div className=\"consent-wrapper checkbox-wrapper\">\r\n                        <Checkbox\r\n                            name=\"chkConsent\"\r\n                            inputId=\"chkConsent\"\r\n                            onChange={(e) => {\r\n                                setConsent(e.checked);\r\n                            }}\r\n                            checked={consent}\r\n                        ></Checkbox>\r\n                        <label htmlFor=\"chkConsent\" className=\"p-checkbox-label\">I have read and reviewed my vehicle sales order contract and agree with all the T&C's mentioned in this contract.</label>\r\n                    </div>\r\n                    {!isNil(errorMessage) && errorMessage != \"\" && (\r\n                        <div>\r\n                            <div className=\"text-error\">{errorMessage}</div>\r\n                        </div>\r\n                    )}\r\n                    <Row>\r\n                        <div className='btn-panel'>\r\n                            <div className='variant-btn-panel'>\r\n                                <Button className='variant-btn'\r\n                                    disabled={!consent}\r\n                                    style={{border: 'none', backgroundColor: !consent ? '#CCCCCC' : '#282828'}}\r\n                                    onClick={(e: any) => {\r\n                                        onSignContract();\r\n                                    }}\r\n                                >\r\n                                    <span style={{color: !consent ? '#707070' : '#fff'}}>SIGN YOUR CONTRACT</span>\r\n                            </Button>\r\n                            </div>\r\n                        </div>\r\n                    </Row>\r\n                    {\r\n                        selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.Australia\r\n                        ?\r\n                        <Row>\r\n                            0800 CADILLAC (223455)\r\n                        </Row>\r\n                        :\r\n                        <></>\r\n                    }\r\n                </div>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ReviewContract","import { Dialog } from 'primereact/dialog';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { Button } from 'react-bootstrap';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as Uri from 'helpers/Uri';\r\nimport { isNil } from 'lodash';\r\n\r\nimport * as orderService from 'services/Order';\r\nimport * as financeStatusModel from 'model/IFinanceStatus';\r\nimport * as financeStatusHelper from 'businessHelpers/FinanceHelper';\r\n\r\n\r\nconst FinanceApplication = () => {\r\n\r\n    const orderDetailsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderDetails;\r\n    });\r\n    //const [dialogVisible, setDialogVisible] = useState(false);\r\n    //const { buttonText } = props;\r\n\r\n    const [financeStatus, setFinanceStatus] = useState<financeStatusModel.IFinanceStatus>(financeStatusHelper.getInitFinanceStatus());\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n    }\r\n\r\n    const onHide = () => {\r\n        setIsOpen(false);\r\n    };\r\n\r\n    useEffect(() => {\r\n        doGetFinanceStatus();\r\n    }, [orderDetailsFromStore?.YanaCustomerID,\r\n    orderDetailsFromStore?.YanaCustomerNo,\r\n    orderDetailsFromStore?.YanaOrderID,\r\n    orderDetailsFromStore?.YanaOrderNo]);\r\n\r\n\r\n    const doGetFinanceStatus = async () => {\r\n        let requestData: financeStatusModel.IFinanceStatus = {\r\n            Country: orderDetailsFromStore?.Country || \"\",\r\n            YanaCustomerID: orderDetailsFromStore?.YanaCustomerID || \"\",\r\n            YanaCustomerNo: orderDetailsFromStore?.YanaCustomerNo || \"\",\r\n            YanaOrderID: orderDetailsFromStore?.YanaOrderID || \"\",\r\n            YanaOrderNo: orderDetailsFromStore?.YanaOrderNo || \"\",\r\n            FinanceApplicationStepName: null,\r\n            FinanceApplicationStepLink: null\r\n        };\r\n\r\n        if (requestData.YanaCustomerID === \"\" || requestData.YanaCustomerNo === \"\" || requestData.YanaOrderID === \"\" || requestData.YanaOrderNo === \"\")\r\n            return;\r\n\r\n        let response = await orderService.getFinanceStatus(requestData);\r\n        if (response.status) {\r\n\r\n            requestData = {\r\n                ...requestData,\r\n                FinanceApplicationStepName: response.data.financeApplicationStepName,\r\n                FinanceApplicationStepLink: response.data.financeApplicationStepLink\r\n            };\r\n            setFinanceStatus(requestData);\r\n        }\r\n\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {/* <div className='variant-btn-panel'>\r\n                <a href={financeStatus.FinanceApplicationStepLink || \"\"} target=\"_blank\">{financeStatus?.FinanceApplicationStepName}</a>\r\n            </div> */}\r\n            {\r\n                !isNil(financeStatus.FinanceApplicationStepLink) && financeStatus.FinanceApplicationStepLink != ''\r\n                    ?\r\n                    <>\r\n                        <div className='pipeline-btn-panel'>\r\n                            <Button className='pipeline-btn text-capitalize'\r\n                                onClick={() => handleDialogOpen()\r\n                                    // if (!isNil(financeStatus.FinanceApplicationStepLink) && financeStatus.FinanceApplicationStepLink != '') {\r\n                                    //     window.open(financeStatus.FinanceApplicationStepLink)\r\n                                    // }\r\n                                }\r\n                            >\r\n                                {financeStatus?.FinanceApplicationStepName}\r\n                            </Button>\r\n                        </div>\r\n\r\n                        <Dialog header='NOTICE' className='finance-application-dialog' position='bottom' visible={isOpen} draggable={false} resizable={true} onHide={() => onHide()}>\r\n                            <div className='title-panel'>\r\n                                {\r\n                                    orderDetailsFromStore?.Country == rdEnum.enumCountryCode.Australia\r\n                                        ?\r\n                                        <p>To commence your application. we'll be transferring you to our finance partner, Plenti. This next page is managed by Plenti.</p>\r\n                                        :\r\n                                        <p>To commence your application, we'll be transferring you to our finance partner, MTF. This page is managed by MTF.</p>\r\n                                }\r\n                            </div>\r\n                            <div className='pipeline-btn-panel'>\r\n                                <Button className='pipeline-btn text-capitalize'\r\n                                    onClick={() => {\r\n                                        if (!isNil(financeStatus.FinanceApplicationStepLink) && financeStatus.FinanceApplicationStepLink != '') {\r\n                                            window.open(financeStatus.FinanceApplicationStepLink)\r\n                                        }\r\n                                    }}\r\n                                >\r\n                                    CONTINUE\r\n                            </Button>\r\n                            </div>\r\n                        </Dialog>\r\n                    </>\r\n                    :\r\n                    <></>\r\n            }\r\n\r\n        </>\r\n    )\r\n}\r\n\r\nexport default FinanceApplication","\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { FileUpload } from 'primereact/fileupload';\r\n\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport { IAppState } from 'model/IAppState';\r\nimport moment from 'moment';\r\n\r\nimport AdyenCheckout from '@adyen/adyen-web';\r\nimport '@adyen/adyen-web/dist/adyen.css';\r\n\r\nimport * as Uri from 'helpers/Uri';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as checkoutHelper from 'businessHelpers/CheckoutHelper';\r\n\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as checkOutViewModel from 'model/ICheckoutWaitlistViewModel';\r\n\r\nimport * as orderService from 'services/Order';\r\nimport * as paymentService from 'services/AdyenPayment';\r\n\r\n\r\nconst RetryPayment = (props: any) => {\r\n    const dispatch = useDispatch();\r\n    const { buttonText } = props;\r\n    const paymentErrorMessage = \"Your credit card details have been refused, please re-enter your details.\";\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n\r\n    const paymentContainer = useRef<HTMLDivElement>(null);\r\n    const [adyenSession, setAdyenSession] = useState<checkOutViewModel.IAdyenSession>(checkoutHelper.getAdyenInitState());\r\n    const [customCardInstance, setCustomCardInstance] = useState<any>();\r\n\r\n    const [placeOrderMessage, setPlaceOrderMessage] = useState<string>(\"\");\r\n    const [adyenFailedMessage, setAdyenFailedMessage] = useState(\"\");\r\n    const [confirmOrderSubmittingStatus, setConfirmOrderSubmittingStatus] = useState(rdEnum.enumProcessingStatus.Processing);\r\n    const [isShowAdyenRetryButton, setIsShowAdyenRetryButton] = useState(false);\r\n\r\n    const [showButton, setShowButton] = useState(false);\r\n\r\n\r\n    //store variables\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const selectedOrderDetailsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderDetails;\r\n    });\r\n\r\n\r\n    const onShowDialog = () => {\r\n        setDialogVisible(true);\r\n    }\r\n\r\n    const onHideDialog = () => {\r\n        setDialogVisible(false);\r\n    }\r\n\r\n    setTimeout(() => {\r\n        const streetRef = document.getElementsByName(\"street\");\r\n        if (streetRef != null && streetRef.length > 0) {\r\n            streetRef[0]?.setAttribute(\"placeHolder\", \"Address\");\r\n        }\r\n        const cityRef = document.getElementsByName(\"city\");\r\n        if (cityRef != null && cityRef.length > 0) {\r\n            cityRef[0]?.setAttribute(\"placeHolder\", \"Suburb\");\r\n        }\r\n\r\n        const postcodeRef = document.getElementsByName(\"postalCode\");\r\n        if (postcodeRef != null && postcodeRef.length > 0) {\r\n            postcodeRef[0]?.setAttribute(\"placeHolder\", \"PostCode\");\r\n        }\r\n\r\n    }, 1000);\r\n\r\n\r\n    const translations = {\r\n        \"en_AU\": {\r\n            \"creditCard.numberField.title\": \"\",\r\n            /* \"creditCard.numberField.title\": \"Card Number *\",*/\r\n            \"creditCard.numberField.placeholder\": \"1234 5678 9012 3456\",\r\n            \"creditCard.expiryDateField.title\": \"\",\r\n            \"creditCard.expiryDateField.placeholder\": \"MM/YY\",\r\n            \"creditCard.cvcField.title\": \"\",\r\n            \"creditCard.cvcField.placeholder\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.4digits\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.3digits\": \"CVV *\",\r\n            \"creditCard.holderName\": \"\",\r\n            \"creditCard.holderName.placeholder\": \"Name on card\",\r\n            \"billingAddress\": \"\",\r\n            \"country\": \"\",\r\n            \"city\": \"\",\r\n            \"city.errors.incomplete\": \"Enter Suburb\",\r\n            \"state\": \"\",\r\n            \"postalCode\": \"\",\r\n            \"postalCode.errors.incomplete\": \"Enter Postcode\",\r\n            \"address\": \"\",\r\n            \"address.enterManually\": \"Address\",\r\n            \"address.errors.incomplete\": \"Enter Address to continue\",\r\n        },\r\n        \"en_NZ\": {\r\n            \"creditCard.numberField.title\": \"\",\r\n            \"creditCard.numberField.placeholder\": \"1234 5678 9012 3456\",\r\n            \"creditCard.expiryDateField.title\": \"\",\r\n            \"creditCard.expiryDateField.placeholder\": \"MM/YY\",\r\n            \"creditCard.cvcField.title\": \"\",\r\n            \"creditCard.cvcField.placeholder\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.4digits\": \"CVV *\",\r\n            \"creditCard.cvcField.placeholder.3digits\": \"CVV *\",\r\n            \"creditCard.holderName\": \"\",\r\n            \"creditCard.holderName.placeholder\": \"Name on card\",\r\n            \"billingAddress\": \"\",\r\n            \"country\": \"\",\r\n            \"city\": \"\",\r\n            \"city.errors.incomplete\": \"Enter Suburb\",\r\n            \"state\": \"\",\r\n            \"postalCode\": \"Postcode\",\r\n            \"postalCode.errors.incomplete\": \"Enter Postcode\",\r\n            \"address\": \"\",\r\n            \"street\": \"\",\r\n            \"address.enterManually\": \"Address\",\r\n            \"address.errors.incomplete\": \"Enter Address to continue\",\r\n        }\r\n    };\r\n\r\n\r\n    const doGetAdyenConfig = () => {\r\n\r\n        //let env = Uri.getAdyenEnv();\r\n        //if (env != \"test\") {\r\n        //    if (selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.NewZealand) {\r\n        //        env = \"live-au\";\r\n        //    }\r\n        //}\r\n\r\n\r\n        let configuration = {\r\n            locale: selectedOrderDetailsFromStore?.Country == rdEnum.enumCountryCode.NewZealand ? \"en_NZ\" : \"en_AU\",\r\n            environment: Uri.getAdyenEnv(selectedOrderDetailsFromStore?.Country),   // Australia: \tlive-au\r\n            clientKey: Uri.getAdyenKey(selectedOrderDetailsFromStore?.Country || \"\"),\r\n            translations: translations,\r\n            session: {\r\n                id: adyenSession.SessionID, // Unique identifier for the payment session.\r\n                sessionData: adyenSession.SessionData // The payment session data.\r\n            },\r\n            //setStatusAutomatically: false,  //Do not use this flag. We have to a get new session id as RD reference id need be changed for each pay action\r\n            onPaymentCompleted: async (result: any, component: any) => {\r\n                setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n                let localBilling = localStorage.getItem(\"billing\");\r\n                let paymentID = localStorage.getItem(\"paymentID\");\r\n\r\n                let postAdyenSession: checkOutViewModel.IAdyenSession = {\r\n                    SessionID: adyenSession.SessionID,\r\n                    SessionData: result.sessionData,\r\n                    SessionResult: result.sessionResult,\r\n                    ResultCode: result.resultCode,\r\n                    ErrorMessage: null\r\n                };\r\n\r\n                if (!isNil(result)) {\r\n                    if (result.resultCode == \"Authorised\") {\r\n                        setAdyenFailedMessage(\"\");\r\n\r\n                        if (isNil(localBilling) || localBilling == \"\") return;\r\n\r\n                        let billingData: checkOutViewModel.IAdyenTempPaymentData = JSON.parse(localBilling);\r\n                        if (!isNil(selectedOrderDetailsFromStore)) {\r\n                            let postOrder: orderModel.IOrderRequest = {\r\n                                ...selectedOrderDetailsFromStore,\r\n                                BillingAddress: billingData.Address1,\r\n                                BillingPostcode: billingData.PostCode,\r\n                                BillingState: billingData.State,\r\n                                BillingSuburb: billingData.Suburb,\r\n                                RDPaymentID: paymentID,\r\n                                NameOnCreditCard: billingData.NameOnCard\r\n                            };\r\n                            await saveRetryPayment(postOrder, postAdyenSession);\r\n\r\n                            //   doPlaceOrder(postOrder, postAdyenSession);\r\n                        }\r\n\r\n                    }\r\n                    else if (result.resultCode == \"Refused\") {\r\n                        if (!isNil(selectedOrderDetailsFromStore)) {\r\n                            let postOrder: orderModel.IOrderRequest = {\r\n                                ...selectedOrderDetailsFromStore,\r\n                                RDPaymentID: paymentID,\r\n                            };\r\n                            await doSavePaymentLog(postOrder, postAdyenSession);\r\n\r\n                            await doGetPaymentIDs(postOrder?.OrderID, postOrder?.Country);\r\n                            setAdyenFailedMessage(paymentErrorMessage);\r\n                            setIsShowAdyenRetryButton(true);\r\n                        }\r\n                    }\r\n                }\r\n            },\r\n            beforeSubmit: (data: any, component: any, actions: any): Promise<void> => {\r\n                //state or store changed here, are not updated in onPaymentCompleted\r\n                //so have to use local storage to temp store billing data and card holder name.\r\n                let tempData: checkOutViewModel.IAdyenTempPaymentData = {\r\n                    Address1: data.billingAddress.street,\r\n                    Address2: data.billingAddress.houseNumberOrName,\r\n                    PostCode: data.billingAddress.postalCode,\r\n                    Suburb: data.billingAddress.city,\r\n                    State: data.billingAddress.stateOrProvince,\r\n                    NameOnCard: data.paymentMethod.holderName,\r\n                };\r\n\r\n                localStorage.setItem(\"billing\", JSON.stringify(tempData));\r\n                setAdyenFailedMessage(\"\");\r\n                setPlaceOrderMessage(\"\");\r\n                return actions.resolve(data);\r\n            },\r\n            onError: async (error: any, component: any) => {\r\n                let paymentID = localStorage.getItem(\"paymentID\");\r\n                if (!isNil(selectedOrderDetailsFromStore)) {\r\n                    let postOrder: orderModel.IOrderRequest = {\r\n                        ...selectedOrderDetailsFromStore,\r\n                        RDPaymentID: paymentID,\r\n                    };\r\n\r\n                    let postAdyenSession: checkOutViewModel.IAdyenSession = {\r\n                        SessionID: adyenSession.SessionID,\r\n                        SessionData: adyenSession.SessionData,\r\n                        SessionResult: null,\r\n                        ResultCode: \"Error\",\r\n                        ErrorMessage: error.message\r\n                    };\r\n                    await doSavePaymentLog(postOrder, postAdyenSession);\r\n\r\n                    await doGetPaymentIDs(selectedOrderDetailsFromStore?.OrderID, selectedOrderDetailsFromStore?.Country);\r\n                    setAdyenFailedMessage(paymentErrorMessage);\r\n                    //setIsShowAdyenRetryButton(true);\r\n                }\r\n            },\r\n            // Any payment method specific configuration. Find the configuration specific to each payment method:  https://docs.adyen.com/payment-methods\r\n            // For example, this is 3D Secure configuration for cards:\r\n            paymentMethodsConfiguration: {\r\n                card: {\r\n                    hasHolderName: true,\r\n                    holderNameRequired: true,\r\n                    billingAddressRequired: true,\r\n                    data: {\r\n                        billingAddress: {\r\n                            \"country\": selectedDeliveryFromStore?.Country?.code == rdEnum.enumCountryCode.NewZealand ? \"NZ\" : \"AU\",\r\n                            placeholder: {\r\n                                \"postalCode.placeholder\": \"Postcode\",\r\n                            },\r\n                        },\r\n                    },\r\n                    brands: ['mc', 'visa', 'amex']\r\n                },\r\n                //threeDS2: { // Web Components 4.0.0 and above: sample configuration for the threeDS2 action type\r\n                //    challengeWindowSize: '05'\r\n                //    // Set to any of the following:\r\n                //    // '02': ['390px', '400px'] -  The default window size\r\n                //    // '01': ['250px', '400px']\r\n                //    // '03': ['500px', '600px']\r\n                //    // '04': ['600px', '400px']\r\n                //    // '05': ['100%', '100%']\r\n                //},\r\n            },\r\n            showPayButton: false\r\n        };\r\n\r\n        return configuration;\r\n\r\n    }\r\n\r\n    const doSavePaymentLog = async (order: orderModel.IOrderRequest, adyenSession: checkOutViewModel.IAdyenSession) => {\r\n        let response = await paymentService.savePaymentLog(order, adyenSession);\r\n        if (response.status) {\r\n\r\n        }\r\n        else {\r\n\r\n        }\r\n    }\r\n\r\n    const doGetPaymentIDs = async (orderID: any, country: any) => {\r\n        let response = await paymentService.getNewPaymentIDs(orderID, country);\r\n        if (response.status) {\r\n            let responseData = response.data;\r\n            setAdyenSession({\r\n                ...adyenSession,\r\n                SessionID: responseData.adyenSessionID,\r\n                SessionData: responseData.adyenSessionData\r\n            });\r\n            localStorage.setItem(\"paymentID\", responseData.rdPaymentTransactionID);\r\n            //setShowButton(true);\r\n        }\r\n        else {\r\n            localStorage.setItem(\"paymentID\", \"\");\r\n            setAdyenFailedMessage(response.message);\r\n            setAdyenSession(checkoutHelper.getAdyenInitState());\r\n            //setShowButton(false);\r\n        }\r\n    }\r\n\r\n    const saveRetryPayment = async (order: orderModel.IOrderRequest, adyenSession: checkOutViewModel.IAdyenSession) => {\r\n        let response = await orderService.saveRetryPayment(order, adyenSession);\r\n        if (response.status) {\r\n            setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        }\r\n\r\n    }\r\n\r\n\r\n    useEffect(() => {\r\n        let ignore = false;\r\n        const doInitPayment = async () => {\r\n            let adyenConfig = doGetAdyenConfig();\r\n            const checkout = await AdyenCheckout(adyenConfig);\r\n            if (!isNil(paymentContainer?.current) && !ignore) {\r\n                let customCard = checkout.create('dropin', {    //securedfields, card,dropin\r\n                    onReady: () => {\r\n                        setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Init);\r\n                    },\r\n                }).mount(paymentContainer.current);\r\n                setCustomCardInstance(customCard);\r\n            }\r\n        }\r\n\r\n        if (!isNil(adyenSession?.SessionID) && adyenSession?.SessionID != \"\"\r\n            && !isNil(adyenSession?.SessionData) && adyenSession?.SessionData != \"\") {\r\n            doInitPayment();\r\n        }\r\n\r\n        return () => {\r\n            ignore = true;\r\n        }\r\n    }, [paymentContainer.current, adyenSession]);\r\n\r\n\r\n    useEffect(() => {\r\n        if (!isNil(paymentContainer.current) && !isNil(adyenSession?.SessionID) && adyenSession?.SessionID != \"\") {\r\n            //not show \"Pay\" button before payment section shown up\r\n\r\n            setTimeout(() => {\r\n                setShowButton(true);\r\n            }, 500);\r\n        }\r\n        else {\r\n            setShowButton(false);\r\n        }\r\n    }, [paymentContainer.current]);\r\n\r\n\r\n    useEffect(() => {\r\n        if (dialogVisible) {\r\n            doGetPaymentIDs(selectedOrderDetailsFromStore?.OrderID, selectedOrderDetailsFromStore?.Country);\r\n\r\n            setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Init);\r\n            setIsShowAdyenRetryButton(false);\r\n            setAdyenFailedMessage(\"\");\r\n        }\r\n        else {\r\n            setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n            //setShowButton(false);\r\n        }\r\n    }, [selectedOrderDetailsFromStore, dialogVisible]);\r\n\r\n    const toThirdParty = () => {\r\n        window.open('https://www.adyen.com/en_AU/')\r\n    }\r\n\r\n    return (\r\n        <>\r\n            <div className='variant-btn-panel'>\r\n                <Button className='variant-btn'\r\n                    onClick={() => onShowDialog()}\r\n                >\r\n                    <h6>{buttonText}</h6>\r\n                </Button>\r\n            </div>\r\n            <Dialog header=\"Re-try Payment\"\r\n                className='order-details-dialog' visible={dialogVisible}\r\n                position='bottom' style={{ maxWidth: '1100px' }}\r\n                draggable={false}\r\n                resizable={true} onHide={() =>\r\n                    onHideDialog()}>\r\n                <Row>\r\n                    <Col md={{ span: 8, offset: 2 }} xs={12}>\r\n                        <div id=\"customCard-container\" ref={paymentContainer} style={{ height: \"auto\" }}>\r\n                        </div>\r\n                        <div className='third-party-reminder'>\r\n                            Cadillac uses a third party payment provider called Adyen to facilitate payment of your deposit and Cadillac will not collect or store your card information. <a className='thrid-party-link' onClick={() => toThirdParty()}>Learn more</a> about how Adyen processes your transaction and manages your data.\r\n                        </div>\r\n                    </Col>\r\n                </Row>\r\n                <Row>\r\n                    <Col md={{ span: 8, offset: 2 }} xs={12}>\r\n                        {!isNil(adyenFailedMessage) && adyenFailedMessage != \"\" && (\r\n                            <div className=\"text-error\">{adyenFailedMessage}</div>\r\n                        )}\r\n                    </Col>\r\n                </Row>\r\n                <Row>\r\n                    <Col md={{ span: 8, offset: 2 }} xs={12}>\r\n                        <div className='pipeline-btn-panel'>\r\n                            {isShowAdyenRetryButton && (\r\n                                <div className=\"retry-payment-button-wrapper\">\r\n                                    <Button className=\"pipeline-btn\"\r\n                                        onClick={() => {\r\n                                            customCardInstance.update();\r\n                                            customCardInstance.remount();\r\n                                            setIsShowAdyenRetryButton(false);\r\n                                            setAdyenFailedMessage(\"\");\r\n\r\n                                            setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Init);\r\n                                        }}\r\n                                    >\r\n                                        <span>Re-try Payment</span>\r\n                                    </Button>\r\n                                </div>\r\n                            )}\r\n\r\n                            {confirmOrderSubmittingStatus == rdEnum.enumProcessingStatus.Processing && (\r\n                                <Button type=\"button\" disabled={true} className=\"pipeline-btn\">\r\n                                    <ProgressSpinner\r\n                                        style={{ width: '16px', height: '16px' }}\r\n                                        strokeWidth=\"5\"\r\n                                        animationDuration=\".8s\"\r\n                                    />\r\n                                </Button>\r\n                            )}\r\n\r\n                            {confirmOrderSubmittingStatus == rdEnum.enumProcessingStatus.Init && showButton && (\r\n                                <Button\r\n                                    className=\"pipeline-btn\"\r\n                                    onClick={() => {\r\n                                        if (customCardInstance.isValid) {\r\n                                            setConfirmOrderSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n                                        }\r\n                                        customCardInstance.submit();\r\n                                    }}\r\n                                >\r\n                                    <span>Pay</span>\r\n                                </Button>\r\n                            )}\r\n                        </div>\r\n                    </Col>\r\n                </Row>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default RetryPayment","import { useDispatch, useSelector } from 'react-redux';\r\nimport { GoogleMap, useJsApiLoader, LoadScript, Marker, InfoWindow } from '@react-google-maps/api';\r\nimport { getCMSAssets, getGoogleMapAPIKey, getImageFileNameByID2 } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useState, useEffect } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport PickupLocation from './PickupLocation';\r\nimport * as orderModel from 'model/IOrder';\r\n\r\nimport moment from 'moment';\r\n\r\nconst ViewAppointment = (props: any) => {\r\n    const { buttonText } = props;\r\n\r\n\r\n    const [dialogVisible, setDialogVisible] = useState(false);\r\n\r\n    const orderScheduleDeliveryFromStore: scheduleDeliveryModel.IOrderScheduleDelivery = useSelector((state: IAppState) => {\r\n        return state?.orderScheduleDelivery;\r\n    });\r\n\r\n    const orderDetailsFromStore: orderModel.IOrderRequest | null = useSelector((state: IAppState) => {\r\n        return state?.orderDetails;\r\n    });\r\n\r\n\r\n    const onShowDialog = () => {\r\n        setDialogVisible(true);\r\n    }\r\n\r\n    const onHideDialog = () => {\r\n        setDialogVisible(false);\r\n    }\r\n\r\n\r\n\r\n    return (\r\n        <>\r\n            <div className='pipeline-btn-panel'>\r\n                <Button className='pipeline-btn'\r\n                    onClick={() => onShowDialog()}\r\n                >\r\n                    <h6>{buttonText}</h6>\r\n                </Button>\r\n            </div>\r\n\r\n            <Dialog\r\n                className='order-details-dialog view-appointment-dialog'\r\n                visible={dialogVisible} position='bottom'\r\n                style={{ minWidth: '40% !important' }} draggable={false}\r\n                resizable={true}\r\n                onHide={() => onHideDialog()}\r\n            >\r\n                <div className='view-appointment-dialog-container'>\r\n                    <Row>\r\n                        <Col className=\"container-title\">YOUR DELIVERY</Col>\r\n                    </Row>\r\n                    <Row>\r\n                        <Col className=\"desc\">Delivery of your Cadillac is fast approaching. Please remember full payment for your vehicle is required 3 business days prior to your delivery appointment.</Col>\r\n                    </Row>\r\n                    <Row>\r\n                        <Col md={6} xs={12} className=\"view-appointment-wrapper\">\r\n                            <div className='view-appointment-section'>\r\n                                <div className='section-title'>APPOINTMENT</div>\r\n\r\n                                <div className='view-appointment-item'>\r\n                                    <div className=\"title\">Date</div>\r\n                                    <div className=\"data\">{moment(orderScheduleDeliveryFromStore?.DeliveryDate).format(\"dddd, DD MMMM YYYY\")}</div>\r\n                                </div>\r\n                                <div className='view-appointment-item'>\r\n                                    <div className=\"title\">Time</div>\r\n                                    <div className=\"data\">{orderScheduleDeliveryFromStore?.DeliveryTime}</div>\r\n                                </div>\r\n                                <div className='view-appointment-item'>\r\n                                    {orderScheduleDeliveryFromStore?.DeliveryOption === rdEnum.enumDeliveryOptions.Pickup ? (\r\n                                        <>\r\n                                            <div className=\"title\">{orderScheduleDeliveryFromStore?.PickupLocationName}</div>\r\n                                            <div className=\"data\">{orderScheduleDeliveryFromStore?.DeliveryLocationAddress}</div>\r\n                                        </>\r\n                                    )\r\n                                        :\r\n                                        (\r\n                                            <>\r\n                                                <div className=\"title\">Delivery Location</div>\r\n                                                <div className=\"data\">{orderScheduleDeliveryFromStore?.DeliveryLocationAddress}</div>\r\n                                            </>\r\n                                        )\r\n                                    }\r\n                                </div>\r\n                            </div>\r\n                        </Col>\r\n                        <Col md={6} xs={12} className=\"view-appointment-wrapper\">\r\n                            <div className='view-appointment-section'>\r\n                                <div className='section-title'>GET SUPPORT</div>\r\n                                <div className='section-desc'>We're here to help every step of the way. Please contact your Cadillac Sales Ambassador if you need support arranging your payment.</div>\r\n                                <div className='view-appointment-item'>\r\n                                    {\r\n                                        orderDetailsFromStore?.Country === rdEnum.enumCountryCode.NewZealand ? (\r\n                                            <div className='view-appointment-item'>\r\n                                                <div className=\"title\">Cadillac New Zealand</div>\r\n                                                <div className=\"data\">0800 223 455</div>\r\n                                            </div>\r\n                                        ) : (\r\n                                                <div className='view-appointment-item'>\r\n                                                    <div className=\"title\">Cadillac Australia</div>\r\n                                                    <div className=\"data\">1800 223 455</div>\r\n                                                </div>\r\n                                            )\r\n                                    }\r\n\r\n\r\n                                </div>\r\n                            </div>\r\n                        </Col>\r\n                    </Row>\r\n                </div>\r\n            </Dialog>\r\n        </>\r\n    )\r\n}\r\n\r\nexport default ViewAppointment","import React, { useContext, useEffect, useRef, useState } from 'react'\r\nimport { Accordion, AccordionContext, Button, Card, Col, Row, useAccordionButton } from 'react-bootstrap';\r\nimport ProvideDetails from './ProvideDetails';\r\nimport { getCMSAssets, getFrontendUrl } from 'helpers/Uri';\r\nimport ArrangePayment from './ArrangePayment';\r\nimport ScheduleDelivery from './ScheduleDelivery';\r\nimport ReviewContract from './ReviewContract';\r\nimport FinanceApplication from 'pages/Global/orders/purchasingProgress/FinanceApplication';\r\nimport * as pipelineModel from 'model/IPipeLine';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport RetryPayment from './RetryPayment';\r\nimport ViewAppointment from 'pages/Global/orders/purchasingProgress/ViewAppointment';\r\nimport { isNil } from 'lodash';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as docModel from 'model/IDocuments';\r\nimport * as docService from 'services/Document';\r\n\r\nimport { enumClientTypes, enumDocumentType } from \"helpers/enum\";\r\n\r\ntype AccordionOpenType = {\r\n    [key: string]: boolean;\r\n};\r\n\r\nconst Progress = (props: any) => {\r\n\r\n    const orderCustomerDetailsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderCustomerDetails;\r\n    });\r\n    const orderDocumentsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderDocuments;\r\n    });\r\n\r\n    const { progressList, isSuccessWaitListedPage } = props;\r\n\r\n    const lastPathname = window.location.pathname;\r\n\r\n\r\n    const [lastStepCollapseHeight, setLastStepCollapseHeight] = useState(0);\r\n    const [activeStep, setActiveStep] = useState<string>(\"\");\r\n\r\n\r\n\r\n    const emptyRef = useRef<any>();\r\n    const lastStepCollapseHeightRef = useRef<any>();\r\n\r\n\r\n    const [accordionOpen, setAccordionOpen] = useState<AccordionOpenType>({});\r\n\r\n    useEffect(() => {\r\n        if (progressList) {\r\n            const accordionOpenInit: AccordionOpenType = {};\r\n            progressList.forEach((item: any, index: any) => {\r\n                accordionOpenInit[`btn${item.step}`] = item.pipelineBarStepStatus == 0;\r\n\r\n                if (item.pipelineBarStepStatus == 0) {\r\n                    //console.log(\"set value\")\r\n                    setActiveStep(item.step.toString());\r\n                }\r\n            });\r\n            setAccordionOpen(accordionOpenInit);\r\n        }\r\n\r\n    }, [progressList]);\r\n\r\n\r\n    const PurchasingStepsToggle = ({ children, eventKey, callback, isOpen, pipelineStatus }: any) => {\r\n        //useEffect(() => {\r\n        //    if (accordionOpen.btn6 && lastStepCollapseHeightRef.current) {\r\n        //        const height = lastStepCollapseHeightRef.current?.offsetHeight;\r\n        //        setLastStepCollapseHeight(height);\r\n        //    }\r\n        //}, [accordionOpen.btn6]);\r\n\r\n        const decoratedOnClick = useAccordionButton(\r\n            eventKey,\r\n            () => {\r\n                if (callback) {\r\n                    callback(eventKey); // Invoke the callback if provided\r\n                }\r\n\r\n                //console.log(eventKey);\r\n                //set other AccordionOpenType as false\r\n                let updatedAccordionOpen: AccordionOpenType = {};\r\n                for (const key of Object.keys(accordionOpen)) {\r\n                    if (key == `btn${eventKey}`) {\r\n                        let collapseOpenState = !accordionOpen[`${key}` as keyof AccordionOpenType];\r\n                        //if (collapseOpenState) {\r\n                        //    setActiveEventKey(eventKey);\r\n                        //}\r\n                        updatedAccordionOpen[`${key}`] = collapseOpenState;\r\n                    }\r\n                    else {\r\n                        updatedAccordionOpen[`${key}`] = false;\r\n                    }\r\n                }\r\n                setAccordionOpen(updatedAccordionOpen);\r\n\r\n                //setAccordionOpen({\r\n                //    ...accordionOpen,\r\n                //    [`btn${eventKey}` as keyof AccordionOpenType]: !accordionOpen[`btn${eventKey}` as keyof AccordionOpenType]\r\n                //});\r\n            }\r\n        );\r\n\r\n        //disabled={isNil(pipelineStatus)}\r\n        return (\r\n            <button\r\n\r\n                type=\"button\"\r\n                onClick={decoratedOnClick}\r\n                className='purchasing-steps-accordion-header-btn'\r\n                style={{ cursor: 'pointer' }}\r\n                aria-expanded={accordionOpen[`btn${eventKey}` as keyof AccordionOpenType]}\r\n            >\r\n                <div className='img-panel'>\r\n                    {\r\n                        pipelineStatus == 1 ?\r\n                            <img alt=\"\" src={`${getCMSAssets()}/users/tick-circle.svg`} />\r\n                            :\r\n                            pipelineStatus == 0 ?\r\n                                <div className='current-step-circle'>\r\n                                    <div className='inner-circle'>\r\n                                        <div className='central-dot' />\r\n                                    </div>\r\n                                </div>\r\n                                :\r\n                                <div className='unfinished-dot' />\r\n                    }\r\n                </div>\r\n                <span>{children}</span>\r\n            </button>\r\n        );\r\n    }\r\n\r\n    // const onDownloadContract = async () => {\r\n    //     let findDocs = orderDocumentsFromStore.filter((m: docModel.IDocumentItem) => m.DocumentType == enumDocumentType.Contract);\r\n\r\n    //     if (!isNil(findDocs) && findDocs.length > 0) {\r\n    //         let requestFrontData: docModel.IDocument = {\r\n    //             YanaCustomerID: orderCustomerDetailsFromStore?.yanaCustomerID || \"\",\r\n    //             YanaCustomerNo: orderCustomerDetailsFromStore?.yanaCustomerNo || \"\",\r\n    //             YanaOrderID: orderCustomerDetailsFromStore?.yanaOrderID || \"\",\r\n    //             YanaOrderNo: orderCustomerDetailsFromStore?.yanaOrderNo || \"\",\r\n    //             Country: orderCustomerDetailsFromStore?.country || \"\",\r\n    //             Documents: [findDocs[findDocs.length - 1]]\r\n    //         };\r\n    //         let response = await docService.getSpecificDocuments(requestFrontData);\r\n    //         if (response.status) {\r\n    //             let downloadUrl = response.data[0].downloadUrl;\r\n    //             window.open(`${response.data[0].downloadUrl}`);\r\n    //         }\r\n    //     }\r\n    // }\r\n\r\n    const onDownloadContract = async () => {\r\n        await onDownload();\r\n    };\r\n\r\n    const onDownload = async () => {\r\n        let findDocs = orderDocumentsFromStore.filter((m: docModel.IDocumentItem) => m.DocumentType == enumDocumentType.Contract);\r\n\r\n        if (!isNil(findDocs) && findDocs.length > 0) {\r\n            let requestFrontData: docModel.IDocument = {\r\n                YanaCustomerID: orderCustomerDetailsFromStore?.yanaCustomerID || \"\",\r\n                YanaCustomerNo: orderCustomerDetailsFromStore?.yanaCustomerNo || \"\",\r\n                YanaOrderID: orderCustomerDetailsFromStore?.yanaOrderID || \"\",\r\n                YanaOrderNo: orderCustomerDetailsFromStore?.yanaOrderNo || \"\",\r\n                Country: orderCustomerDetailsFromStore?.country || \"\",\r\n                Documents: [findDocs[findDocs.length - 1]]\r\n            };\r\n            let response = await docService.getSpecificDocuments(requestFrontData);\r\n            if (response.status) {\r\n                const link = document.createElement('a');\r\n                link.href = response.data[0].downloadUrl;\r\n                link.click();\r\n            }\r\n        }\r\n    };\r\n\r\n    const buttonTemplate = (stepItem: pipelineModel.IPipeLineItem) => {\r\n        if (stepItem.buttonID == rdEnum.enumPipelineButtonID.RetryPayment) {\r\n            return (<RetryPayment buttonText={stepItem.buttonText} />);\r\n        }\r\n        else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.ProvideDetail) {\r\n            if (lastPathname !== `${getFrontendUrl()}/order-success`) {\r\n                return (<ProvideDetails buttonText={stepItem.buttonText} />);\r\n            }\r\n        }\r\n        else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.StartYourApplication) {\r\n            return (<FinanceApplication />);  //todo:\r\n        }\r\n        else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.DownloadContract) {\r\n            return (\r\n                <div className='pipeline-btn-panel'>\r\n                    <Button className='pipeline-btn'\r\n                        onClick={() => onDownloadContract()}\r\n                    >\r\n                        {stepItem.buttonText}\r\n                    </Button>\r\n                </div>\r\n            )\r\n        }\r\n        else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.ReviewSignYourContract) {\r\n            return (<ReviewContract buttonText={stepItem.buttonText} />);\r\n        }\r\n        else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.SchedulePickup) {\r\n            return (<ScheduleDelivery isReschedule={false} buttonText={stepItem.buttonText} />);\r\n        }\r\n        else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.ArranagePayment) {\r\n            return (<ArrangePayment buttonText={stepItem.buttonText} />);\r\n        }\r\n        else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.ViewAppointment) {\r\n            return (<ViewAppointment buttonText={stepItem.buttonText} />);\r\n        }\r\n        //else if (stepItem.buttonID == rdEnum.enumPipelineButtonID.ViewDelivery) {\r\n        //    return (<ScheduleDelivery isReschedule={false} buttonText={stepItem.buttonText} />);\r\n        //}\r\n\r\n        return (<></>);\r\n    }\r\n\r\n\r\n\r\n    return (\r\n        <div>\r\n            {/*{ console.log(progressList)}*/}\r\n            <Accordion className='purchasing-steps-accordion'\r\n                style={{\r\n                    marginLeft: '0', border: 'none',\r\n                    minWidth: 'auto'\r\n                }}\r\n            >\r\n                {\r\n                    progressList && progressList?.map((stepItem: pipelineModel.IPipeLineItem, index: any) => {\r\n                        return (\r\n                            <Accordion\r\n                                activeKey={activeStep}\r\n                                onSelect={(key:any) => setActiveStep(key)}>\r\n                                <Card key={stepItem.step.toString() + index}>\r\n                                    {\r\n                                        index != progressList?.length - 1\r\n                                            ?\r\n                                            <div className='steps-line'></div>\r\n                                            :\r\n                                            <></>\r\n                                    }\r\n                                    <Card.Header>\r\n                                        <PurchasingStepsToggle\r\n                                            eventKey={stepItem.step.toString()}\r\n                                            pipelineStatus={stepItem.pipelineBarStepStatus}>\r\n                                            {!isNil(stepItem.date) && (<p>{stepItem.date}</p>)}\r\n                                            <h6 className={\r\n                                                stepItem.pipelineBarStepStatus == '0' ? 'current-step' :\r\n                                                    stepItem.pipelineBarStepStatus == '1' ? 'finished-step' :\r\n                                                        stepItem.pipelineBarStepStatus == '2' ? 'unfinished-step' : ''}>\r\n                                                {stepItem.name}\r\n                                            </h6>\r\n                                        </PurchasingStepsToggle>\r\n                                    </Card.Header>\r\n                                    <Accordion.Collapse eventKey={stepItem.step.toString()}>\r\n                                        <Card.Body>\r\n                                            <span className='step-desc'>{stepItem.desc}</span>\r\n                                            {buttonTemplate(stepItem)}\r\n                                        </Card.Body>\r\n                                    </Accordion.Collapse>\r\n                                </Card>\r\n                            </Accordion>\r\n                        )\r\n                    })\r\n\r\n                }\r\n            </Accordion>\r\n        </div>\r\n    )\r\n}\r\n\r\nexport default Progress","import { getCMSAssets } from 'helpers/Uri';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useParams, Link, useNavigate } from 'react-router-dom';\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { isNil } from 'lodash';\r\n\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport ProgressSteps from '../Global/orders/purchasingProgress/ProgressSteps';\r\n\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as configModel from 'model/IUserSelectedConfig';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as pipelineModel from 'model/IPipeLine';\r\nimport * as paymentOptionsModel from 'model/IPaymentOptions';\r\n\r\nimport * as orderService from 'services/Order';\r\n\r\nimport * as rdUri from 'helpers/Uri';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { useMsal } from \"@azure/msal-react\";\r\nimport { useSatellite } from 'helpers/useSatellite';\r\nimport { useScreenSize } from 'helpers/useSreenSize';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\n\r\nconst OrderPlacedSuccess = () => {\r\n    const { instance } = useMsal();\r\n    const activeAccount = instance.getActiveAccount();\r\n    const satellite = useSatellite();\r\n    const screenSize = useScreenSize();\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const { yanaCustomerID, yanaCustomerNo, yanaOrderID, yanaOrderNo, rdRefNo, country } = useParams();\r\n\r\n    const [order, setOrder] = useState<orderModel.IOrderRequest | null>(null);\r\n    const [financeLink, setFinanceLink] = useState(\"\");\r\n    const [showContactMessage, setShowContactMessage] = useState(true);\r\n\r\n    // const [stepsList, setStepsList] = useState<pipelineModel.IPipeLineItem[]>([]);\r\n    const [currentStep, setCurrentStep] = useState(1);\r\n\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n    }\r\n\r\n    const onHide = () => {\r\n        setIsOpen(false);\r\n    };\r\n\r\n    var currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n    //The 3 attributes: stepsList, currentStep, navPage need to pass props to PurchasingProgress Component\r\n    // const stepsList = [\r\n    //    { step: '0', name: 'Order Placed', date: '09/09/2024' },\r\n    //    { step: '1', name: 'Provide Your Details', date: '10/09/2024' },\r\n    //    { step: '2', name: 'Sign Your Contract', date: '15/09/2024' },\r\n    //    { step: '3', name: 'Order Confirmed', date: '20/09/2024' },\r\n    // ]\r\n\r\n    const stepsList = [\r\n        { step: '0', name: 'Order Placed', pipelineBarStepStatus: 1, date: '' },\r\n        { step: '1', name: 'Provide Your Details', pipelineBarStepStatus: 0, desc: \"To complete your order, we'll need some additional information.\", date: '' },\r\n        { step: '2', name: 'Sign Your Contract', pipelineBarStepStatus: 2, desc: \"You've successfully signed your contract. We'll review and co-sign your contract, then confirm your order.\", date: '' },\r\n        { step: '3', name: 'Order Confirmed', pipelineBarStepStatus: 2, date: '' },\r\n    ];\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const doGetOrder = async () => {\r\n        setShowContactMessage(false);\r\n        setFinanceLink(\"\");\r\n        let response = await orderService.getOrderDetailsByYanaIDs(yanaCustomerID, yanaCustomerNo, yanaOrderID, yanaOrderNo, country);\r\n        if (response.status) {\r\n            let orderData = response.data;\r\n            let orderFromAPI: orderModel.IOrderRequest = {\r\n                Country: orderData?.orderVehicle?.country,\r\n                State: orderData?.orderVehicle?.state,\r\n                VariantName: orderData?.orderVehicle?.variantName,\r\n                VariantPrice: orderData.orderVehicle.variantPrice,\r\n                ExteriorName: orderData?.orderVehicle?.exteriorName,\r\n                ExteriorPrice: orderData?.orderVehicle?.exteriorPrice,\r\n                InteriorName: orderData?.orderVehicle?.interiorName,\r\n                InteriorPrice: orderData?.orderVehicle?.interiorPrice,\r\n                VehicleImages: orderData?.orderVehicle?.variantPicture,\r\n                VehicleThumbnail: orderData?.orderVehicle?.vehicleThumbnail,\r\n                Options: getOrderOptions(orderData?.orderVehicle?.options),\r\n                DeliveryLocationState: orderData?.delivery?.deliveryLocationState,\r\n                DeliveryLocationSuburb: orderData?.delivery?.deliveryLocationSuburb,\r\n                DeliveryLocationPostcode: orderData?.delivery?.deliveryLocationPostcode,\r\n                DeliveryLocationAddress: orderData?.delivery?.deliveryLocationAddress,\r\n                DeliveryOption: orderData?.delivery?.deliveryOption,\r\n                PickupLocationName: orderData?.delivery?.pickupLocationName,\r\n                Available: orderData?.delivery?.available,\r\n                PaymentOption: orderData?.paymentOption,\r\n                DriveawayCost: {\r\n                    LuxuryCarTax: orderData?.driveAwayCost?.luxuryCarTax,\r\n                    LocalStampDuty: orderData?.driveAwayCost?.localStampDuty,\r\n                    LocalRegistrationCost: orderData?.driveAwayCost?.localRegistrationCost,\r\n                    LocalCTP: orderData?.driveAwayCost?.localCTP,\r\n                    LocalPlateFee: orderData?.driveAwayCost?.localPlateFee,\r\n                    HomeDelivery: orderData?.driveAwayCost?.homeDelivery,\r\n                    DriveawayPrice: orderData?.driveAwayCost?.driveawayPrice,\r\n                    OnRoadFee: orderData?.driveAwayCost?.onRoadFeeSubtotal,\r\n                    SubTotal: orderData?.driveAwayCost?.subTotal,\r\n                    VariantName: \"\",\r\n                    VariantID: \"\",\r\n                    VariantPrice: 0,\r\n                    ExteriorID: \"\",\r\n                    ExteriorName: \"\",\r\n                    ExteriorPrice: 0,\r\n                    InteriorID: \"\",\r\n                    InteriorName: \"\",\r\n                    InteriorPrice: 0,\r\n                    GST: orderData?.driveAwayCost?.gst,\r\n                    RoadUserChargers: orderData?.driveAwayCost?.roadUserChargers,\r\n                    TyreStewardshipFee: orderData?.driveAwayCost?.tyreStewardshipFee,\r\n                    Options: [],\r\n                },\r\n                Finance: null,\r\n                Email: orderData?.orderCustomer?.email,\r\n                FirstName: orderData?.orderCustomer?.firstName,\r\n                LastName: orderData?.orderCustomer?.lastName,\r\n                Mobile: orderData?.orderCustomer?.mobile,\r\n                ABN: orderData?.orderCustomer?.abn,\r\n                CustomerCountry: orderData?.orderCustomer?.customerCountry,\r\n                BusinessName: orderData?.orderCustomer?.businessName,\r\n                CustomerType: orderData?.orderCustomer?.customerType,\r\n                BillingAddress: orderData?.orderCustomer?.billingAddress,\r\n                BillingSuburb: orderData?.orderCustomer?.billingSuburb,\r\n                BillingPostcode: orderData?.orderCustomer?.billingPostCode,\r\n                BillingState: orderData?.orderCustomer?.billingState,\r\n                RegoAddress: orderData?.orderCustomer?.regoAddress,\r\n                RegoSuburb: orderData?.orderCustomer?.regoSuburb,\r\n                RegoPostcode: orderData?.orderCustomer?.regoPostCode,\r\n                RegoState: orderData?.orderCustomer?.regoState,\r\n                NameOnCreditCard: null,\r\n                PrivacyStatement: true,\r\n                RDAcountID: orderData?.rdAccountID,\r\n                OrderID: orderData?.orderID,\r\n                YanaOrderReservationID: null,\r\n                YanaOrderReservationNo: null,\r\n                YanaOrderID: orderData.yanaOrderIDs.yanaOrderID,\r\n                YanaOrderNo: orderData.yanaOrderIDs.yanaOrderNo,\r\n                YanaCustomerID: orderData.yanaOrderIDs.yanaCustomerID,\r\n                YanaCustomerNo: orderData.yanaOrderIDs.yanaCustomerNo,\r\n                RDPaymentID: null,\r\n                FromLinkSource: null,\r\n                PaymentHistory: null,\r\n                DownPayment: null,\r\n                PaymentDueDate: null,\r\n                FinalPaymentAmount: null,\r\n                Total: orderData.orderVehicle.totalPrice,\r\n                Balance: orderData.currentBalance,\r\n                PaymentAmount: null,\r\n                Comments: orderData.comments,\r\n            };\r\n            setOrder(orderFromAPI);\r\n\r\n            setFinanceLink(orderData.linkToFinanceApplication);\r\n\r\n            setCurrentStep(orderData.currentStepYanaValue);\r\n            let pipelines: pipelineModel.IPipeLineItem[] = [];\r\n            let pipeLineData = orderData.pipeLines;\r\n            if (!isNil(pipeLineData) && pipeLineData.length > 0) {\r\n                pipeLineData.map((item: any) => {\r\n                    pipelines.push({\r\n                        stepNo: item.pipelineNumber,\r\n                        step: item.pipelineBarStepNumber,\r\n                        name: item.pipelineName,\r\n                        desc: item.pipelineDesc,\r\n                        date: item.completeDate,\r\n                        pipelineBarStepStatus: item.pipelineBarStepStatus,\r\n                        buttonID: item.buttonID,\r\n                        buttonText: item.buttonText,\r\n                    });\r\n                });\r\n            }\r\n\r\n\r\n            //let email: string = activeAccount?.idTokenClaims?.email as string;\r\n            //rdUri.pushToDataLayer({\r\n            //    'event': 'order complete',\r\n            //    'landType': 'land from save',\r\n            //    'userStatus': !isNil(email) && email != \"\" ? 'loggedIn' : 'loggedOut',\r\n            //    'exteriorColour': orderFromAPI.ExteriorName,\r\n            //    'modelVariant': orderFromAPI.VariantName,\r\n            //    'paymentType': orderFromAPI.PaymentOption,\r\n            //    'deliveryPostcode': orderFromAPI.DeliveryLocationPostcode\r\n            //});\r\n\r\n\r\n            //let pageName = \"\";\r\n            //if (order?.Country == rdEnum.enumCountryCode.Australia) {\r\n            //    pageName = \"ca:oc:au:en:t1:order-success:2025-lyriq\";\r\n            //}\r\n            //else if (order?.Country == rdEnum.enumCountryCode.NewZealand) {\r\n            //    pageName = \"ca:oc:nz:en:t1:order-success:2025-lyriq\";\r\n            //}\r\n\r\n            //if (window.digitalData && !isNil(order?.Country) && order?.Country != \"\") {\r\n            //    window.digitalData = {\r\n            //        pageInfo: { pageName: pageName },\r\n            //        internalCampaignInfo: {},\r\n            //        articleInfo: {},\r\n            //        visitorProfile: {},\r\n            //        vehicleInfo: {},\r\n            //        toolsInfo: {}\r\n            //    };\r\n            //}\r\n\r\n        }\r\n        else {\r\n            setShowContactMessage(true);\r\n        }\r\n    }\r\n\r\n\r\n    //const getFinance = (orderFinace: any): paymentOptionsModel.IFinance | null => {\r\n\r\n\r\n    //}\r\n\r\n    const getOrderOptions = (optionData: any): vehicleModel.IVehicleOptions[] | null => {\r\n        let configs: vehicleModel.IVehicleOptions[] = [];\r\n        optionData.map((item: any) => {\r\n            configs.push({\r\n                YanaOptionID: \"\",\r\n                OptionType: item.optionType,\r\n                OptionName: item.optionName,\r\n                OptionPrice: item.optionPrice,\r\n                OptionPicture: [],\r\n                OptionPictureMobile: [],\r\n                OptionDesc: item.optionDesc,\r\n                ChargeType: item.chargeType,\r\n                Disable: false,\r\n                TermsDescription: null\r\n            });\r\n        });\r\n        return configs;\r\n    }\r\n\r\n    useEffect(() => {\r\n\r\n        if (!isNil(yanaCustomerID) && !isNil(yanaCustomerID) && !isNil(yanaOrderID) && !isNil(yanaOrderNo)) {\r\n            doGetOrder();\r\n        }\r\n\r\n    }, [yanaCustomerID, yanaCustomerNo, yanaOrderID, yanaOrderNo]);\r\n\r\n    useEffect(() => {\r\n        dispatch(checkIsShowScrollBar(true));\r\n    }, []);\r\n    useEffect(() => {\r\n        satellite.trackEvent(\"config-ty\");\r\n    }, []);\r\n\r\n    const showPrice = (price: number | null | undefined) => {\r\n        if (price == null || price == undefined || price == 0)\r\n            return \"Included\";\r\n        return currencyFormatter.format(price);\r\n    }\r\n\r\n    const optionsTemplate = (options: vehicleModel.IVehicleOptions[] | null | undefined, optionType: string) => {\r\n        let optionItemsTemplate: any[] = [];\r\n        if (!isNil(options) && options != undefined && options.length > 0) {\r\n            let selectedOptions = options.filter(m => m.OptionType == optionType);\r\n            if (!isNil(selectedOptions) && selectedOptions.length > 0) {\r\n                selectedOptions.map((optionItem: vehicleModel.IVehicleOptions, index: any) => {\r\n                    optionItemsTemplate.push(\r\n                        <div className='details-desc' key={optionType + \"_\" + index}>\r\n                            <p>{optionItem?.OptionName}</p>\r\n                            <span>{showPrice(optionItem?.OptionPrice)}</span>\r\n                        </div>\r\n                    );\r\n                })\r\n            }\r\n        }\r\n\r\n        let template: any[] = [];\r\n        if (optionItemsTemplate.length == 0) {\r\n            template.push(<></>);\r\n        }\r\n        else {\r\n            template.push(\r\n                <div className='details-item'>\r\n                    <div className='details-subtitle'>{optionType == rdEnum.enumVehicleOptionType.Charge ? rdEnum.enumVehicleOptionTypeName.Charge : rdEnum.enumVehicleOptionTypeName.Accessories}</div>\r\n                    {optionItemsTemplate}\r\n                </div>\r\n            );\r\n        }\r\n        return template;\r\n    }\r\n\r\n    const [windowSize, setWindowSize] = useState({\r\n        width: window.innerWidth,\r\n        height: window.innerHeight,\r\n    });\r\n    useEffect(() => {\r\n        // Function to update the state with current window size\r\n        const handleResize = () => {\r\n            setWindowSize({\r\n                width: window.innerWidth,\r\n                height: window.innerHeight,\r\n            });\r\n        };\r\n        // Add event listener for window resize\r\n        window.addEventListener('resize', handleResize);\r\n\r\n        // Remove event listener on cleanup to avoid memory leaks\r\n        return () => {\r\n            window.removeEventListener('resize', handleResize);\r\n        };\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        setWindowDigitalData();\r\n    }, [order, windowSize]);\r\n\r\n    const setWindowDigitalData = () => {\r\n\r\n        let pageName = \"\";\r\n        if (order?.Country == rdEnum.enumCountryCode.Australia) {\r\n            pageName = \"ca:oc:au:en:t1:lyriq-configurator:2025-lyriq:ordersuccess\";\r\n        }\r\n        else if (order?.Country == rdEnum.enumCountryCode.Australia) {\r\n            pageName = \"ca:oc:nz:en:t1:lyriq-configurator:2025-lyriq:ordersuccess\";\r\n        }\r\n\r\n\r\n\r\n\r\n        let email: string = activeAccount?.idTokenClaims?.email as string;\r\n        window.digitalData = {\r\n            pageInfo: {\r\n                pageName: pageName,\r\n                siteSectionsLevel1: \"lyriq-configurator\",\r\n                siteSectionsLevel2: \"2025-lyriq\",\r\n                siteSectionsLevel3: \"ordersuccess\",\r\n                siteSectionsLevel4: \"undefined\",\r\n                siteSectionsLevel5: \"lyriq-configurator:2025-lyriq:ordersuccess\",\r\n                universalID: \"AB52350\",\r\n                url: window.location.href,\r\n                seoStrategyPageName: \"Shop Now | Cadillac\",\r\n                pageType: \"tool\",\r\n                languageSelected: \"english\",\r\n                siteName: \"quantum_au\",\r\n                brand: \"Cadillac\",\r\n                country: selectedDeliveryFromStore.Country?.code,\r\n                region: \"oc\",\r\n                renderedExperience: screenSize,\r\n                viewport: window.innerWidth + 'x' + window.innerHeight,\r\n                orientation: window.innerWidth > window.innerHeight ? \"landscape\" : \"portrait\"\r\n            },\r\n            internalCampaignInfo: {},\r\n            articleInfo: {},\r\n            visitorProfile: {\r\n                userProfileStateAuthentication: !isNil(email) && email != \"\" ? 'loggedIn' : 'loggedOut',\r\n                userLoginStart: !isNil(email) && email != \"\" ? true : false,\r\n                configProducts: null,\r\n                configExtColor: \"\",\r\n                configIntColorUpholstery: \"\",\r\n                configModelPackageVersion: \"\",\r\n                engine: \"\",\r\n                transmission: \"\"\r\n            },\r\n            vehicleInfo: {\r\n                vehicleType: \"suv\",\r\n                modelName: \"lyriq\",\r\n                modelYear: \"2025\",\r\n                bodyStyle: \"lyriq\",\r\n                trimLevel: order?.VariantName,\r\n                condition: \"new\",\r\n                vin: \"\",\r\n            },\r\n            toolsInfo: {\r\n                configProducts: order?.VariantName,\r\n                configExtColor: order?.ExteriorName,\r\n                configIntColorUpholstery: order?.InteriorName || \"\",\r\n                configModelPackageVersion: \"\",\r\n                engine: \"\",\r\n                transmission: \"\",\r\n                wheels: \"AWD\",\r\n                options: \"\",\r\n                dealerName: \"\",\r\n                dealerId: \"\",\r\n                individualProductPrice: \"\",\r\n                configuratorStartPrice: order?.DriveawayCost?.DriveawayPrice,\r\n                configuratorEndPrice: order?.DriveawayCost?.DriveawayPrice,\r\n            }\r\n        };\r\n\r\n    }\r\n\r\n    const toFinancePrivacyPage = () => {\r\n        window.open('https://www.mtf.co.nz/resources/privacy-policy/');\r\n    }\r\n\r\n    const toTermsFees = () => {\r\n        window.open('https://www.mtf.co.nz/resources/interest-rates-and-fees/');\r\n    }\r\n\r\n    if (showContactMessage) {\r\n        return (\r\n            <MainLayoutPage sceneId='container-has-header'>\r\n                <GlobalMenu />\r\n                <div className='purchasing-procedure-container'>\r\n                    {/*<div className='successful-header' style={{ aspectRatio: '1440/500' }}></div>*/}\r\n                    <div className='success-contact-title'>\r\n                        <h1>Please contact cadillac</h1>\r\n                        <h1>Concierge on</h1>\r\n                        {\r\n                            selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.Australia\r\n                            ?\r\n                            <h1>1800 cadillac (223455)</h1>\r\n                            :\r\n                            <h1>0800 cadillac (223455)</h1>\r\n                        }\r\n                        <p>Your Reference number is {rdRefNo}</p>\r\n                    </div>\r\n\r\n                </div>\r\n                <Footer />\r\n            </MainLayoutPage>\r\n        );\r\n\r\n    }\r\n    else {\r\n        return (\r\n            <MainLayoutPage sceneId='container-has-header'>\r\n                <GlobalMenu />\r\n\r\n                <div className='purchasing-procedure-container'>\r\n                    <div className='successful-header' style={{ aspectRatio: '1440/500' }}>\r\n\r\n                        <div className='success-title'>\r\n                            <h1>THANK YOU</h1>\r\n                            <h1>{order?.FirstName}</h1>\r\n                        </div>\r\n                        <div className='success-info'>\r\n                            <h4>Order ID: {order?.YanaOrderNo}</h4>\r\n                            <p>\r\n                                Your order has been placed successfully, and a confirmation email has been sent.\r\n                                <br/>\r\n                                This can take up to 15 minutes to arrive in your inbox.\r\n                            </p>\r\n                            <br />\r\n                            <p>PLEASE CHECK YOUR EMAIL</p>\r\n                        </div>\r\n                        {/* <div className='overlap-panel'></div> */}\r\n\r\n                        {/* <img alt=\"\" className='purchased-vehicle order-placed' src={`${getCMSAssets()}/home/Luxury-Argent Silver Metallic.png`} /> */}\r\n                        <div className='purchased-vehicle order-placed'>\r\n                            <img alt=\"\" className='' style={{ zIndex: 99 }}\r\n                                src={order?.VehicleThumbnail || \"\"} />\r\n\r\n                            {financeLink != \"\" && (\r\n                                <div className='variant-btn-panel'>\r\n                                    <Button className='variant-btn'\r\n                                        onClick={() => handleDialogOpen()\r\n                                            // if (!isNil(financeStatus.FinanceApplicationStepLink) && financeStatus.FinanceApplicationStepLink != '') {\r\n                                            //     window.open(financeStatus.FinanceApplicationStepLink)\r\n                                            // }\r\n                                        }\r\n                                    >\r\n                                        {/* {financeStatus?.FinanceApplicationStepName} */}\r\n                                        BEGIN FINANCE APPLICATION\r\n                                    </Button>\r\n                                </div>\r\n                            )}\r\n                        </div>\r\n\r\n                        <div className='success-steps'>\r\n                            {/* <img alt=\"\" className='purchased-vehicle order-placed' src={`${getCMSAssets()}/success&waitlist/RDtosupply.png`} /> */}\r\n                            <div className='success-steps-title'>\r\n                                <h4>WHAT'S NEXT?</h4>\r\n                                <p>Keep your eye on your emails and order tracker for future updates.</p>\r\n                            </div>\r\n                            <ProgressSteps progressList={stepsList} isSuccessWaitListedPage={true} />\r\n                            {/* <div className='variant-btn-panel'>\r\n                            <Button className='variant-btn'\r\n                                // onClick={(e) =>  handleChangeType(e)}\r\n                                data-pr-tooltip=\"Luxury\"\r\n                            >\r\n                                BEGIN YOUR FINANCE APPLICATION\r\n                            </Button>\r\n                        </div> */}\r\n\r\n                        </div>\r\n\r\n                        {/* {financeLink != \"\" && (\r\n                            <a className=\"success-finance-wrapper\" target=\"_blank\" href={financeLink || \"\"}>\r\n                                BEGIN YOUR FINANCE APPLICATION\r\n                            </a>\r\n                        )} */}\r\n                        <div className='black-bg-panel'></div>\r\n                    </div>\r\n\r\n                    <div className='procedure-container'>\r\n                        <div className='procedure-title'>\r\n                            YOUR ORDER\r\n                    </div>\r\n                        <div className='procedure-subtitle'>\r\n                            Here’s a short summary of your LYRIQ selections.\r\n                    </div>\r\n                        {/* <div className='procedure-map'>\r\n                        Here’s a short summary of your LYRIQ selections.\r\n                    </div> */}\r\n                    </div>\r\n\r\n                    {/* <div className='procedure-container'>\r\n                    <div className='procedure-title'>\r\n                        NEXT STEPS\r\n                    </div>\r\n                    <div className='procedure-subtitle'>\r\n                        Here’s a short summary of your LYRIQ order and next steps:\r\n                    </div>\r\n                    <div className='procedure-map'>\r\n                        \r\n                    </div>\r\n                </div> */}\r\n\r\n                    {/* <PurchasingProgress progressStage={stepsList} step={currentStep} navPage={navPage} /> */}\r\n\r\n                    <div className='purchasing-details'>\r\n                        <div className='selection-panel'>\r\n                            <div className='section-title'>\r\n                                YOUR SELECTION\r\n                            </div>\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Variant</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.VariantName}</p>\r\n                                    <span>{showPrice(order?.VariantPrice)}</span>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Exterior</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.ExteriorName}</p>\r\n                                    <span>{showPrice(order?.ExteriorPrice)}</span>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Interior</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.InteriorName}</p>\r\n                                    <span>{showPrice(order?.InteriorPrice)}</span>\r\n                                </div>\r\n                            </div>\r\n\r\n                            {optionsTemplate(order?.Options, rdEnum.enumVehicleOptionType.Accessories)}\r\n                            {optionsTemplate(order?.Options, rdEnum.enumVehicleOptionType.Charge)}\r\n                        </div>\r\n\r\n\r\n                        <div className='finance-panel'>\r\n                            <div className='section-title'>\r\n                                FINANCE\r\n                        </div>\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Customer type</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.CustomerType}</p>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Payment type</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.PaymentOption}</p>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-desc' style={{ fontSize: '14px' }}>\r\n                                    You can view your full order summary and more from within your account.\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n\r\n                        <div className='delivery-panel'>\r\n                            <div className='section-title'>\r\n                                {order?.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery ? \"DELIVERY\" : \"IN-STORE COLLECTION\"}\r\n                            </div>\r\n\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Location</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.DeliveryLocationAddress}</p>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Preferred Option</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.DeliveryOption}</p>\r\n                                    {!isNil(order?.DriveawayCost?.HomeDelivery) && order?.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery && (<p>{rdUri.currencyFormat(order?.DriveawayCost?.HomeDelivery || 0)}</p>)}\r\n                                </div>\r\n                            </div>\r\n\r\n\r\n                            <div className='details-item'>\r\n                                <div className='details-subtitle'>Estimated date</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.Available}</p>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n\r\n                    </div>\r\n                    <div className='purchasing-details'>\r\n                        <div className='selection-panel'>\r\n                            <div className='section-title'>\r\n                                Order Comments\r\n                            </div>\r\n                            <div className='details-item'>\r\n                                {order?.Comments}\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n\r\n                {financeLink != \"\" && (\r\n                    <div className='success-disclaimer-container'>\r\n                        {\r\n                            order?.CustomerCountry == rdEnum.enumCountryCode.NewZealand\r\n                            ?\r\n                            <p>\r\n                                Finance is provided by MTF subject to its approval process, lending criteria and checks. <span className='inner-link'  onClick={() => toTermsFees()}>Terms, conditions and fees</span> apply to any offer of finance. Any personal information we collect about you may be shared with MTF and will be treated in accordance with <span className='inner-link'  onClick={() => toFinancePrivacyPage()}>MTF privacy statement</span>.\r\n                            </p>\r\n                            :\r\n                            <p>\r\n                                Credit subject to financier's approval. Terms, conditions, fees and charges apply. Rates, repayments and fees are estimates and are subject to change at any time. Credit provided by Plenti Finance Pty Limited ACN 636 759 861 (supported by its servicer, Plenti RE Limited ACN 166 646 635). Plenti RE Limited holds Australian Financial Services Licence number 449176 and Australian Credit Licence number 449176.\r\n                            </p>\r\n                        }\r\n                    </div>\r\n                )}\r\n               \r\n                <Dialog header='NOTICE' className='finance-application-dialog' position='bottom' visible={isOpen} draggable={false} resizable={true} onHide={() => onHide()}>\r\n                    <div className='title-panel'>\r\n                        {\r\n                            order?.CustomerCountry == rdEnum.enumCountryCode.Australia\r\n                            ?\r\n                            <p>To commence your application. we'll be transferring you to our finance partner, Plenti. This next page is managed by Plenti.</p>\r\n                            :\r\n                            <p>To commence your application, we'll be transferring you to our finance partner, MTF. This page is managed by MTF.</p>\r\n                        }\r\n                    </div>\r\n                    <div className='variant-btn-panel'>\r\n                        <Button className='variant-btn'\r\n                            onClick={() => {\r\n                                if (!isNil(financeLink) && financeLink != '') {\r\n                                    window.open(financeLink)\r\n                                }\r\n                            }}\r\n                        >\r\n                            CONTINUE\r\n                        </Button>\r\n                    </div>\r\n                </Dialog>\r\n\r\n                <Footer />\r\n            </MainLayoutPage>\r\n        )\r\n    }\r\n}\r\n\r\nexport default OrderPlacedSuccess","import React, { useEffect, useState } from 'react'\r\nimport { useParams, Link, useNavigate } from 'react-router-dom';\r\nimport { Col, Row } from 'react-bootstrap';\r\nimport { isNil } from 'lodash';\r\n\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport { getCMSAssets, getFrontendUrl } from 'helpers/Uri';\r\n\r\nimport * as interestModel from 'model/IInterest';\r\nimport * as interestService from 'services/Interest';\r\nimport * as configModel from 'model/IUserSelectedConfig';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport { Footer } from 'scene/Layout/Footer';\r\nimport * as orderModel from 'model/IOrder';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { useDispatch } from 'react-redux';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\n\r\nconst OrderWaitlisted = () => {\r\n    //const { waitlistId, waitlistNo } = useParams();\r\n    const { webkey } = useParams();\r\n\r\n    const [interest, setInterest] = useState<interestModel.IInterest>();\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    var currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n    useEffect(() => {\r\n        if (!isNil(webkey) && webkey != \"\") {\r\n            doGetWaitlist(webkey);\r\n        }\r\n    }, [webkey]);\r\n\r\n    useEffect(() => {\r\n        dispatch(checkIsShowScrollBar(true));\r\n    }, []);\r\n\r\n    const doGetWaitlist = async (webkey: any) => {\r\n        let response = await interestService.getWaitlist(webkey);\r\n        if (response.status) {\r\n            let responseData = response.data;\r\n            let interestFromBackend: interestModel.IInterest = {\r\n                Country: responseData.country,\r\n                State: responseData.state,\r\n                VariantName: responseData.variantName,\r\n                VariantBasePrice: responseData.variantBasePrice,\r\n                ExteriorName: responseData.exteriorName,\r\n                ExteriorPrice: responseData.exteriorPrice,\r\n                InteriorName: responseData.interiorName,\r\n                InteriorPrice: responseData.interiorPrice,\r\n                FirstName: responseData.firstName,\r\n                LastName: responseData.lastName,\r\n                Mobile: responseData.mobile,\r\n                Email: responseData.email,\r\n                ABN: null,\r\n                BusinessName: null,\r\n                CustomerType: responseData.customerType,\r\n                PaymentOption: responseData.paymentOption,\r\n                DeliveryOption: responseData.deliveryOption,\r\n                DeliveryAddress: responseData.deliveryLocationAddress,\r\n                DeliveryLocationState: responseData.deliveryLocationState,\r\n                DeliveryLocationSuburb: responseData.deliveryLocationSuburb,\r\n                DeliveryLocationPostcode: responseData.deliveryLocationPostcode,\r\n                EstDeliveryDate: responseData.estDeliveryDate,\r\n                PrivacyStatement: true,\r\n                Marketing: responseData.marketing,\r\n                InterestType: responseData.interestType,\r\n                Comments: responseData.comment,\r\n                WebUniqueKey: null,\r\n                Options: getInterestOptions(responseData.options),\r\n                VehicleThumbnail: responseData.vehicleThumbnail\r\n            };\r\n            setInterest(interestFromBackend);\r\n        }\r\n    }\r\n\r\n    const getInterestOptions = (optionData: any): vehicleModel.IVehicleOptions[] | null => {\r\n        let configs: vehicleModel.IVehicleOptions[] = [];\r\n        optionData.map((item: any) => {\r\n            configs.push({\r\n                YanaOptionID: \"\",\r\n                OptionType: item.optionType,\r\n                OptionName: item.optionName,\r\n                OptionPrice: item.optionPrice,\r\n                OptionPicture: [],\r\n                OptionPictureMobile: [],\r\n                OptionDesc: item.optionDesc,\r\n                ChargeType: item.chargeType,\r\n                Disable: false,\r\n                TermsDescription: null\r\n            });\r\n        });\r\n        return configs;\r\n    }\r\n\r\n    const showPrice = (price: number | null | undefined) => {\r\n        if (price == null || price == undefined || price == 0)\r\n            return \"Included\";\r\n        return currencyFormatter.format(price);\r\n    }\r\n\r\n    const optionsTemplate = (options: vehicleModel.IVehicleOptions[] | null | undefined, optionType: string) => {\r\n        let optionItemsTemplate: any[] = [];\r\n        if (!isNil(options) && options != undefined && options.length > 0) {\r\n            let selectedOptions = options.filter(m => m.OptionType == optionType);\r\n            if (!isNil(selectedOptions) && selectedOptions.length > 0) {\r\n                selectedOptions.map((optionItem: vehicleModel.IVehicleOptions, index: any) => {\r\n                    optionItemsTemplate.push(\r\n                        <div className='details-desc' key={optionType + \"_\" + index}>\r\n                            <p>{optionItem?.OptionName}</p>\r\n                            <span>{showPrice(optionItem?.OptionPrice)}</span>\r\n                        </div>\r\n                    );\r\n                })\r\n            }\r\n        }\r\n\r\n        let template: any[] = [];\r\n        if (optionItemsTemplate.length == 0) {\r\n            template.push(<></>);\r\n        }\r\n        else {\r\n            template.push(\r\n                <div className='details-item'>\r\n                    <div className='details-subtitle'>{optionType == rdEnum.enumVehicleOptionType.Charge ? rdEnum.enumVehicleOptionTypeName.Charge : rdEnum.enumVehicleOptionTypeName.Accessories}</div>\r\n                    {optionItemsTemplate}\r\n                </div>\r\n            );\r\n        }\r\n        return template;\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: {},\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n\r\n    }, []);\r\n\r\n\r\n    return (\r\n\r\n        <MainLayoutPage sceneId='container-has-header'>\r\n            <GlobalMenu />\r\n\r\n            <div className='purchasing-procedure-container'>\r\n                <div className='successful-header' style={{ background: !isMobile ? '#282828' : '#fff', aspectRatio: '1440/431' }}>\r\n                    <div className='success-title'>\r\n                        <h1>THANK YOU</h1>\r\n                        <h1>{interest?.FirstName?.toUpperCase()}</h1>\r\n                    </div>\r\n                    <div className='success-info'>\r\n                        <p style={{ maxWidth: '400px' }}>Your configuration has been added to our waitlist, and we will be in contact as soon as we are in the position to move forward with your order.</p>\r\n                    </div>\r\n                    {\r\n                        isMobile\r\n                            ?\r\n                            <div className='black-bg-panel waitlisted'> </div>\r\n                            :\r\n                            <></>\r\n                    }\r\n\r\n                    <img alt=\"\" className='purchased-vehicle waitlisted' src={!isNil(interest?.VehicleThumbnail) && interest?.VehicleThumbnail != \"\" ? interest?.VehicleThumbnail || \"\" : `${getCMSAssets()}/home/Luxury-Argent Silver Metallic.png`} />\r\n                </div>\r\n                <div className='procedure-container'>\r\n                    <div className='procedure-title'>\r\n                        Waitlisted\r\n                    </div>\r\n                    <div className='procedure-subtitle'>\r\n                        Here’s a short summary of your LYRIQ selections.\r\n                    </div>\r\n                    <div className='procedure-map'>\r\n\r\n                    </div>\r\n                </div>\r\n\r\n                <div className='purchasing-details'>\r\n                    <div className='selection-panel'>\r\n                        <div className='section-title'>\r\n                            YOUR SELECTION\r\n                        </div>\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Variant</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.VariantName}</p>\r\n                                <span>{showPrice(interest?.VariantBasePrice)}</span>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Exterior</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.ExteriorName}</p>\r\n                                <span>{showPrice(interest?.ExteriorPrice)}</span>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Interior</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.InteriorName}</p>\r\n                                <span>{showPrice(interest?.InteriorPrice)}</span>\r\n                            </div>\r\n                        </div>\r\n\r\n                        {optionsTemplate(interest?.Options, rdEnum.enumVehicleOptionType.Accessories)}\r\n                        {optionsTemplate(interest?.Options, rdEnum.enumVehicleOptionType.Charge)}\r\n\r\n                        {/* <div className='details-item'>\r\n                            <div className='details-subtitle'>Add On</div>\r\n                            {!isNil(interest?.Options)\r\n                                && interest?.Options.map((item: vehicleModel.IVehicleOptions, index: number) => {\r\n                                    return (\r\n                                        <div className='details-desc' key={\"addon_\" + index}>\r\n                                            <p>{item?.OptionName}</p>\r\n                                            <span>{showPrice(item?.OptionPrice)}</span>\r\n                                        </div>\r\n                                    );\r\n                                })}\r\n                        </div> */}\r\n                    </div>\r\n\r\n\r\n                    <div className='finance-panel'>\r\n                        <div className='section-title'>\r\n                            FINANCE\r\n                        </div>\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Customer type</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.CustomerType}</p>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Payment type</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.PaymentOption}</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n\r\n\r\n                    <div className='delivery-panel'>\r\n                        <div className='section-title'>\r\n                            {interest?.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery ? \"DELIVERY\" : \"IN-STORE COLLECTION\"}\r\n                        </div>\r\n\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Location</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.DeliveryAddress}</p>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Preferred option</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.DeliveryOption}</p>\r\n                            </div>\r\n                        </div>\r\n\r\n                        <div className='details-item'>\r\n                            <div className='details-subtitle'>Estimated date</div>\r\n                            <div className='details-desc'>\r\n                                <p>{interest?.EstDeliveryDate}</p>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <Footer />\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\nexport default OrderWaitlisted","import { MainLayoutPage } from 'LayoutPages';\r\nimport React, { useState } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport NotifyMe from './NotifyMe';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\n\r\nconst NewVehicleInventory = () => {\r\n\r\n    const navigate = useNavigate();\r\n\r\n    const [pageState, setPageState] = useState({\r\n        email: '',\r\n        invalidEmail: false\r\n    })\r\n\r\n    const handleToHome = () => {\r\n        navigate('/');\r\n    }\r\n\r\n    const emailValidator = !/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(pageState?.email);\r\n\r\n    if (window.digitalData) {\r\n        window.digitalData = {\r\n            pageInfo: {},\r\n            internalCampaignInfo: {},\r\n            articleInfo: {},\r\n            visitorProfile: {},\r\n            vehicleInfo: {},\r\n            toolsInfo: {}\r\n        };\r\n    }\r\n\r\n    return (\r\n\r\n        <MainLayoutPage\r\n             sceneId='container-has-header'\r\n        >\r\n            <div className='global-options-container'>\r\n                \r\n                <GlobalMenu activeBtn='inventory' />\r\n\r\n                <div className='new-vehicle-inventory-container'>\r\n                    <div className='new-vehicle-inventory-title'>\r\n                        <h1>NEW VEHICLE INVENTORY</h1>\r\n                        <p>We are currently out of stock. Please check back later.</p>\r\n                    </div>\r\n                    <Row className='customize-panel'>\r\n                        {/* <h5>CUSTOMIZE</h5>\r\n                        <h5>YOUR LYRIQ</h5>\r\n                        <div className='variant-btn-panel'>\r\n                            <Button className='variant-btn' \r\n                                onClick={() => handleToHome()}\r\n                            >\r\n                                <span>BUILD YOURS</span>\r\n                            </Button>\r\n                            <NotifyMe />\r\n                        </div> */}\r\n                        <Col md={5} className='notify-title-panel'>\r\n                            <h4>NOTIFY ME</h4>\r\n                            <p>You will receive an emial when this vehicle arrives to our inventory.</p>\r\n                        </Col>\r\n                        <Col md={7} className='notify-email-panel'>\r\n                            <div className='input-item'>\r\n                                <span className=\"wrapper-box\">\r\n                                    <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                        className={classNames({ \"p-invalid\": pageState?.invalidEmail })}\r\n                                        placeholder=\" \"\r\n                                        value={pageState.email}\r\n                                        onChange={(e) => {\r\n                                            setPageState({\r\n                                                ...pageState,\r\n                                                email: e.target.value,\r\n                                                invalidEmail: isNil(e.target.value) || e.target.value == \"\" || emailValidator\r\n                                            })\r\n                                        }}\r\n                                    />\r\n                                    <label>Email *</label>\r\n                                </span>\r\n                                {pageState?.invalidEmail && (\r\n                                    <small id=\"email-help\" className=\"p-error block\">Require Valid Email</small>\r\n                                )}\r\n                            </div>\r\n                            <div className='checkout-btn-panel'>\r\n                                <Button \r\n                                    onClick={() => {\r\n                                       \r\n                                    }}\r\n                                    data-pr-tooltip=\"Luxury\"\r\n                                >\r\n                                    <h6 >SUBMIT</h6> \r\n                                    {/* {\r\n                                        drawerShow == true \r\n                                        ?\r\n                                        <h6>LUXURY AWD</h6>\r\n                                        :\r\n                                        <h6>LUXURY</h6> \r\n                                    } */}\r\n                                </Button>\r\n                            </div>\r\n                        </Col>\r\n                    </Row>\r\n                </div>\r\n            </div>\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\nexport default NewVehicleInventory","import { getBackendPath } from 'helpers/Uri';\r\nimport * as testDriveModel from 'model/ITestDrive';\r\nimport * as rdHelper from 'helpers/Uri';\r\n\r\nexport const getTestDriveLocations = async (\r\n    country: string,\r\n    model: testDriveModel.ITestDriveModel,\r\n    variant: testDriveModel.TestDriveVariant\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            country: country,\r\n            model: model,\r\n            variant: variant\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/TestDrive/get-test-drive-locations`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getTestDriveModels = async (\r\n    country: string,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({ country: country }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/TestDrive/get-test-drive-models`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getTestDriveVariants = async (\r\n    country: string,\r\n    model: testDriveModel.ITestDriveModel\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            country: country,\r\n            model: model\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/TestDrive/get-test-drive-variants`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\nexport const getTestDriveAvailableDates = async (\r\n    location: testDriveModel.ITestDriveLocation,\r\n    model: testDriveModel.ITestDriveModel,\r\n    variant: testDriveModel.TestDriveVariant,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            location: location,\r\n            model: model,\r\n            variant: variant,\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/TestDrive/get-test-drive-available-dates`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const getTestDriveAvailableTime = async (\r\n    location: testDriveModel.ITestDriveLocation,\r\n    model: testDriveModel.ITestDriveModel,\r\n    variant: testDriveModel.TestDriveVariant,\r\n    selectedDate: string\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify({\r\n            location: location,\r\n            model: model,\r\n            variant: variant,\r\n            selectedDate: selectedDate\r\n        }),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/TestDrive/get-test-drive-available-time`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};\r\n\r\n\r\nexport const saveTestDrive = async (\r\n    testDrive: testDriveModel.ITestDrive,\r\n): Promise<any> => {\r\n    const requestOptions: any = {\r\n        method: 'POST',\r\n        headers: {\r\n            'Content-Type': 'application/json',\r\n        },\r\n        body: JSON.stringify(testDrive),\r\n        credentials: 'include',\r\n    };\r\n    const response = await fetch(\r\n        `${getBackendPath()}/api/TestDrive/save-test-drive`,\r\n        requestOptions,\r\n    );\r\n    const json = await response.json();\r\n    rdHelper.noActivityRedirectHomePage(json);\r\n    return json;\r\n};","import { MainLayoutPage } from 'LayoutPages'\r\nimport { getCMSAssets, getFrontendUrl } from 'helpers/Uri'\r\nimport { InputText } from 'primereact/inputtext'\r\nimport React, { useEffect, useState, useRef } from 'react'\r\nimport { Button, Col, Row } from 'react-bootstrap'\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\nimport { Dropdown } from 'primereact/dropdown'\r\nimport { Checkbox } from 'primereact/checkbox';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport { Calendar } from 'primereact/calendar';\r\nimport ReSchedulePanel from './ReSchedulePanel'\r\nimport IsNumberVerification from 'components/IsNumberVerification'\r\nimport { fontFamily, fontSize } from 'Styles'\r\nimport moment from 'moment';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as testDriveModel from 'model/ITestDrive';\r\nimport { ICodeName } from 'model/ICommon';\r\nimport * as testDriveService from 'services/TestDrive';\r\nimport * as testDriveHelper from 'businessHelpers/TestDriveHelper';\r\nimport { Page } from '../../../Page'\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport { ISubmitMessage } from 'model/ICommon';\r\nimport { useCountryState } from 'helpers/useCountryState';\r\nimport { useFieldArray } from 'react-hook-form'\r\nimport PrivacyPolicyLink from 'components/PrivacyPolicyLink'\r\nimport { Dialog } from 'primereact/dialog'\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen'\r\nimport PrivacyCollectionDialog from 'pages/Main/checkout/PrivacyCollectionDialog'\r\nimport { useParams } from 'react-router-dom'\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay'\r\n\r\nconst TestDrive = () => {\r\n\r\n    const {QRcode} = useParams();\r\n\r\n    console.log(\"QRcode: \", QRcode)\r\n\r\n    const dispatch = useDispatch();\r\n\r\n    const countryState = useCountryState();\r\n\r\n    const [locations, setLocations] = useState<testDriveModel.ITestDriveLocation[]>([]);\r\n    const [selectedLocations, setSelectedLocations] = useState<testDriveModel.ITestDriveLocation>(testDriveHelper.getInitLocation());\r\n\r\n    const [models, setModels] = useState<testDriveModel.ITestDriveModel[]>([]);\r\n    const [selectedModel, setSelectedModel] = useState<testDriveModel.ITestDriveModel>(testDriveHelper.getInitModel());\r\n\r\n    const [variants, setVariants] = useState<testDriveModel.TestDriveVariant[]>([]);\r\n    const [selectedVariants, setSelectedVariants] = useState<testDriveModel.TestDriveVariant>(testDriveHelper.getInitVariant());\r\n\r\n    const [countries, setCountries] = useState<ICodeName[]>([]);\r\n    const [selectedCountry, setSelectedCountry] = useState<ICodeName>({ code: \"\", name: \"\" });\r\n\r\n\r\n\r\n    const isFirstRender = useRef(true);\r\n    const isFirstRenderCountry = useRef(true);\r\n\r\n    //const [inAvailableDates, setInavailableDates] = useState<Date[]>([]);\r\n    //const [availableMinDate, setAvailableMinDate] = useState<Date>();\r\n    //const [availableMaxDate, setAvailableMaxDate] = useState<Date>();\r\n    //const [disableDateCalendar, setDisableDateCalendar] = useState<boolean>(true);\r\n\r\n    //const [availableTimes, setAvailableTimes] = useState<string[]>([]);\r\n    const [pageState, setPageState] = useState<testDriveModel.ITestDrive>(testDriveHelper.getInitTestDrive());\r\n    const [invalidPageState, setInvalidPageState] = useState<testDriveModel.IInvalidTestDrive>(testDriveHelper.getInitInvalidTestDrive());\r\n    const [submitMessage, setSubmitMessage] = useState<ISubmitMessage>();\r\n\r\n    const [isOpen, setIsOpen] = useState(false);\r\n    const [submittingStatus, setSubmittingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n\r\n    const handleDialogOpen = () => {\r\n         setIsOpen(true);\r\n     }\r\n \r\n     const handleDialogHide = () => {\r\n         setIsOpen(false);\r\n     }\r\n\r\n     const isMobile = useCheckMobileScreen();\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const sessionFromStore = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    const isScrollbarVisible = useSelector((state: IAppState) => {\r\n        return state.isShowScrollBar.isShowScrollBar\r\n    });\r\n\r\n    useEffect(() => {\r\n        if (isFirstRenderCountry.current) {\r\n            doGetCountry();\r\n            isFirstRenderCountry.current = false;\r\n        }\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (!isScrollbarVisible) {\r\n            dispatch(checkIsShowScrollBar(true));\r\n        }\r\n    }, [])\r\n\r\n    useEffect(() => {\r\n        if (!isNil(selectedDeliveryFromStore?.Country)) {\r\n            setSelectedCountry(selectedDeliveryFromStore?.Country);\r\n        }\r\n    }, [selectedDeliveryFromStore?.Country?.code]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(selectedCountry?.code) && selectedCountry?.code != \"\") {\r\n            doGetModels();\r\n        }\r\n    }, [selectedCountry?.code]);\r\n\r\n\r\n\r\n    useEffect(() => {\r\n        if (!isNil(selectedModel?.ModelID) && selectedModel?.ModelID != \"\") {\r\n            doGetVariants(selectedModel || null);\r\n        }\r\n        else {\r\n            setVariants([]);\r\n            setSelectedVariants(testDriveHelper.getInitVariant());\r\n        }\r\n    }, [selectedModel?.ModelID]);\r\n\r\n    useEffect(() => {\r\n        if (\r\n            !isNil(selectedCountry?.code) && selectedCountry?.code != \"\"\r\n            && !isNil(selectedVariants?.VariantID) && selectedVariants?.VariantID != \"\") {\r\n            doGetLocations();\r\n        }\r\n    }, [selectedCountry?.code, selectedVariants?.VariantID]);\r\n\r\n\r\n    const doGetLocations = async () => {\r\n        let response = await testDriveService.getTestDriveLocations(\r\n            selectedCountry?.code || \"\",\r\n            selectedModel,\r\n            selectedVariants\r\n        );\r\n        if (response.status) {\r\n            let responseData = response.data;\r\n            let tempLocations: testDriveModel.ITestDriveLocation[] = [];\r\n            if (!isNil(responseData) && responseData.length > 0) {\r\n                responseData.map((item: any) => {\r\n                    tempLocations.push({\r\n                        Country: selectedDeliveryFromStore?.Country?.code || \"\",\r\n                        Name: item.name,\r\n                        Address: item.address\r\n                    });\r\n                });\r\n\r\n            }\r\n            //console.log(tempLocations);\r\n            setLocations(tempLocations);\r\n            setSelectedLocations(testDriveHelper.getInitLocation());\r\n        }\r\n        else {\r\n            setLocations([]);\r\n            setSelectedLocations(testDriveHelper.getInitLocation());\r\n        }\r\n    }\r\n\r\n    const doGetModels = async () => {\r\n        let response = await testDriveService.getTestDriveModels(selectedCountry?.code || \"\");\r\n        if (response.status) {\r\n            let responseData = response.data;\r\n            let tempModels: testDriveModel.ITestDriveModel[] = [];\r\n            if (!isNil(responseData) && responseData.length > 0) {\r\n                responseData.map((item: any) => {\r\n                    tempModels.push({\r\n                        ModelID: item.modelID,\r\n                        Model: item.model\r\n                    });\r\n                });\r\n            }\r\n            setModels(tempModels);\r\n\r\n            if (tempModels.length > 0) {\r\n                setSelectedModel({\r\n                    ModelID: tempModels[0].ModelID,\r\n                    Model: tempModels[0].Model\r\n                });\r\n            }\r\n            else {\r\n                setSelectedModel(testDriveHelper.getInitModel());\r\n            }\r\n\r\n        }\r\n        else {\r\n            setModels([]);\r\n            setSelectedModel(testDriveHelper.getInitModel());\r\n        }\r\n    }\r\n\r\n\r\n    const doGetCountry = async () => {\r\n        let country = await countryState.getCountry();\r\n        setCountries(country);\r\n    }\r\n\r\n    const doGetVariants = async (model: testDriveModel.ITestDriveModel | null) => {\r\n        if (model == null) return;\r\n        let response = await testDriveService.getTestDriveVariants(selectedCountry?.code || \"\", model);\r\n        if (response.status) {\r\n            let responseData = response.data;\r\n            let tempVariant: testDriveModel.TestDriveVariant[] = [];\r\n            if (!isNil(responseData) && responseData.length > 0) {\r\n                responseData.map((item: any) => {\r\n                    tempVariant.push({\r\n                        ModelID: item.modelID,\r\n                        VariantID: item.variantID,\r\n                        Variant: item.variantName,\r\n                    });\r\n                });\r\n\r\n            }\r\n            setVariants(tempVariant);\r\n            setSelectedVariants(testDriveHelper.getInitVariant());\r\n        }\r\n        else {\r\n            setVariants([]);\r\n            setSelectedVariants(testDriveHelper.getInitVariant());\r\n        }\r\n\r\n    }\r\n\r\n\r\n    const onCountryChange = (e: any) => {\r\n        setSelectedCountry(e.value);\r\n        setInvalidPageState({\r\n            ...invalidPageState,\r\n            invalidCountry: isNil(e.value)\r\n        });\r\n    }\r\n\r\n    const onLocationChange = (e: any) => {\r\n        setSelectedLocations(e.value);\r\n\r\n        setInvalidPageState({\r\n            ...invalidPageState,\r\n            invalidLocation: isNil(e.value)\r\n        });\r\n    }\r\n\r\n\r\n    const onVariantChange = (e: any) => {\r\n        setSelectedVariants(e.value);\r\n        setInvalidPageState({\r\n            ...invalidPageState,\r\n            invalidVariant: isNil(e.value)\r\n        });\r\n    }\r\n\r\n\r\n    const isNumberKey = (e: any) => {\r\n        IsNumberVerification(e);\r\n    }\r\n\r\n\r\n    //const dateTemplate = (date: any) => {\r\n    //    let dtDate = moment(date).format(\"DD/MM/YYYY\");\r\n    //    if (availableDates.includes(dtDate)) {\r\n    //        return date.day;\r\n    //    }\r\n    //    return (\r\n    //            <strong style={{ color: \"red\" }}>{date.day}</strong>\r\n    //    );\r\n\r\n    //}\r\n\r\n    const validation = () => {\r\n        if (isNil(pageState)) return;\r\n        let invalid = false;\r\n\r\n        let invalidFirstName = false;\r\n        if (isNil(pageState.firstname) || pageState.firstname == \"\") {\r\n            invalidFirstName = true;\r\n            invalid = true;\r\n        }\r\n\r\n        let invalidLastName = false;\r\n        if (isNil(pageState.lastname) || pageState.lastname == \"\") {\r\n            invalidLastName = true;\r\n            invalid = true;\r\n        }\r\n\r\n        let invalidEmail = false;\r\n        if (isNil(pageState.email) || pageState.email == \"\") {\r\n            invalidEmail = true;\r\n            invalid = true;\r\n        }\r\n        else {\r\n\r\n        }\r\n\r\n        let invalidMobile = false;\r\n        if (isNil(pageState.mobile) || pageState.mobile == \"\") {\r\n            invalidMobile = true;\r\n            invalid = true;\r\n        }\r\n\r\n        let invalidCountry = false;\r\n        if (isNil(selectedCountry?.code) || selectedCountry?.code == \"\") {\r\n            invalidCountry = true;\r\n            invalid = true;\r\n        }\r\n\r\n        let invalidLocation = false;\r\n        if (isNil(selectedLocations?.Name) || selectedLocations?.Name == \"\") {\r\n            invalidLocation = true;\r\n            invalid = true;\r\n        }\r\n\r\n        let invalidModel = false;\r\n        if (isNil(selectedModel?.ModelID) || selectedModel?.ModelID == \"\") {\r\n            invalidModel = true;\r\n            invalid = true;\r\n        }\r\n\r\n\r\n        let invalidVariant = false;\r\n        if (isNil(selectedVariants?.VariantID) || selectedVariants?.VariantID == \"\") {\r\n            invalidVariant = true;\r\n            invalid = true;\r\n        }\r\n\r\n        //let invalidDate = false;\r\n        //if (isNil(pageState?.date)) {\r\n        //    invalidDate = true;\r\n        //    invalid = true;\r\n        //}\r\n\r\n\r\n        //let invalidTime = false;\r\n        //if (isNil(pageState?.selectedTime) || pageState?.selectedTime == \"\") {\r\n        //    invalidTime = true;\r\n        //    invalid = true;\r\n        //}\r\n\r\n        let invalidComfirm = false;\r\n        if (!pageState?.confirm) {\r\n            invalidComfirm = true;\r\n            invalid = true;\r\n        }\r\n\r\n        setInvalidPageState({\r\n            ...invalidPageState,\r\n            invalidFirstname: invalidFirstName,\r\n            invalidLastname: invalidLastName,\r\n            invalidEmail: invalidEmail,\r\n            invalidMobile: invalidMobile,\r\n            invalidCountry: invalidCountry,\r\n            invalidLocation: invalidLocation,\r\n            invalidModel: invalidModel,\r\n            invalidVariant: invalidVariant,\r\n            //invalidDate: invalidDate,\r\n            //invalidTime: invalidTime,\r\n            invalidConfirm: invalidComfirm\r\n        });\r\n\r\n        return invalid;\r\n    }\r\n\r\n    const onBookTestDrive = async () => {\r\n        if (isNil(pageState)) return;\r\n        setSubmitMessage({ Status: null, Message: null });\r\n        let requestData: testDriveModel.ITestDrive = {\r\n            ...pageState,\r\n            transaction: rdEnum.enumTestDriveTransaction.Book,\r\n            yanaCustomerID: sessionFromStore?.YanaCustomerID || \"\",\r\n            yanaCustomerNo: sessionFromStore?.YanaCustomerNo || \"\",\r\n            country: selectedCountry,\r\n            location: selectedLocations,\r\n            model: selectedModel,\r\n            variant: selectedVariants,\r\n            utmtag: QRcode\r\n        };\r\n        if (validation()) return;\r\n\r\n        console.log(QRcode, requestData)\r\n        setSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await testDriveService.saveTestDrive(requestData);\r\n        setSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            setSubmitMessage({ Status: response.status, Message: \"Submit successfully.\" });\r\n\r\n            let responseData = response.data;\r\n            requestData = {\r\n                ...requestData,\r\n                yanaTestDriveID: responseData.yanaTestDriveID,\r\n                yanaTestDriveNo: responseData.yanaTestDriveNo\r\n            }\r\n            setPageState(requestData);\r\n            handleDialogOpen();\r\n        }\r\n        else {\r\n            setSubmitMessage({ Status: response.status, Message: response.message });\r\n        }\r\n\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: { pageName: \"\" },\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n    }, []);\r\n\r\n    return (\r\n        <MainLayoutPage\r\n            sceneId='container-has-header'\r\n        >\r\n            <div className='global-options-container'>\r\n\r\n                <GlobalMenu activeBtn='test' />\r\n                {/*<ReSchedulePanel />*/}\r\n\r\n                <div className='test-drive-container'>\r\n                    <div className='test-drive-title-box'>\r\n                        <div className='test-drive-title'>\r\n                            {/* <h1>REQUEST A</h1> */}\r\n                            <h1>REQUEST TEST DRIVE</h1>\r\n                        </div>\r\n                        <div className='test-drive-subtitle'>\r\n                            <p>Please complete the information below</p>\r\n                            <p>\r\n                                and we'll get in touch to organise a test drive of the all-electric LYRIQ.\r\n                            </p>\r\n                            <br/>\r\n                            {/* <p style={{fontWeight: 'bold'}}>\r\n                                Early 2025\r\n                            </p> */}\r\n                        </div>\r\n                    </div>\r\n\r\n                    <div className='test-drive-img'>\r\n                        <img className=\"image\" src={`${getCMSAssets()}/testDrive/test-drive-main-theme.png`} />\r\n                    </div>\r\n\r\n                    <div className='test-dirve-selection-container'>\r\n                        <Row className='select-country-container'>\r\n                            <Col lg={4} className='left-panel'>\r\n                                <h6>TEST DRIVE COUNTRY</h6>\r\n                            </Col>\r\n                            <Col lg={8} className='dropdown-panel choose-country'>\r\n                                <Dropdown\r\n                                    value={selectedCountry}\r\n                                    options={countries}\r\n                                    onChange={(e) => onCountryChange(e)}\r\n                                    className='global-location-dropdown'\r\n                                    optionLabel=\"name\"\r\n                                    placeholder=\"\"\r\n                                />\r\n                                <label className={selectedCountry?.code ? 'location-option-label selected' : 'location-option-label'}>Select Country</label>\r\n                                {invalidPageState?.invalidCountry && (\r\n                                    <div id=\"location-help\" className=\"p-error block text-left\">Require Country</div>\r\n                                )}\r\n                            </Col>\r\n                        </Row>\r\n                        \r\n                        <Row className='model-trim-container'>\r\n                            <Col lg={4} className='left-panel'>\r\n                                <h6>MODEL & TRIM</h6>\r\n                            </Col>\r\n                            {/* <Col lg={4} className='dropdown-panel choose-country'>\r\n                                <Dropdown\r\n                                    value={selectedCountry}\r\n                                    options={countries}\r\n                                    onChange={(e) => onCountryChange(e)}\r\n                                    className='global-location-dropdown'\r\n                                    optionLabel=\"name\"\r\n                                    placeholder=\"\"\r\n                                />\r\n                                <label className={selectedCountry?.code ? 'location-option-label selected' : 'location-option-label'}>Select Country</label>\r\n                                {invalidPageState?.invalidCountry && (\r\n                                    <div id=\"location-help\" className=\"p-error block text-left\">Require Country</div>\r\n                                )}\r\n                            </Col> */}\r\n                            <Col lg={4} className='input-container'>\r\n                                <div className='input-item no-margin'>\r\n                                    <div className=\"wrapper-box\">\r\n                                        <InputText\r\n                                            value={selectedModel.Model}\r\n                                            className='car-brand-input'\r\n                                            disabled\r\n                                            style={{ background: '#fff', fontFamily: 'CadillacGothic-NarrowRegular', color: 'black' }}\r\n                                        />\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={4}>\r\n                                <Dropdown\r\n                                    value={selectedVariants}\r\n                                    options={variants}\r\n                                    onChange={(e) => onVariantChange(e)}\r\n                                    className='select-trim-dropdown'\r\n                                    optionLabel=\"Variant\"\r\n                                    placeholder=\"Select trim\"\r\n                                    style={{ border: '2px black solid', fontFamily: 'CadillacGothic-NarrowRegular', color: 'black' }}\r\n                                />\r\n                                {invalidPageState?.invalidVariant && (\r\n                                    <div id=\"model-help\" className=\"p-error block text-left\">Require Trim</div>\r\n                                )}\r\n                            </Col>\r\n                        </Row>\r\n\r\n                        <Row className='location-container'>\r\n                            <Col lg={4} className='left-panel'>\r\n                                <h6>TEST DRIVE LOCATION</h6>\r\n                            </Col>\r\n                            \r\n                            <Col lg={8} className='dropdown-panel'>\r\n                                <Dropdown\r\n                                    value={selectedLocations}\r\n                                    options={locations}\r\n                                    onChange={(e) => onLocationChange(e)}\r\n                                    className='global-location-dropdown'\r\n                                    optionLabel=\"Name\"\r\n                                    emptyMessage=\"Please select a trim\"\r\n                                    placeholder=\"\"\r\n                                />\r\n                                <label className={selectedLocations.Name ? 'location-option-label selected' : 'location-option-label'}>Select location</label>\r\n                                {invalidPageState?.invalidLocation && (\r\n                                    <div id=\"location-help\" className=\"p-error block text-left\">Require location</div>\r\n                                )}\r\n                            </Col>\r\n                        </Row>\r\n\r\n                        <Row className='personal-info-container'>\r\n                            <Col lg={4} className='left-panel'>\r\n                                <h6>PERSONAL INFORMATION</h6>\r\n                            </Col>\r\n                            <Col lg={8}>\r\n                                <Row className=\"\">\r\n                                    <Col lg={6} className='input-container'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"firstname\" aria-describedby=\"firstname-help\"\r\n                                                    className={classNames({ \"p-invalid\": invalidPageState?.invalidFirstname })}\r\n                                                    placeholder=\" \"\r\n                                                    value={pageState?.firstname}\r\n                                                    onChange={(e) => {\r\n                                                        //if (isNil(pageState)) return;\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            firstname: e.target.value,\r\n                                                        });\r\n\r\n                                                        setInvalidPageState({\r\n                                                            ...invalidPageState,\r\n                                                            invalidFirstname: isNil(e.target.value) || e.target.value == \"\"\r\n                                                        });\r\n                                                    }}\r\n                                                />\r\n                                                <label>First Name *</label>\r\n                                            </span>\r\n                                        </div>\r\n                                        {invalidPageState?.invalidFirstname && (\r\n                                            <small id=\"fristname-help\" className=\"p-error block\">Require Valid First Name</small>\r\n                                        )}\r\n                                    </Col>\r\n                                    <Col lg={6} className='input-container'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"lastname\" aria-describedby=\"lastname-help\"\r\n                                                    className={classNames({ \"p-invalid\": invalidPageState?.invalidLastname })}\r\n                                                    placeholder=\" \"\r\n                                                    value={pageState?.lastname}\r\n                                                    onChange={(e) => {\r\n                                                        //if (isNil(pageState)) return;\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            lastname: e.target.value,\r\n                                                        });\r\n                                                        setInvalidPageState({\r\n                                                            ...invalidPageState,\r\n                                                            invalidLastname: isNil(e.target.value) || e.target.value == \"\"\r\n                                                        });\r\n                                                    }}\r\n                                                />\r\n                                                <label>Last Name *</label>\r\n                                            </span>\r\n\r\n                                        </div>\r\n                                        {invalidPageState?.invalidLastname && (\r\n                                            <small id=\"lastname-help\" className=\"p-error block\">Require Valid Last Name</small>\r\n                                        )}\r\n                                    </Col>\r\n                                </Row>\r\n\r\n                                <Row>\r\n                                    <Col lg={12} className='input-container'>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"email\" aria-describedby=\"email-help\"\r\n                                                    className={classNames({ \"p-invalid\": invalidPageState?.invalidEmail })}\r\n                                                    placeholder=\" \"\r\n                                                    value={pageState?.email}\r\n                                                    onChange={(e) => {\r\n                                                        //if (isNil(pageState)) return;\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            email: e.target.value,\r\n                                                        });\r\n                                                        setInvalidPageState({\r\n                                                            ...invalidPageState,\r\n                                                            invalidEmail: isNil(e.target.value) || e.target.value == \"\"\r\n                                                        });\r\n                                                    }}\r\n                                                />\r\n                                                <label>Email *</label>\r\n                                            </span>\r\n\r\n                                        </div>\r\n                                        {invalidPageState?.invalidEmail && (\r\n                                            <small id=\"email-help\" className=\"p-error block\">Require Valid Email</small>\r\n                                        )}\r\n                                    </Col>\r\n                                </Row>\r\n\r\n                                <Row>\r\n                                    <Col lg={12} className='input-container'>\r\n                                        {/*onKeyPress={(e: any) => isNumberKey(e)}*/}\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"phone\" aria-describedby=\"phone-help\"\r\n                                                    className={classNames({ \"p-invalid\": invalidPageState?.invalidMobile })}\r\n                                                    placeholder=\" \"\r\n                                                    value={pageState?.mobile || ''}\r\n                                                    onKeyPress={(e: any) => isNumberKey(e)}\r\n                                                    onInput={(event: any) => {\r\n                                                        let phone = event.target.value.slice(0, 11);\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            mobile: phone,\r\n                                                        });\r\n                                                        setInvalidPageState({\r\n                                                            ...invalidPageState,\r\n                                                            invalidMobile: isNil(event.target.value) || event.target.value == \"\"\r\n                                                        });\r\n                                                    }}\r\n                                                />\r\n                                                <label>Phone Number *</label>\r\n                                            </span>\r\n\r\n                                        </div>\r\n                                        {invalidPageState?.invalidMobile && (\r\n                                            <small id=\"lastname-help\" className=\"p-error block\">Require Valid Phone Number</small>\r\n                                        )}\r\n                                    </Col>\r\n                                </Row>\r\n                            </Col>\r\n\r\n                        </Row>\r\n\r\n                        <div className='checkbox-privacy-container'>\r\n                            <div className='checkbox-container'>\r\n                                <div className='checkbox-item'>\r\n                                    <div className='checkbox-content'>\r\n                                        <Checkbox\r\n                                            name=\"cb-ack-agreement\"\r\n                                            inputId=\"cb-ack-agreement\"\r\n                                            onChange={(e) => {\r\n                                                //if (isNil(pageState)) return;\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    confirm: e.checked,\r\n                                                });\r\n                                                setInvalidPageState({\r\n                                                    ...invalidPageState,\r\n                                                    invalidConfirm: !e.checked\r\n                                                });\r\n                                            }}\r\n                                            checked={pageState?.confirm}\r\n                                        ></Checkbox>\r\n                                        {/* <label htmlFor=\"cb-ack\" className=\"p-checkbox-label\">\r\n                                            I confirm that I have a valid driver's licence.\r\n                                        </label> */}\r\n                                        <label htmlFor=\"cb-ack-agreement\" className=\"p-checkbox-label\">\r\n                                            By registering my interest in a test drive, I agree to Cadillac's <PrivacyPolicyLink props='Privacy Policy' /> and <PrivacyCollectionDialog />. \r\n                                        </label>\r\n                                    </div>\r\n                                    {invalidPageState?.invalidConfirm && (\r\n                                        <small id=\"lastname-help\" className=\"p-error block\">Please review and agree to Cadillac's Privacy policy to proceed</small>\r\n                                    )}\r\n                                </div>\r\n\r\n                                <div className='checkbox-item'>\r\n                                    <div className='checkbox-content'>\r\n                                        <Checkbox\r\n                                            name=\"cb-ack-test-drive-optional\"\r\n                                            inputId=\"cb-ack-test-drive-optional\"\r\n                                            onChange={(e) => {\r\n                                                //if (isNil(pageState)) return;\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    agreement: e.checked,\r\n                                                })\r\n                                            }}\r\n                                            checked={pageState?.agreement}\r\n                                        ></Checkbox>\r\n                                        {/* <label htmlFor=\"cb-ack\" className=\"p-checkbox-label\">\r\n                                            Please send me offers, news and events of GM and its partners via email, and SMS.\r\n                                        </label> */}\r\n                                        <label htmlFor=\"cb-ack-test-drive-optional\" className=\"p-checkbox-label\">\r\n                                            I consent to receiving direct marketing materials from Cadillac. \r\n                                        </label>\r\n                                    </div>\r\n                                </div>\r\n\r\n                            </div>\r\n                            {/* <div className='privacy-container'>\r\n                                <p>Cadillac does not sell, trade or disclose your contact information to independent third parties for their independent use\r\n                                without your permission.</p>\r\n                                <p>\r\n                                    By continuing your test drive booking, you have accepted the&nbsp;\r\n                                    \r\n                                    <PrivacyPolicyLink props=\"Privacy Policy\" />\r\n                                    &nbsp;and&nbsp;\r\n                                    <a style={{fontWeight: '400', color: '#3A3A3A'}}\r\n                                         onClick={()=> window.open(\"https://www.cadillacanz.com/au-en/privacy\", \"_blank\")}\r\n                                    >Test Drive Terms and Conditions</a>\r\n                                    &nbsp;of Cadillac.\r\n                                </p>\r\n                            </div> */}\r\n                            {/* <a style={{color: '#3A3A3A', textDecoration: 'none'}} href={`/${getFrontendVirtualDir()}/privacy`} target=\"_blank\">Privacy Policy</a> */}\r\n                        </div>\r\n\r\n\r\n                        <div className='variant-btn-panel'>\r\n                            {submittingStatus == rdEnum.enumProcessingStatus.Processing ? (\r\n                                <Button type=\"button\" className='progress-btn' disabled={true}>\r\n                                    <ProgressSpinner\r\n                                        style={{ width: '16px', height: '16px' }}\r\n                                        strokeWidth=\"5\"\r\n                                        animationDuration=\".8s\"\r\n                                    />\r\n                                </Button>\r\n\r\n                            ) : (\r\n                                    <React.Fragment>\r\n                                        <Button className='variant-btn' disabled={!pageState?.confirm || false}\r\n                                            style={{ border: 'none', background: !pageState?.confirm || false ? '#CCCCCC' : '#282828' }}\r\n                                            onClick={() => {\r\n                                                onBookTestDrive();\r\n                                            }}\r\n                                        >\r\n                                            <h6 style={{ color: !pageState?.confirm || false ? '#707070' : '#fff' }}>REQUEST TEST DRIVE</h6>\r\n                                        </Button>\r\n                                        {/*{!isNil(submitMessage) && (*/}\r\n                                        {/*    <div className={classNames({*/}\r\n                                        {/*        \"text-success\": submitMessage.Status,*/}\r\n                                        {/*        \"text-error\": !submitMessage.Status*/}\r\n                                        {/*    })}>{submitMessage?.Message}</div>*/}\r\n                                        {/*)}*/}\r\n                                    </React.Fragment>\r\n                                )}\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n\r\n            <Dialog className='test-drive-success-dialog' visible={isOpen} onHide={() => handleDialogHide()} draggable={false} resizable={true}>\r\n                <div className='test-drive-success-container'>\r\n                    <div className='successful-details-panel'>\r\n                        <div className='successful-details-title'>\r\n                            <h1>Request Successful</h1>\r\n                            {/* <p>You will receive a confirmation email shortly, and a member of our Cadillac Concierge team will be in touch.</p> */}\r\n                            <p>We will be in touch to organise a test drive of the all-electric LYRIQ</p>\r\n                        </div>\r\n                        <div className='successful-details-content'>\r\n                            {/*<div className='booking-item'>*/}\r\n                            {/*    <div className='item-name'>Test Drive ID</div>*/}\r\n                            {/*    <div className='item-value'>{pageState?.yanaTestDriveNo}</div>*/}\r\n                            {/*</div>*/}\r\n\r\n                            <div className='booking-item'>\r\n                                <div className='item-name'>Model & Trim</div>\r\n                                <div className='item-value'>{pageState?.model.Model} {pageState?.variant.Variant}</div>\r\n                            </div>\r\n\r\n                            <div className='booking-item'>\r\n                                <div className='item-name'>Test Drive Location</div>\r\n                                <div className='item-value'>{pageState?.location?.Name}</div>\r\n                            </div>\r\n\r\n                            <div className='booking-item'>\r\n                                <div className='item-name'>First Name</div>\r\n                                <div className='item-value'>{pageState?.firstname}</div>\r\n                            </div>\r\n\r\n                            <div className='booking-item'>\r\n                                <div className='item-name'>Last Name</div>\r\n                                <div className='item-value'>{pageState?.lastname}</div>\r\n                            </div>\r\n\r\n                            <div className='booking-item'>\r\n                                <div className='item-name'>Email Address</div>\r\n                                <div className='item-value'>{pageState?.email}</div>\r\n                            </div>\r\n\r\n                            <div className='booking-item last-item'>\r\n                                <div className='item-name'>Phone Number</div>\r\n                                <div className='item-value'>{pageState?.mobile}</div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    {\r\n                        !isMobile\r\n                        ?\r\n                        <div className='successful-img-panel'>\r\n                            <img className=\"image\" src={`${getCMSAssets()}/testDrive/test-drive-success.png`} />\r\n                        </div>\r\n                        :\r\n                        <></>\r\n                    }\r\n                    \r\n                </div>\r\n                <div className='cross-box' onClick={() => handleDialogHide()}>\r\n                    <img alt=\"\" className='close-icon' src={`${getCMSAssets()}/main/cross.svg`} />\r\n                </div>\r\n            </Dialog>\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\nexport default TestDrive","import * as testDriveModel from 'model/ITestDrive';\r\n\r\nexport const getInitTestDrive = (): testDriveModel.ITestDrive => {\r\n    let init: testDriveModel.ITestDrive = {\r\n        yanaCustomerID: null,\r\n        yanaCustomerNo: null,\r\n        firstname: \"\",\r\n        lastname: \"\",\r\n        email: \"\",\r\n        mobile: \"\",\r\n        country: {\r\n            code: \"\",\r\n            name: \"\"\r\n        },\r\n        location: {\r\n            Country: \"\",\r\n            Name: \"\",\r\n            Address: \"\",\r\n        },\r\n        model: {\r\n            ModelID: \"\",\r\n            Model: \"\"\r\n        },\r\n        variant: {\r\n            ModelID: \"\",\r\n            VariantID: \"\",\r\n            Variant: \"\"\r\n        },\r\n        utmtag: \"\",\r\n        date: undefined,\r\n        formatDate: null,\r\n        selectedTime: null,\r\n        confirm: null,\r\n        agreement: null,\r\n        transaction: null,\r\n        yanaTestDriveID: null,\r\n        yanaTestDriveNo: null\r\n    };\r\n    return init;\r\n}\r\n\r\n\r\nexport const getInitLocation = (): testDriveModel.ITestDriveLocation => {\r\n    let init: testDriveModel.ITestDriveLocation = {\r\n        Country: \"\",\r\n        Name: \"\",\r\n        Address: \"\"\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\nexport const getInitModel = (): testDriveModel.ITestDriveModel => {\r\n    let init: testDriveModel.ITestDriveModel = {\r\n        ModelID: \"\",\r\n        Model: \"\"\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\nexport const getInitVariant = (): testDriveModel.TestDriveVariant => {\r\n    let init: testDriveModel.TestDriveVariant = {\r\n        ModelID: \"\",\r\n        VariantID: \"\",\r\n        Variant: \"\"\r\n    };\r\n\r\n    return init;\r\n}\r\n\r\n\r\nexport const getInitInvalidTestDrive = (): testDriveModel.IInvalidTestDrive => {\r\n    let init: testDriveModel.IInvalidTestDrive = {\r\n        invalidFirstname: null,\r\n        invalidLastname: null,\r\n        invalidEmail: null,\r\n        invalidMobile: null,\r\n        invalidCountry: null,\r\n        invalidLocation: null,\r\n        invalidModel: null,\r\n        invalidVariant: null,\r\n        //invalidDate: null,\r\n        //invalidTime: null,\r\n        invalidConfirm: null,\r\n    };\r\n\r\n    return init;\r\n}","import { MainLayoutPage } from 'LayoutPages'\r\nimport CarCarousel from 'components/CarCarousel'\r\nimport { getCMSAssets, getFrontendUrl } from 'helpers/Uri'\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Button, Col, Row } from 'react-bootstrap'\r\nimport { useNavigate } from 'react-router-dom'\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu'\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { ISessionState } from \"model/ISessionState\";\r\nimport moment from 'moment';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as orderService from 'services/Order';\r\nimport * as userService from 'services/User';\r\nimport * as sessionStore from 'stores/Session';\r\nimport { useMsal } from '@azure/msal-react';\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\nimport Spinner from 'components/Spinner';\r\nimport { checkIsShowScrollBar } from 'stores/ScrollBarDisplay';\r\n\r\nconst MyOrders = () => {\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n    const azureB2C = useAzureB2C();\r\n    const { inProgress } = useMsal();\r\n\r\n\r\n    const [myOrderList, setMyOrderList] = useState<orderModel.IMyOrderListingItemViewModel[] | null>(null);\r\n    const [loadingStatus, setLoadingStatus] = useState(rdEnum.enumProcessingStatus.Processing);\r\n\r\n    //store variables\r\n    const sessionFromStore = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n\r\n    useEffect(() => {\r\n        //console.log(\"inprogress\");\r\n        //console.log(inProgress);\r\n        if (azureB2C.isAuthAndLogin(inProgress)) {\r\n            var auCustomerID = sessionFromStore?.YanaCustomerID || \"\";\r\n            var auCustomerNo = sessionFromStore?.YanaCustomerNo || \"\";\r\n            var nzCustomerID = sessionFromStore?.NZYanaCustomerID || \"\";\r\n            var nzCustomerNo = sessionFromStore?.NZYanaCustomerNo || \"\";\r\n            //console.log(sessionFromStore);\r\n            //console.log(nzCustomerID);\r\n            /*if ((auCustomerID != \"\" && auCustomerNo != \"\") || (nzCustomerID != \"\" && nzCustomerNo != \"\")) { }*/\r\n                //console.log(1);\r\n\r\n                doGetMyOrders(auCustomerID, auCustomerNo, nzCustomerID, nzCustomerNo);\r\n           \r\n\r\n        }\r\n    }, [inProgress]);\r\n\r\n\r\n    const doGetMyOrders = async (yanaCustomerID: string, yanaCustomerNo: string, nzCustomerID: string, nzCustomerNo: string) => {\r\n        setLoadingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await orderService.getOrderByYanaCustomerID(yanaCustomerID, yanaCustomerNo, nzCustomerID, nzCustomerNo);\r\n        setLoadingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            let orderList: orderModel.IMyOrderListingItemViewModel[] = [];\r\n            if (!isNil(response.data) && response.data.length > 0) {\r\n                response.data.map((item: any) => {\r\n                    orderList.push({\r\n                        Country: item.orderVehicle.country,\r\n                        OrderID: item.yanaOrderIDs.yanaOrderID,\r\n                        OrderNo: item.yanaOrderIDs.yanaOrderNo,\r\n                        CustomerID: item.yanaOrderIDs.yanaCustomerID,\r\n                        CustomerNo: item.yanaOrderIDs.yanaCustomerNo,\r\n                        VariantName: item.orderVehicle.variantName,\r\n                        VariantImage: item.orderVehicle.variantPicture,\r\n                        //VariantMobileImage: item.orderVehicle.variantPictureMobile,\r\n                        ExteriorName: item.orderVehicle.exteriorName,\r\n                        InteriorName: item.orderVehicle.interiorName,\r\n                        OrderDate: item.orderDate,\r\n                        OrderStatus: item.orderStatus,\r\n                        IsShowActionRequiredWording: item.isShowActionRequiredWording,\r\n                    });\r\n\r\n                });\r\n            }\r\n            setMyOrderList(orderList);\r\n        }\r\n        else {\r\n            if (response.errorCode == rdEnum.enumRDErrorCode.NotSignIn) {\r\n                azureB2C.signIn();\r\n            }\r\n        }\r\n\r\n    }\r\n\r\n    const toOrderDetails = (orderId: any, orderNo: any, customerID:any, customerNo:any, country: any) => {\r\n        let url = `${getFrontendUrl()}/my-orders/${btoa(orderId)}/${btoa(orderNo)}/${btoa(customerID)}/${btoa(customerNo)}/${country}`;\r\n        navigate(url);\r\n    }\r\n\r\n    const containerRef = useRef<HTMLDivElement | null>(null); \r\n\r\n    useEffect(() => {\r\n        dispatch(checkIsShowScrollBar(true));\r\n    }, []);\r\n\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: {},\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n\r\n    }, []);\r\n\r\n    return (\r\n\r\n        <MainLayoutPage sceneId=\"container-has-header\">\r\n\r\n            <GlobalMenu />\r\n\r\n            <div className='my-orders-container'>\r\n                <div className='my-orders-title'>\r\n                    <h2>MY ORDERS</h2>\r\n                </div>\r\n\r\n                <Row className='orders-container'>\r\n                    {loadingStatus === rdEnum.enumProcessingStatus.Processing && (\r\n                        // <ProgressSpinner\r\n                        //     style={{ width: '64px', height: '64px' }}\r\n                        //     strokeWidth=\"5\"\r\n                        //     animationDuration=\".8s\"\r\n                        // />\r\n                        <Spinner spinnerWidth={64} />\r\n                    )}\r\n                    {\r\n                        loadingStatus === rdEnum.enumProcessingStatus.Processed && !isNil(myOrderList) && myOrderList.length > 0 && myOrderList.map((orderItem: orderModel.IMyOrderListingItemViewModel, index: any) => {\r\n                            return (\r\n                                <Col lg={4} className='order-item' key={\"orderItem_\" + orderItem + index}>\r\n                                    <div className='order-item-inner'>\r\n                                        <div className='order-item-header'>\r\n                                            <div className='order-item-title'>\r\n                                                <h6>{orderItem.VariantName.toUpperCase()}</h6>\r\n                                                <p>Order No: {orderItem.OrderNo} (Ordered on: {orderItem?.OrderDate})</p>\r\n                                            </div>\r\n                                            <div className=\"order-item-country\">{orderItem.Country == rdEnum.enumCountryCode.Australia ? rdEnum.enumCountryName.Australia : rdEnum.enumCountryName.NewZealand}</div>\r\n                                            <div className='action-reminder-box' >\r\n                                                <p style={{ height:\"18px\", visibility: orderItem.IsShowActionRequiredWording ? 'visible' : 'hidden' }}>Action Required</p>\r\n                                                <img alt='' style={{ visibility: orderItem.IsShowActionRequiredWording ? 'visible' : 'hidden' }}\r\n                                                    src={`${getCMSAssets()}/users/exclamation-mark-red.svg`}\r\n                                                />\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className='carousel-panel' style={{ opacity: orderItem.OrderStatus == rdEnum.enumOrderStatus.Cancelled ? .5 : 1 }}>\r\n                                            <CarCarousel variantAWD='luxury' exteriorColor=\"Argent Silver Metallic\"\r\n                                                interiorColor=\"Oxford Stone\"\r\n                                                carouselInterval={null}\r\n                                                images={orderItem.VariantImage}\r\n                                                mobileImages={orderItem.VariantImage}\r\n                                                isUseImages={true}\r\n                                            />\r\n                                        </div>\r\n                                        <div className='order-status' style={{height: \"40px\"}}>\r\n                                            {orderItem.OrderStatus}\r\n                                        </div>\r\n                                        <div className='variant-btn-panel'>\r\n                                            <Button className={orderItem.OrderStatus == rdEnum.enumOrderStatus.PreparingToShip || orderItem.OrderStatus == rdEnum.enumOrderStatus.Delivered || orderItem.OrderStatus == rdEnum.enumOrderStatus.Cancelled ? 'variant-btn' : 'variant-btn view-details'}\r\n                                                style={{\r\n                                                    backgroundColor: orderItem.OrderStatus == rdEnum.enumOrderStatus.Ordered || orderItem.OrderStatus == rdEnum.enumOrderStatus.Confirmed ? '#282828' : '#fff',\r\n                                                    color: orderItem.OrderStatus == rdEnum.enumOrderStatus.Ordered || orderItem.OrderStatus == rdEnum.enumOrderStatus.Confirmed ? '#fff' : '#282828'\r\n                                                }}\r\n                                                onClick={() => {\r\n                                                    toOrderDetails(\r\n                                                        orderItem.OrderID, orderItem.OrderNo,\r\n                                                        orderItem.CustomerID, orderItem.CustomerNo,\r\n                                                        orderItem.Country\r\n                                                    );\r\n                                                }}\r\n                                            >\r\n                                                <h6>\r\n                                                    VIEW DETAILS\r\n                                                {/*{*/}\r\n                                                    {/*    orderItem.OrderStatus == rdEnum.enumOrderStatus.PreparingToShip || orderItem.OrderStatus == rdEnum.enumOrderStatus.Delivered || orderItem.OrderStatus == rdEnum.enumOrderStatus.Cancelled*/}\r\n                                                    {/*        ?*/}\r\n                                                    {/*        'VIEW DETAILS'*/}\r\n                                                    {/*        :*/}\r\n                                                    {/*        orderItem.OrderStatus == rdEnum.enumOrderStatus.Ordered*/}\r\n                                                    {/*            ?*/}\r\n                                                    {/*            'COMPLETE ACCOUNT SETUP'*/}\r\n                                                    {/*            :*/}\r\n                                                    {/*            orderItem.OrderStatus == rdEnum.enumOrderStatus.Confirmed*/}\r\n                                                    {/*                ?*/}\r\n                                                    {/*                'SCHEDULE DELIVERY'*/}\r\n                                                    {/*                :*/}\r\n                                                    {/*                'VIEW DETAILS'*/}\r\n                                                    {/*}*/}\r\n                                                </h6>\r\n                                            </Button>\r\n                                        </div>\r\n                                    </div>\r\n                                </Col>\r\n                            )\r\n                        })\r\n                    }\r\n\r\n                </Row>\r\n            </div>\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\nexport default MyOrders","import { MainLayoutPage } from 'LayoutPages'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { classNames } from 'primereact/utils';\r\nimport { isNil } from 'lodash';\r\nimport { InputText } from 'primereact/inputtext';\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { Calendar } from 'primereact/calendar';\r\nimport WhyCollecting from 'components/WhyCollecting';\r\nimport ChangeUsername from './ChangeUsername';\r\nimport { Dropdown } from 'primereact/dropdown';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\nimport IsNumberVerification from 'components/IsNumberVerification';\r\n\r\nimport * as rdEnum from 'helpers/enum';\r\n\r\nimport * as profileModel from 'model/IUserProfile';\r\nimport * as profileService from 'services/User';\r\n\r\nimport * as profileHelper from 'businessHelpers/ProfileHelper';\r\nimport * as sessionStore from 'stores/Session';\r\n\r\nimport { useMsal } from '@azure/msal-react';\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\nimport Spinner from 'components/Spinner';\r\n\r\nconst Profiles = () => {\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n    const azureB2C = useAzureB2C();\r\n    const { inProgress } = useMsal();\r\n\r\n    const [pageState, setPageState] = useState<profileModel.IUserProfile>(profileHelper.getInitProfile());\r\n    const [invalidState, setInvalidState] = useState<profileModel.IInvalidUserProfile>(profileHelper.getInitInvalidProfile());\r\n    const [privacy, setPrivacy] = useState<profileModel.IUserPrivacy>(profileHelper.getInitPrivacy());\r\n\r\n    const [submitMessage, setSubmitMessage] = useState<string>(\"\");\r\n    const [submittingStatus, setSubmittingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n    const [submitResult, setSubmitResult] = useState<boolean | null>(null);\r\n\r\n    const [invalidANBLength, setInvalidANBLength] = useState(false);\r\n\r\n    useEffect(() => {\r\n        if (azureB2C.isAuthAndLogin(inProgress)) {\r\n            doGetProfile();\r\n        }\r\n\r\n    }, [inProgress]);\r\n\r\n    const sessionFromStore = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n    const countries = useSelector((state: IAppState) => {\r\n        return state.countryInfo\r\n    });\r\n\r\n    const doGetProfile = async () => {\r\n        let response = await profileService.getProfile(\r\n            sessionFromStore?.YanaCustomerID || \"\",\r\n            sessionFromStore?.YanaCustomerNo || \"\",\r\n            sessionFromStore?.NZYanaCustomerID || \"\",\r\n            sessionFromStore?.NZYanaCustomerNo || \"\"\r\n        );\r\n        if (response.status) {\r\n            let profile: profileModel.IUserProfile = {\r\n                country: response.data.country,\r\n                yanaProfileID: response.data.yanaProfileID,\r\n                yanaCustomerID: response.data.yanaCustomerID,\r\n                yanaCustomerNo: response.data.yanaCustomerNo,\r\n                nzYanaProfileID: response.data.nzYanaProfileID,\r\n                nzYanaCustomerID: response.data.nzYanaCustomerID,\r\n                nzYanaCustomerNo: response.data.nzYanaCustomerNo,\r\n                customerType: response.data.customerType,\r\n                abn: response.data.abn,\r\n                businessname: response.data.businessName,\r\n                firstname: response.data.firstName,\r\n                middlename: response.data.middleName,\r\n                lastname: response.data.lastName,\r\n                birthday: undefined,   //todo:\r\n                usename: response.data.email,\r\n                phone1: response.data.phoneNumber1,\r\n                phone2: response.data.phoneNumber2,\r\n            };\r\n            setPageState(profile);\r\n\r\n            let privacyFromBackend: profileModel.IUserPrivacy = {\r\n                GMCommunicationEmail: response.data.gmCommunicationEmail,\r\n                GMCommunicationMobile: response.data.gmCommunicationMobile,\r\n                GMPartnerCommunicationEmail: response.data.gmPartnerCommunicationEmail,\r\n                GMPartnerCommunicationMobile: response.data.gmPartnerCommunicationMobile,\r\n            };\r\n            setPrivacy(privacyFromBackend);\r\n        }\r\n        else {\r\n            if (response.errorCode == rdEnum.enumRDErrorCode.NotSignIn) {\r\n                azureB2C.signIn();\r\n            }\r\n        }\r\n    }\r\n\r\n    const onSubmit = async () => {\r\n\r\n        let invalidForm = false;\r\n        let invalidFirstName = false;\r\n        let invalidLastName = false;\r\n        let invalidBirthday = false;\r\n        let invalidUsername = false;\r\n        let invalidPhone = false;\r\n        let invalidABN = false;\r\n\r\n        if (isNil(pageState.firstname) || pageState.firstname == '') {\r\n            invalidFirstName = true;\r\n            invalidForm = true;\r\n        }\r\n        if (isNil(pageState.lastname) || pageState.lastname == '') {\r\n            invalidLastName = true;\r\n            invalidForm = true;\r\n        }\r\n        //if (isNil(pageState.birthday) || pageState.birthday == undefined) {\r\n        //    invalidBirthday = true;\r\n        //    invalidForm = true;\r\n        //}\r\n\r\n        if (isNil(pageState.usename) || pageState.usename == '') {\r\n            invalidUsername = true;\r\n            invalidForm = true;\r\n        }\r\n        if (isNil(pageState.phone1) || pageState.phone1 == '') {\r\n            invalidPhone = true;\r\n            invalidForm = true;\r\n        }\r\n\r\n        if (pageState.customerType == rdEnum.enumClientTypes.Business.Code) {\r\n            if (isNil(pageState.abn) || pageState.abn == \"\") {\r\n                invalidForm = true;\r\n                invalidABN = true;\r\n            } \r\n            if (pageState.country == rdEnum.enumCountryCode.Australia && pageState.abn.length != 11) {\r\n                setInvalidANBLength(true);\r\n                invalidForm = true;\r\n            } else if (pageState.country == rdEnum.enumCountryCode.NewZealand && pageState.abn.length != 13) {\r\n                setInvalidANBLength(true);\r\n                invalidForm = true;\r\n            }\r\n        }\r\n\r\n        setInvalidState({\r\n            ...invalidState,\r\n            invalidFirstname: invalidFirstName,\r\n            invalidLastname: invalidLastName,\r\n            invalidBirthday: invalidBirthday,\r\n            invalidUsername: invalidUsername,\r\n            invalidPhone: invalidPhone,\r\n            invalidABN: invalidABN,\r\n        });\r\n\r\n        if (invalidForm) return;\r\n\r\n        setSubmitMessage(\"\");\r\n        setSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await profileService.saveProfile(pageState, privacy, true);\r\n        setSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n        setSubmitResult(response.status);\r\n\r\n        if (response.status) {\r\n            setSubmitMessage(\"Your Details have been successfully updated\")\r\n            setTimeout(() => {\r\n                setSubmitMessage('')\r\n            }, 5000)\r\n        }\r\n        else {\r\n            setSubmitMessage(response.message);\r\n        }\r\n    }\r\n\r\n    console.log(invalidState?.invalidABN)\r\n\r\n    const isNumberKey = (e: any) => {\r\n        IsNumberVerification(e);\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: {},\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n    }, []);\r\n\r\n    return (\r\n        <MainLayoutPage sceneId='container-has-header'>\r\n\r\n            <div className='global-options-container'>\r\n                <GlobalMenu />\r\n\r\n                <div className='profiles-container'>\r\n                    <div className='profiles-header'>\r\n                        <h2>PROFILE</h2>\r\n                        <span>View and take action on order notifications, and manage your contact preferences.</span>\r\n                    </div>\r\n\r\n                    <div className='profiles-userinfo-container'>\r\n                        <Row className='form-table'>\r\n                            {pageState.customerType == rdEnum.enumClientTypes.Business.Code && (\r\n                                <React.Fragment>\r\n                                    <Col lg={6}>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"abn\" aria-describedby=\"abn-help\"\r\n                                                    className={classNames({ \"p-invalid\": invalidState?.invalidABN })}\r\n                                                    placeholder=\" \"\r\n                                                    style={{ borderBottom: invalidState.invalidABN ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                    value={pageState.abn}\r\n                                                    onChange={(e) => {\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            abn: e.target.value,\r\n                                                        });\r\n\r\n                                                        // if (isNil(e.target.value) || e.target.value == \"\") {\r\n                                                            setInvalidState({\r\n                                                                ...invalidState,\r\n                                                                invalidABN: false\r\n                                                            });\r\n                                                            setInvalidANBLength(false)\r\n                                                        // }\r\n                                                    }}\r\n                                                />\r\n                                                <label>{pageState.country == rdEnum.enumCountryCode.Australia ? \"ABN\" : \"NZBN\"} *</label>\r\n                                            </span>\r\n                                            {invalidState?.invalidABN && (\r\n                                                <small id=\"abn-help\" className=\"p-error block\">Require Valid {pageState.country == rdEnum.enumCountryCode.Australia ? \"ABN\" : \"NZBN\"}</small>\r\n                                            )}\r\n                                            {invalidANBLength && (\r\n                                                <small id=\"abn-help\" className=\"p-error block\">{pageState.country == rdEnum.enumCountryCode.Australia ? \"ABN\" : \"NZBN\"} mismatch, require {pageState.country == rdEnum.enumCountryCode.Australia ? \"11\" : \"13\"} digits.</small>\r\n                                            )}\r\n                                        </div>\r\n                                    </Col>\r\n                                    <Col lg={6}>\r\n                                        <div className='input-item'>\r\n                                            <span className=\"wrapper-box\">\r\n                                                <InputText id=\"businessname\" aria-describedby=\"businessname-help\"\r\n                                                    className={classNames({ \"p-invalid\": invalidState?.invalidBusinessName })}\r\n                                                    placeholder=\" \"\r\n                                                    value={pageState.businessname}\r\n                                                    style={{ borderBottom: invalidState.invalidBusinessName ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                    onChange={(e) => {\r\n                                                        setPageState({\r\n                                                            ...pageState,\r\n                                                            businessname: e.target.value,\r\n                                                        });\r\n                                                        setInvalidState({\r\n                                                            ...invalidState,\r\n                                                            invalidBusinessName: isNil(e.target.value) || e.target.value == \"\"\r\n                                                        });\r\n                                                    }}\r\n                                                />\r\n                                                <label>Business Name *</label>\r\n                                            </span>\r\n                                            {invalidState?.invalidBusinessName && (\r\n                                                <small id=\"businessname-help\" className=\"p-error block\">Require Valid Business Name</small>\r\n                                            )}\r\n                                        </div>\r\n                                    </Col>\r\n                                </React.Fragment>\r\n                            )}\r\n                            <Col lg={6} >\r\n                                <div className='input-item'>\r\n                                    <span className=\"wrapper-box\">\r\n                                        <InputText id=\"firstname\" aria-describedby=\"firstname-help\"\r\n                                            className={classNames({ \"p-invalid\": invalidState?.invalidFirstname })}\r\n                                            placeholder=\" \"\r\n                                            style={{ borderBottom: invalidState.invalidFirstname ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                            value={pageState.firstname}\r\n                                            onChange={(e) => {\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    firstname: e.target.value,\r\n                                                });\r\n\r\n                                                setInvalidState({\r\n                                                    ...invalidState,\r\n                                                    invalidFirstname: isNil(e.target.value) || e.target.value == \"\"\r\n                                                });\r\n                                            }}\r\n                                        />\r\n                                        <label>First Name *</label>\r\n                                    </span>\r\n                                    {invalidState?.invalidFirstname && (\r\n                                        <small id=\"fristname-help\" className=\"p-error block\">Require Valid First Name</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6}>\r\n                                <div className='input-item'>\r\n                                    <span className=\"wrapper-box\">\r\n                                        <InputText id=\"lastname\" aria-describedby=\"lastname-help\"\r\n                                            className={classNames({ \"p-invalid\": invalidState?.invalidLastname })}\r\n                                            placeholder=\" \"\r\n                                            value={pageState.lastname}\r\n                                            style={{ borderBottom: invalidState.invalidLastname ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                            onChange={(e) => {\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    lastname: e.target.value,\r\n                                                });\r\n                                                setInvalidState({\r\n                                                    ...invalidState,\r\n                                                    invalidLastname: isNil(e.target.value) || e.target.value == \"\"\r\n                                                });\r\n                                            }}\r\n                                        />\r\n                                        <label>Last Name *</label>\r\n                                    </span>\r\n                                    {invalidState?.invalidLastname && (\r\n                                        <small id=\"lastname-help\" className=\"p-error block\">Require Valid Last Name</small>\r\n                                    )}\r\n                                </div>\r\n                            </Col>\r\n                            <Col lg={6}>\r\n                                <div className='input-item'>\r\n                                    <span className=\"wrapper-box\">\r\n                                        <InputText id=\"middlename\" aria-describedby=\"middlename-help\"\r\n                                            placeholder=\" \"\r\n                                            value={pageState.middlename}\r\n                                            onChange={(e) => {\r\n                                                setPageState({\r\n                                                    ...pageState,\r\n                                                    middlename: e.target.value,\r\n                                                })\r\n                                            }}\r\n                                        />\r\n                                        <label>Middle Name (Optional)</label>\r\n                                    </span>\r\n                                </div>\r\n                            </Col>\r\n                            {/*<Col lg={6}>*/}\r\n                            {/*    <div className='input-item'>*/}\r\n                            {/*        <span className=\"wrapper-box\">*/}\r\n                            {/*            <Calendar id=\"calendar\" placeholder=\"\" showIcon*/}\r\n                            {/*                value={pageState.birthday}*/}\r\n                            {/*                onChange={(e: any) => {*/}\r\n                            {/*                    //setDate1(e.value)*/}\r\n                            {/*                    setPageState({*/}\r\n                            {/*                        ...pageState,*/}\r\n                            {/*                        birthday: e.value*/}\r\n                            {/*                    });*/}\r\n                            {/*                }}*/}\r\n                            {/*            />*/}\r\n                            {/*        </span>*/}\r\n                            {/*    </div>*/}\r\n                            {/*</Col>*/}\r\n                        </Row>\r\n                        {/* <WhyCollecting /> */}\r\n                    </div>\r\n\r\n                    <Row>\r\n                        <Col lg={6}>\r\n                            <div className='change-username-container'>\r\n                                <div className='profile-section-title'>\r\n                                    USERNAME\r\n\t\t\t\t\t\t    </div>\r\n                                {/*<ChangeUsername />*/}\r\n                                <div className=\"desc-input-wrapper\">\r\n                                    <div className='section-desc'>\r\n                                        You'll use your email address to sign into your account, and it's where Cadillac sends you updates and other information depending on your preferences. This email may also be used to verify your identity.\r\n\t\t\t\t\t\t            </div>\r\n                                    <div className='input-item'>\r\n                                        <span className=\"wrapper-box\">\r\n                                            <InputText id=\"username\" aria-describedby=\"username-help\"\r\n                                                className={classNames({ \"p-invalid\": invalidState.invalidUsername })}\r\n                                                placeholder=\" \"\r\n                                                style={{ borderBottom: invalidState.invalidUsername ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                value={pageState.usename}\r\n                                                onChange={(e) => {\r\n                                                    setPageState({\r\n                                                        ...pageState,\r\n                                                        usename: e.target.value,\r\n                                                    });\r\n                                                }}\r\n                                            />\r\n                                            <label>User Name *</label>\r\n                                        </span>\r\n                                        {invalidState.invalidUsername && (\r\n                                            <small id=\"username-help\" className=\"p-error block\">Require valid User Name *</small>\r\n                                        )}\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </Col>\r\n\r\n                        <Col lg={6}>\r\n                            <div className='contact-phone-container'>\r\n                                <div className='profile-section-title'>\r\n                                    PHONE\r\n\t\t\t\t\t\t    </div>\r\n                                <div className=\"desc-input-wrapper\">\r\n                                    <div className='section-desc'>\r\n                                        By providing your telephone number(s), you grant permission for Cadillac team members to deliver updates via phone or SMS. \r\n\t\t\t\t\t\t            </div>\r\n                                    <div className='phone-list-container'>\r\n                                        <div className='phone-item-box'>\r\n                                            <div className='input-item'>\r\n                                                <span className=\"wrapper-box\">\r\n                                                    <InputText id=\"phone1\" aria-describedby=\"phone1-help\"\r\n                                                        className={classNames({ \"p-invalid\": invalidState.invalidPhone })}\r\n                                                        placeholder=\" \"\r\n                                                        style={{ borderBottom: invalidState.invalidPhone ? '3px solid red' : '2px solid #d2d2d2' }}\r\n                                                        onKeyPress={(e: any) => isNumberKey(e)}\r\n                                                        value={pageState.phone1}\r\n                                                        onChange={(e) => {\r\n                                                            let mobile = e.target.value.slice(0, 11);\r\n                                                            setPageState({\r\n                                                                ...pageState,\r\n                                                                phone1: mobile,\r\n                                                            });\r\n                                                        }}\r\n                                                    />\r\n                                                    <label>Phone Number 1 *</label>\r\n                                                </span>\r\n                                                {invalidState.invalidPhone && (\r\n                                                    <small id=\"phone1-help\" className=\"p-error block\">Require valid Phone Number 1 *</small>\r\n                                                )}\r\n                                            </div>\r\n                                            {/*<div className='input-item'>*/}\r\n                                            {/*    <span className=\"wrapper-box\">*/}\r\n                                            {/*        <InputText id=\"phone2\" aria-describedby=\"phone2-help\"*/}\r\n                                            {/*            placeholder=\" \"*/}\r\n                                            {/*            style={{ borderBottom: invalidState.invalidPhone ? '3px solid red' : '2px solid #d2d2d2' }}*/}\r\n                                            {/*            onKeyPress={(e: any) => isNumberKey(e)}*/}\r\n                                            {/*            value={pageState.phone2}*/}\r\n                                            {/*            onChange={(e) => {*/}\r\n                                            {/*                let mobile = e.target.value.slice(0, 11);*/}\r\n                                            {/*                setPageState({*/}\r\n                                            {/*                    ...pageState,*/}\r\n                                            {/*                    phone2: mobile,*/}\r\n                                            {/*                });*/}\r\n                                            {/*            }}*/}\r\n                                            {/*        />*/}\r\n                                            {/*        <label>Phone Number 2</label>*/}\r\n                                            {/*    </span>*/}\r\n                                            {/*</div>*/}\r\n                                        </div>\r\n\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </Col>\r\n                    </Row>\r\n\r\n                    <div className='btn-update-wrapper'>   {/*variant-btn-panel*/}\r\n                        <Button className='btn-update'\r\n                            disabled={submittingStatus == rdEnum.enumProcessingStatus.Processing}\r\n                            style={{border: 'none', backgroundColor: submittingStatus == rdEnum.enumProcessingStatus.Processing ? '#CCCCCC' : '#282828'}}\r\n                            onClick={() => {\r\n                                onSubmit()\r\n                            }}\r\n                            data-pr-tooltip=\"Luxury\"\r\n                        >\r\n                            {\r\n                                submittingStatus == rdEnum.enumProcessingStatus.Processing\r\n                                ?\r\n                                <span style={{color:'#707070'}}><Spinner spinnerWidth={26} /></span>\r\n                                :\r\n                                <span style={{color:'#fff'}}>UPDATE</span>\r\n                            }\r\n                            \r\n\t\t\t\t\t\t</Button>\r\n                        {submitMessage != \"\" && submittingStatus == rdEnum.enumProcessingStatus.Processed && (\r\n                                <div className={classNames({\r\n                                    \"text-error\": !submitResult,\r\n                                    \"text-success\": submitResult\r\n                                })}>{submitMessage}</div>\r\n                            \r\n                        )}\r\n                    </div>\r\n                </div>\r\n\r\n            </div>\r\n\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\nexport default Profiles","import * as profileModel from 'model/IUserProfile';\r\n\r\nexport const getInitProfile = (): profileModel.IUserProfile => {\r\n\tlet init: profileModel.IUserProfile = {\r\n\t\tcountry: \"\",\r\n\t\tyanaProfileID: \"\",\r\n\t\tyanaCustomerID: \"\",\r\n\t\tyanaCustomerNo: \"\",\r\n\t\tnzYanaProfileID: \"\",\r\n\t\tnzYanaCustomerID: \"\",\r\n\t\tnzYanaCustomerNo: \"\",\r\n\t\tcustomerType: \"\",\r\n\t\tabn: \"\",\r\n\t\tbusinessname: \"\",\r\n\t\tfirstname: \"\",\r\n\t\tmiddlename: \"\",\r\n\t\tlastname: \"\",\r\n\t\tbirthday: undefined,\r\n\t\tusename: \"\",\r\n\t\tphone1: \"\",\r\n\t\tphone2: \"\",\r\n    };\r\n    return init;\r\n}\r\n\r\nexport const getInitInvalidProfile = (): profileModel.IInvalidUserProfile => {\r\n\tlet init: profileModel.IInvalidUserProfile = {\r\n\t\tinvalidABN: false,\r\n\t\tinvalidBusinessName: false,\r\n\t\tinvalidFirstname: false,\r\n\t\tinvalidLastname: false,\r\n\t\tinvalidBirthday: false,\r\n\t\tinvalidUsername: false,\r\n\t\tinvalidPhone: false,\r\n\t};\r\n\treturn init;\r\n}\r\n\r\nexport const getInitPrivacy = (): profileModel.IUserPrivacy => {\r\n\tlet init: profileModel.IUserPrivacy = {\r\n\t\tGMCommunicationEmail: false,\r\n\t\tGMCommunicationMobile: false,\r\n\t\tGMPartnerCommunicationEmail: false,\r\n\t\tGMPartnerCommunicationMobile: false,\r\n\t};\r\n\treturn init;\r\n}","import { MainLayoutPage } from 'LayoutPages'\r\nimport React, { useEffect, useState } from 'react'\r\nimport { useNavigate } from 'react-router-dom';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport { Button, Col, Row } from 'react-bootstrap';\r\nimport { InputSwitch } from 'primereact/inputswitch';\r\nimport { isNil } from 'lodash';\r\nimport { classNames } from 'primereact/utils';\r\n\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as rdEnum from 'helpers/enum';\r\n//import { useGetActiveAccount } from 'helpers/useAzureB2C';\r\nimport * as profileModel from 'model/IUserProfile';\r\nimport * as profileService from 'services/User';\r\nimport * as profileHelper from 'businessHelpers/ProfileHelper';\r\nimport * as sessionStore from 'stores/Session';\r\n\r\nimport { useMsal } from '@azure/msal-react';\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\nimport Spinner from 'components/Spinner';\r\nimport PrivacyPolicyLink from 'components/PrivacyPolicyLink';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\n\r\nconst Privacy = () => {\r\n    const navigate = useNavigate();\r\n    const dispatch = useDispatch();\r\n    const azureB2C = useAzureB2C();\r\n    const {  inProgress } = useMsal();\r\n\r\n    const [profile, setProfile] = useState<profileModel.IUserProfile>(profileHelper.getInitProfile());\r\n    const [privacy, setPrivacy] = useState<profileModel.IUserPrivacy>(profileHelper.getInitPrivacy());\r\n    const [communicationsHistory, setCommunicationsHistory] = useState<profileModel.ICommunicationHistory[]>([]);\r\n    const [submitMessage, setSubmitMessage] = useState<string>(\"\");\r\n    const [submittingStatus, setSubmittingStatus] = useState(rdEnum.enumProcessingStatus.Init);\r\n    const [submitResult, setSubmitResult] = useState<boolean | null>(null);\r\n    \r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const sessionFromStore = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    useEffect(() => {\r\n        if (azureB2C.isAuthAndLogin(inProgress)) {\r\n            doGetProfile();\r\n        }\r\n    }, [inProgress]);\r\n\r\n    const doGetProfile = async () => {\r\n        \r\n        //let account = getActiveAccount();\r\n\r\n        let response = await profileService.getProfile(\r\n            sessionFromStore?.YanaCustomerID || \"\",\r\n            sessionFromStore?.YanaCustomerNo || \"\",\r\n            sessionFromStore?.NZYanaCustomerID || \"\",\r\n            sessionFromStore?.NZYanaCustomerNo || \"\"\r\n        );\r\n        if (response.status) {\r\n            let profileFromBackend: profileModel.IUserProfile = {\r\n                country: response.data.country,\r\n                yanaProfileID: response.data.yanaProfileID,\r\n                yanaCustomerID: response.data.yanaCustomerID,\r\n                yanaCustomerNo: response.data.yanaCustomerNo,\r\n                nzYanaProfileID: response.data.nzYanaProfileID,\r\n                nzYanaCustomerID: response.data.nzYanaCustomerID,\r\n                nzYanaCustomerNo: response.data.nzYanaCustomerNo,\r\n                customerType: response.data.customerType,\r\n                abn: response.data.abn,\r\n                businessname: response.data.businessName,\r\n                firstname: response.data.firstName,\r\n                middlename: response.data.middleName,\r\n                lastname: response.data.lastName,\r\n                birthday: undefined,   //todo:\r\n                usename: response.data.email,\r\n                phone1: response.data.phoneNumber1,\r\n                phone2: response.data.phoneNumber2,\r\n            };\r\n            setProfile(profileFromBackend);\r\n\r\n            let privacyFromBackend: profileModel.IUserPrivacy = {\r\n                GMCommunicationEmail: response.data.gmCommunicationEmail,\r\n                GMCommunicationMobile: response.data.gmCommunicationMobile,\r\n                GMPartnerCommunicationEmail: response.data.gmPartnerCommunicationEmail,\r\n                GMPartnerCommunicationMobile: response.data.gmPartnerCommunicationMobile,\r\n            };\r\n            setPrivacy(privacyFromBackend);\r\n\r\n            let history: profileModel.ICommunicationHistory[] = [];\r\n            if (response.data.communicationHistory != null && response.data.communicationHistory.length > 0) {\r\n                response.data.communicationHistory.map((item: any, index: number) => {\r\n                    history.push({\r\n                        Communications: item.communicationDescription,\r\n                        Email: item.email,\r\n                        Type: item.type,\r\n                        SentDate: item.sent,\r\n                    });\r\n                });\r\n            }\r\n            setCommunicationsHistory(history);\r\n\r\n        }\r\n        else {\r\n            if (response.errorCode == rdEnum.enumRDErrorCode.NotSignIn) {\r\n                azureB2C.signIn();\r\n            }\r\n        }\r\n    }\r\n\r\n\r\n    const onSavePrivacy = async () => {\r\n\r\n        setSubmitMessage(\"\");\r\n        setSubmittingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await profileService.saveProfile(profile, privacy, false);\r\n        setSubmittingStatus(rdEnum.enumProcessingStatus.Processed);\r\n\r\n        setSubmitResult(response.status);\r\n        if (response.status) {\r\n            // setSubmitMessage(\"Submit success.\")\r\n            setSubmitMessage(\"Your preferences have been successfully updated\")\r\n            setTimeout(() => {\r\n                setSubmitMessage('')\r\n            }, 5000)\r\n        }\r\n        else {\r\n            setSubmitMessage(response.message);\r\n        }\r\n\r\n    }\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: {},\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n    }, []);\r\n\r\n\r\n    return (\r\n        <MainLayoutPage sceneId='container-has-header'>\r\n\r\n            <div className='global-options-container'>\r\n                <GlobalMenu />\r\n\r\n                <div className='privacy-container'>\r\n                    <div className='privacy-header'>\r\n                        <h1>DATA & PRIVACY</h1>\r\n                        <span>\r\n                            Please be aware that if you have subscribed to a particular email newsletter or other communication, you should follow the instructions in the email or on a related website to unsubscribe. If you opt out of receiving marketing communications from Cadillac, your personal information will not be used for marketing, but may still be used for the other purposes described in this Privacy Policy (such as vehicle order status and tasks, support and service).\r\n                        </span>\r\n                    </div>\r\n\r\n                    <div className='input-switch-container'>\r\n                        <Row>\r\n                            <Col lg={6} className='input-swtich-panel'>\r\n                                <div className='input-switch-box'>\r\n                                    <div className='item-title-desc'>\r\n                                        <h5>CADILLAC COMMUNICATIONS</h5>\r\n                                        <p>Get updates from Cadillac about our latest offers, events and news</p>\r\n                                    </div>\r\n                                    <div className='input-swtich-box'>\r\n                                        <div className='input-swtich-item'>\r\n                                            <span>Email</span>\r\n                                            <InputSwitch\r\n                                                checked={privacy.GMCommunicationEmail}\r\n                                                onChange={(e) => setPrivacy({ ...privacy, GMCommunicationEmail: e.value })}\r\n                                            />\r\n                                        </div>\r\n                                        <div className='input-swtich-item'>\r\n                                            <span>Mobile</span>\r\n                                            <InputSwitch checked={privacy.GMCommunicationMobile}\r\n                                                onChange={(e) => setPrivacy({ ...privacy, GMCommunicationMobile: e.value })} />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </Col>\r\n                            {/* <Col lg={6} className='input-swtich-panel'>\r\n                                <div className='input-switch-box'>\r\n                                    <div className='item-title-desc'>\r\n                                        <h5>CADILLAC COMMUNICATIONS</h5>\r\n                                        <p>Get updates from Cadillac about our latest offers, events and news</p>\r\n                                    </div>\r\n                                    <div className='input-swtich-box'>\r\n                                        <div className='input-swtich-item'>\r\n                                            <span>Email</span>\r\n                                            <InputSwitch checked={privacy.GMPartnerCommunicationEmail}\r\n                                                onChange={(e) => setPrivacy({ ...privacy, GMPartnerCommunicationEmail: e.value })} />\r\n                                        </div>\r\n                                        <div className='input-swtich-item'>\r\n                                            <span>Mobile</span>\r\n                                            <InputSwitch checked={privacy.GMPartnerCommunicationMobile}\r\n                                                onChange={(e) => setPrivacy({ ...privacy, GMPartnerCommunicationMobile: e.value })} />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </Col> */}\r\n                        </Row>\r\n                    </div>\r\n\r\n                    <div className='personl-data-container'>\r\n                        <span>Your personal data will be treated in accordance with the <PrivacyPolicyLink props=\"privacy policy\" />. \r\n                            {/* Visit this page to learn more about our practices, including how to request deletion of your personal information. */}\r\n                        </span>\r\n                        <div className='variant-btn-panel'>\r\n                            <Button className='variant-btn'\r\n                                disabled={submittingStatus == rdEnum.enumProcessingStatus.Processing}\r\n                                style={{border: 'none', backgroundColor: submittingStatus == rdEnum.enumProcessingStatus.Processing ? '#CCCCCC' : '#282828', }}\r\n                                onClick={() => {\r\n                                    onSavePrivacy();\r\n                                }}\r\n                            >\r\n                                {/* <span style={{color: submittingStatus == rdEnum.enumProcessingStatus.Processing ? '#707070' : '#fff'}}>Save</span> */}\r\n                                {\r\n                                    submittingStatus == rdEnum.enumProcessingStatus.Processing\r\n                                    ?\r\n                                    <span style={{color:'#707070'}}><Spinner spinnerWidth={26} /></span>\r\n                                    :\r\n                                    <span style={{color:'#fff'}}>SAVE</span>\r\n                                }\r\n                            </Button>\r\n                        </div>\r\n                        {submitMessage != \"\" && submittingStatus == rdEnum.enumProcessingStatus.Processed && (\r\n                            <div className={classNames({\r\n                                \"text-error\": !submitResult,\r\n                                \"text-success\": submitResult\r\n                            })}>{submitMessage}</div>\r\n                        )}\r\n                    </div>\r\n                </div>\r\n\r\n                {/*todo: styling */}\r\n                {\r\n                    !isMobile\r\n                    ?\r\n                    <div className='communcation-history-container'>\r\n                        <div className='communcation-history-header'>\r\n                            <h1>COMMUNICATIONS HISTORY</h1>\r\n                        </div>\r\n                        <div className=\"communcation-wrapper\">\r\n                        <table className=\"communcation-history-content\">\r\n                            <tr className=\"communcation-history-content-header\">\r\n                                <th>COMMUNICATIONS</th>\r\n                                <th>EMAIL</th>\r\n                                <th>TYPE</th>\r\n                                <th>SENT TYPE</th>\r\n                            </tr>\r\n                            \r\n                            {communicationsHistory.length > 0 && communicationsHistory.map((item: profileModel.ICommunicationHistory, index: number) => {\r\n                                console.log(item);\r\n                                return (\r\n                                    <tr key={index}>\r\n                                        <td>{item.Communications}</td>\r\n                                        <td>{item.Email}</td>\r\n                                        <td>{item.Type}</td>\r\n                                        <td>{item.SentDate}</td>\r\n                                    </tr>\r\n                                );\r\n                            })}\r\n                            </table>\r\n                        </div>\r\n                    </div>\r\n                    :\r\n                    <></>\r\n                }\r\n               \r\n\r\n            </div>\r\n\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\nexport default Privacy","import { getCMSAssets } from 'helpers/Uri';\r\nimport { Dialog } from 'primereact/dialog';\r\nimport React, { useState } from 'react';\r\nimport { Accordion, Button, Card } from 'react-bootstrap';\r\nimport Dropdown from 'react-bootstrap/Dropdown';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\n\r\nimport * as callBackModel from 'model/ICallBackRequest';\r\nimport * as orderService from 'services/Order';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\n\r\nconst Support = () => {\r\n\r\n    const [requestDialogVisible, setRequestDialogVisible] = useState(false);\r\n    const [cancelDialogVisible, setCancelDialogVisible] = useState(false);\r\n    const [requestStatus, setRequestStatus] = useState('');\r\n    const [cancelStatus, setCancelStatus] = useState('');\r\n    const [callBackType, setCallBackType] = useState('');\r\n    const [processingState, setProcessingState] = useState(rdEnum.enumProcessingStatus.Init);\r\n    const orderDetailsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderDetails\r\n    });\r\n\r\n    const selectedDeliveryFromStore = useSelector((state: IAppState) => {\r\n        return state.selectedDelivery;\r\n    });\r\n\r\n    const successMessage = \"We have received your request. A member of the Cadillac Team will call you shortly to finalise your request.\";\r\n    const failMessageAU = \"We're sorry, there was an issue processing your request. Please try again or call 1800 CADILLAC (223455) for assistance. \";\r\n    const failMessageNZ = \"We're sorry, there was an issue processing your request. Please try again or call 0800 CADILLAC (223455) for assistance. \";\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n\r\n    const handleCallBackRequest = async () => {\r\n        let request: callBackModel.ICallBackRequest = {\r\n            YanaCustomerID: orderDetailsFromStore?.YanaCustomerID || \"\",\r\n            YanaCustomerNo: orderDetailsFromStore?.YanaCustomerNo || \"\",\r\n            YanaOrderID: orderDetailsFromStore?.YanaOrderID || \"\",\r\n            YanaOrderNo: orderDetailsFromStore?.YanaOrderNo || \"\",\r\n            Country: orderDetailsFromStore?.Country || \"\",\r\n            RequestType: callBackType\r\n        };\r\n        setProcessingState(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await orderService.callBackRequest(request);\r\n        setProcessingState(rdEnum.enumProcessingStatus.Processed);\r\n        if (response.status) {\r\n            setRequestStatus('success');\r\n        }\r\n        else {\r\n            setRequestStatus('failure');\r\n        }\r\n    }\r\n\r\n\r\n    const onShowRequestDialog = (callBackType: string) => {\r\n        setRequestDialogVisible(true);\r\n        setCallBackType(callBackType);\r\n    }\r\n\r\n    const onHideRequestDialog = () => {\r\n        setRequestDialogVisible(false);\r\n        //clear request status to initial ''\r\n        setRequestStatus('')\r\n    }\r\n\r\n    const onShowCancelDialog = () => {\r\n        setCancelDialogVisible(true);\r\n    }\r\n\r\n    const onHideCancelDialog = () => {\r\n        setCancelDialogVisible(false);\r\n        //clear cancel status to initial ''\r\n        setCancelStatus('')\r\n    }\r\n\r\n    return (\r\n        <>\r\n            {\r\n                !isMobile\r\n                ?\r\n                <Dropdown data-bs-theme=\"dark\" className='download-dropdown-container'>\r\n                    <Dropdown.Toggle id=\"dropdown-button-dark-example1\" variant=\"secondary\">\r\n                        <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/Question_mark.png`} />\r\n                        <span>Support</span>\r\n                    </Dropdown.Toggle>\r\n\r\n                    <Dropdown.Menu>\r\n                        <Dropdown.Item href=\"#/action-2\" onClick={() => onShowRequestDialog(rdEnum.enumCallBackRequest.CallBack)}\r\n                            style={{ backgroundColor: 'transparent', color: '#282828' }} >\r\n                            <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/phone.svg`} />\r\n                            <span>Request a callback</span>\r\n                        </Dropdown.Item>\r\n                        <Dropdown.Item href=\"#/action-3\" onClick={() => onShowRequestDialog(rdEnum.enumCallBackRequest.CancelOrder)}\r\n                            style={{ backgroundColor: 'transparent', color: '#282828' }} >\r\n                            <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/cross.svg`} />\r\n                            <span>Cancel order</span>\r\n                        </Dropdown.Item>\r\n                    </Dropdown.Menu>\r\n                </Dropdown>\r\n                :\r\n                <Accordion className='download-dropdown-container'>\r\n                    <Accordion.Item eventKey=\"0\">\r\n                        <Accordion.Header>\r\n                            <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/Question_mark.png`} />\r\n                            <span>Support</span>\r\n                        </Accordion.Header>\r\n                        <Accordion.Body >\r\n                                <div>\r\n                                    <Button\r\n                                        variant=\"transparent\"\r\n                                        onClick={() => onShowRequestDialog(rdEnum.enumCallBackRequest.CallBack)}\r\n                                        style={{ display: 'flex', alignItems: 'center', color: '#282828' }}\r\n                                    >\r\n                                        <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/phone.svg`} />\r\n                                        <span>Request a callback</span>\r\n                                    </Button>\r\n                                </div>\r\n                                <div>\r\n                                    <Button\r\n                                        variant=\"transparent\"\r\n                                        onClick={() => onShowRequestDialog(rdEnum.enumCallBackRequest.CancelOrder)}\r\n                                        style={{ display: 'flex', alignItems: 'center', color: '#282828' }}\r\n                                    >\r\n                                        <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/cross.svg`} />\r\n                                        <span>Cancel order</span>\r\n                                    </Button>\r\n                                </div>\r\n                        </Accordion.Body>\r\n                    </Accordion.Item>\r\n                </Accordion>\r\n            }\r\n          \r\n\r\n\r\n            <Dialog header={callBackType === rdEnum.enumCallBackRequest.CallBack ? \"REQUEST A CALLBACK\" : \"CANCEL ORDER\"}\r\n                className='request-cancel-dialog'\r\n                visible={requestDialogVisible}\r\n                style={{ maxWidth: '400px' }} draggable={false}\r\n                resizable={true}\r\n                onHide={() => onHideRequestDialog()}\r\n            >\r\n                {\r\n                    requestStatus == 'success'\r\n                        ?\r\n                        <p className='success-text'>{successMessage}</p>\r\n                        :\r\n                        <div className='request-cancel-container'>\r\n                            <p>A member of the Cadillac Team will call you shortly to finalise your request. Do you wish to proceed?</p>\r\n                            <div className='variant-btn-panel'>\r\n                                {\r\n                                    processingState == rdEnum.enumProcessingStatus.Processing ? (\r\n                                        <Button className='variant-btn'\r\n                                            disabled={true}\r\n                                        >\r\n                                            <ProgressSpinner\r\n                                                style={{ width: '16px', height: '16px' }}\r\n                                                strokeWidth=\"5\"\r\n                                                animationDuration=\".8s\"\r\n                                            />\r\n                                        </Button>\r\n                                    ) : (\r\n                                            <Button className='variant-btn'\r\n                                                onClick={() => handleCallBackRequest()}\r\n                                            >\r\n                                                <span>YES</span>\r\n                                            </Button>\r\n                                        )\r\n                                }\r\n                                <Button className='variant-btn'\r\n                                    onClick={() => onHideRequestDialog()}\r\n                                >\r\n                                    <span>NO</span>\r\n                                </Button>\r\n                            </div>\r\n\r\n                            {\r\n                                requestStatus == 'failure' && selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.Australia\r\n                                    ?\r\n                                    <p className='error-text'>{failMessageAU}</p>\r\n                                    :\r\n                                    requestStatus == 'failure' && selectedDeliveryFromStore.Country?.code == rdEnum.enumCountryCode.NewZealand\r\n                                    ?\r\n                                    <p className='error-text'>{failMessageNZ}</p>\r\n                                    :\r\n                                    <></>\r\n                            }\r\n                        </div>\r\n                }\r\n\r\n            </Dialog>\r\n\r\n\r\n\r\n        </>\r\n    )\r\n}\r\n\r\nexport default Support","import { getCMSAssets } from 'helpers/Uri'\nimport React, { useEffect, useState } from 'react'\nimport { Accordion, Dropdown } from 'react-bootstrap'\nimport { Link } from 'react-router-dom'\nimport { useDispatch, useSelector } from 'react-redux';\nimport { IAppState } from 'model/IAppState';\nimport { isNil } from 'lodash';\nimport * as docService from 'services/Document';\nimport * as docModel from 'model/IDocuments';\nimport * as orderDocsStore from 'stores/OrderDocuments';\nimport { Page } from '../../../Page';\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\n\n\n\nconst Documents = () => {\n    const dispatch = useDispatch();\n    const orderDetailsFromStore = useSelector((state: IAppState) => {\n        return state.orderCustomerDetails;\n    });\n    const orderDetailPageVersionFromStore = useSelector((state: IAppState) => {\n        return state.orderDetailDataVersion;\n    });\n\n\n    const [orderDocs, setOrderDocs] = useState<docModel.IDocumentItem[]>();\n\n    const isMobile = useCheckMobileScreen();\n\n    const doGetAllDocs = async () => {\n        let requestData: docModel.IDocument = {\n            YanaCustomerID: orderDetailsFromStore?.yanaCustomerID || \"\",\n            YanaCustomerNo: orderDetailsFromStore?.yanaCustomerNo || \"\",\n            YanaOrderID: orderDetailsFromStore?.yanaOrderID || \"\",\n            YanaOrderNo: orderDetailsFromStore?.yanaOrderNo || \"\",\n            Country: orderDetailsFromStore?.country || \"\",\n            Documents: []\n        };\n        let response = await docService.getAllDocuments(requestData);\n        let tempDocs: docModel.IDocumentItem[] = [];\n        let allDocs: docModel.IDocumentItem[] = [];\n        if (response.status) {\n            let responseData = response.data;\n            if (!isNil(responseData) && responseData.length > 0) {\n                responseData.map((item: any) => {\n                    allDocs.push({\n                        DocumentName: item.reportName,\n                        DocumentType: item.reportType,\n                        Base64: null,\n                        InvalidDocment: null,\n                        InvalidReason: null,\n                        DocumentKey: item.key,\n                        DocumentUrl: item.url,\n                        DocumentDownloadUrl: item.downloadUrl,\n                    });\n\n                    if (!item.reportType.includes(\"Drive Licence\")) {\n                        tempDocs.push({\n                            DocumentName: item.reportName,\n                            DocumentType: item.reportType,\n                            Base64: null,\n                            InvalidDocment: null,\n                            InvalidReason: null,\n                            DocumentKey: item.key,\n                            DocumentUrl: item.url,\n                            DocumentDownloadUrl: item.downloadUrl,\n                        });\n                    }\n                });\n            }\n        }\n        dispatch(orderDocsStore.setOrderDocumentsAction(allDocs));\n        setOrderDocs(tempDocs);\n    }\n\n    useEffect(() => {\n        if (!isNil(orderDetailsFromStore)) {\n            doGetAllDocs();\n        }\n    }, [orderDetailsFromStore, orderDetailPageVersionFromStore]);\n\n\n    // const onDownload = async (doc: docModel.IDocumentItem) => {\n    //     let requestData: docModel.IDocument = {\n    //         YanaCustomerID: orderDetailsFromStore?.yanaCustomerID || \"\",\n    //         YanaCustomerNo: orderDetailsFromStore?.yanaCustomerNo || \"\",\n    //         YanaOrderID: orderDetailsFromStore?.yanaOrderID || \"\",\n    //         YanaOrderNo: orderDetailsFromStore?.yanaOrderNo || \"\",\n    //         Country: orderDetailsFromStore?.country || \"\",\n    //         Documents: [doc]\n    //     };\n    //     let response = await docService.getSpecificDocuments(requestData);\n    //     if (response.status) {\n    //         window.open(`${response.data[0].downloadUrl}`);\n    //     }\n    // }\n\n    const handleDownloadClick = async (doc: docModel.IDocumentItem) => {\n        await onDownload(doc);\n    };\n\n    const onDownload = async (doc: docModel.IDocumentItem) => {\n        let requestData: docModel.IDocument = {\n            YanaCustomerID: orderDetailsFromStore?.yanaCustomerID || \"\",\n            YanaCustomerNo: orderDetailsFromStore?.yanaCustomerNo || \"\",\n            YanaOrderID: orderDetailsFromStore?.yanaOrderID || \"\",\n            YanaOrderNo: orderDetailsFromStore?.yanaOrderNo || \"\",\n            Country: orderDetailsFromStore?.country || \"\",\n            Documents: [doc]\n        };\n        let response = await docService.getSpecificDocuments(requestData);\n        if (response.status) {\n            const link = document.createElement('a');\n            link.href = response.data[0].downloadUrl;\n            link.download = doc.DocumentName || 'download';\n            link.click();\n        }\n    };\n\n    return (\n        <>\n            {\n                !isMobile\n                ?\n                <Dropdown data-bs-theme=\"dark\" className='download-dropdown-container'>\n                    <Dropdown.Toggle id=\"dropdown-button-dark-example1\" variant=\"secondary\">\n                        <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/document.png`} />\n                        <span>Documents</span>\n                    </Dropdown.Toggle>\n\n                    <Dropdown.Menu>\n                        {!isNil(orderDocs) && orderDocs.length > 0 && orderDocs.map((item: docModel.IDocumentItem, index: number) => {\n                            return (\n\n                                <div className='download-item' key={\"\" + item + index}>\n                                    <button onClick={() => {\n                                        handleDownloadClick(item);\n                                    }}>\n                                        <span className=\"break-word\">\n                                            {item.DocumentName}\n                                        </span>\n                                        <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/documents/download.svg`} />\n                                    </button>\n                                </div>\n                            );\n                        })}\n                    </Dropdown.Menu>\n                </Dropdown>\n                :\n                <Accordion className='download-dropdown-container'>\n                    <Accordion.Item eventKey=\"0\">\n                        <Accordion.Header>\n                            <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/inventory/document.png`} />\n                            <span>Documents</span>\n                        </Accordion.Header>\n                        <Accordion.Body >\n                            {!isNil(orderDocs) && orderDocs.length > 0 && orderDocs.map((item: docModel.IDocumentItem, index: number) => {\n                                return (\n\n                                    <div className='download-item' key={\"\" + item + index}>\n                                        <button onClick={() => {\n                                            handleDownloadClick(item);\n                                        }}>\n                                            <span className=\"break-word\">\n                                                {item.DocumentName}\n                                    </span>\n                                            <img alt=\"\" className='download-icon' src={`${getCMSAssets()}/documents/download.svg`} />\n                                        </button>\n                                    </div>\n                                );\n                            })}\n                        </Accordion.Body>\n                    </Accordion.Item>\n                </Accordion>\n            }\n        </>\n    )\n}\n\nexport default Documents","import { MainLayoutPage } from 'LayoutPages';\r\nimport CarCarousel from 'components/CarCarousel';\r\nimport PurchasingProgress from 'components/PurchasingProgress';\r\nimport { getCMSAssets, getFrontendUrl, getSelectState } from 'helpers/Uri';\r\nimport React, { useContext, useEffect, useRef, useState } from 'react';\r\nimport { useDispatch, useSelector } from 'react-redux';\r\nimport { Accordion, AccordionContext, Button, Card, Col, Row, useAccordionButton } from 'react-bootstrap';\r\nimport { useParams, useNavigate } from 'react-router-dom';\r\nimport { GlobalMenu } from 'scene/Layout/GlobalMenu';\r\nimport Support from './Support';\r\nimport Documents from './Documents';\r\nimport ProgressSteps from './purchasingProgress/ProgressSteps';\r\nimport { ProgressSpinner } from 'primereact/progressspinner';\r\nimport { isNil } from 'lodash';\r\nimport moment from 'moment';\r\n\r\nimport { IAppState } from 'model/IAppState';\r\nimport * as rdEnum from 'helpers/enum';\r\nimport * as rdHelper from 'helpers/Uri';\r\nimport * as orderService from 'services/Order';\r\nimport * as orderModel from 'model/IOrder';\r\nimport * as vehicleModel from 'model/IVehicle';\r\nimport * as pipelineModel from 'model/IPipeLine';\r\nimport * as scheduleDeliveryModel from 'model/IOrderScheduleDelivery';\r\nimport * as orderCustomerDetailsModel from 'model/IOrderCustomerDetails';\r\nimport * as paymentOptionsModel from 'model/IPaymentOptions';\r\nimport * as checkoutHelper from 'businessHelpers/CheckoutHelper';\r\nimport * as addressHelper from 'businessHelpers/AddressHelper';\r\nimport * as driveLicenseHelper from 'businessHelpers/DriverLicenseHelper';\r\nimport * as orderCustomerDetailsStore from 'stores/OrderCustomerDetails';\r\nimport * as orderDetailsStore from 'stores/OrderDetails';\r\nimport * as orderScheduleDeliveryStore from 'stores/OrderScheduleDelivery';\r\nimport * as sessionStore from 'stores/Session';\r\nimport * as orderDetailPageVersionStore from 'stores/OrderDetailPageDataVersion';\r\nimport * as docModel from 'model/IDocuments';\r\nimport * as docService from 'services/Document';\r\n\r\nimport ViewAppointment from 'pages/Global/orders/purchasingProgress/ViewAppointment';\r\n\r\nimport { useMsal } from '@azure/msal-react';\r\nimport { useAzureB2C } from 'helpers/useAzureB2C';\r\nimport { ICodeName } from 'model/ICommon';\r\nimport { useCountryState } from 'helpers/useCountryState';\r\nimport Spinner from 'components/Spinner';\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { Dialog } from 'primereact/dialog';\r\n\r\ntype AccordionOpenType = {\r\n    btn0: boolean;\r\n    btn1: boolean;\r\n    btn2: boolean;\r\n    btn3: boolean;\r\n    btn4: boolean;\r\n    btn5: boolean;\r\n    btn6: boolean;\r\n};\r\n\r\n\r\nconst OrderDetails = () => {\r\n    const dispatch = useDispatch();\r\n    const navigate = useNavigate();\r\n    const azureB2C = useAzureB2C();\r\n    const { inProgress } = useMsal();\r\n    //const countryState = useCountryState();\r\n\r\n    const sessionFromStore = useSelector((state: IAppState) => {\r\n        return state.session;\r\n    });\r\n\r\n    const orderDetailPageVersionFromStore = useSelector((state: IAppState) => {\r\n        return state.orderDetailDataVersion;\r\n    });\r\n    const orderDetailsFromStore = useSelector((state: IAppState) => {\r\n        return state.orderCustomerDetails;\r\n    });\r\n\r\n    const isMobile = useCheckMobileScreen();\r\n\r\n    const { yanaID, yanaNo, customerID, customerNo, country } = useParams();\r\n\r\n    \r\n    const [stepsList, setStepsList] = useState<pipelineModel.IPipeLineItem[]>([]);\r\n    const [isCancelledOrder, setIsCancelledOrder] = useState(false);\r\n    const [ifShowViewAppointmentButton, setIfShowViewAppointmentButton] = useState(false);\r\n    const [loadingStatus, setLoadingStatus] = useState(rdEnum.enumProcessingStatus.Processing);\r\n\r\n    const [order, setOrder] = useState<orderModel.IOrderRequest>(checkoutHelper.getOrderInitState());\r\n    const [paymentSummaryLink, setPaymentSummaryLink] = useState(\"\");\r\n\r\n    const lastStepCollapseHeightRef = useRef<any>();\r\n\r\n    const [lastStepCollapseHeight, setLastStepCollapseHeight] = useState(0);\r\n\r\n    const [isOpen, setIsOpen] = useState(false);\r\n\r\n    const [accordionOpen, setAccordionOpen] = useState<AccordionOpenType>(\r\n        {\r\n            btn0: false,\r\n            btn1: false,\r\n            btn2: false,\r\n            btn3: false,\r\n            btn4: false,\r\n            btn5: false,\r\n            btn6: false,\r\n        }\r\n    );\r\n\r\n    const handleDialogOpen = () => {\r\n        setIsOpen(true);\r\n    }\r\n\r\n    const onHide = () => {\r\n        setIsOpen(false);\r\n    };\r\n\r\n    useEffect(() => {\r\n        if (accordionOpen.btn6 && lastStepCollapseHeightRef.current) {\r\n            const height = lastStepCollapseHeightRef.current?.offsetHeight;\r\n            setLastStepCollapseHeight(height);\r\n        }\r\n    }, [accordionOpen.btn6]);\r\n\r\n    useEffect(() => {\r\n        azureB2C.isAuthAndLogin(inProgress);\r\n    }, [inProgress]);\r\n\r\n    useEffect(() => {\r\n        if (!isNil(yanaID) && yanaID != \"\" && !isNil(yanaNo) && yanaNo != \"\") {\r\n            dispatch(orderDetailPageVersionStore.clearOrderDetailPageDataVersionAction());\r\n        }\r\n    }, [yanaID]);\r\n\r\n\r\n    //refresh data if update customer details, pipeline data changed\r\n    useEffect(() => {\r\n        doGetOrder();\r\n    }, [orderDetailPageVersionFromStore]);\r\n\r\n\r\n\r\n    const doGetOrder = async () => {\r\n        setLoadingStatus(rdEnum.enumProcessingStatus.Processing);\r\n        let response = await orderService.getOrderDetailsByYanaIDs(\r\n            atob(customerID), atob(customerNo),\r\n            atob(yanaID), atob(yanaNo),\r\n            country\r\n        );\r\n        setLoadingStatus(rdEnum.enumProcessingStatus.Processed);\r\n\r\n        if (response.status) {\r\n            let orderData = response.data;\r\n\r\n\r\n            let driveawayCostData = orderData.driveAwayCost;\r\n            let driveawayCost: paymentOptionsModel.IDriveAwayCost = {\r\n                LuxuryCarTax: driveawayCostData?.luxuryCarTax,\r\n                LocalStampDuty: driveawayCostData?.localStampDuty,\r\n                LocalRegistrationCost: driveawayCostData?.localRegistrationCost,\r\n                LocalCTP: driveawayCostData?.localCTP,\r\n                LocalPlateFee: driveawayCostData?.localPlateFee,\r\n                HomeDelivery: driveawayCostData?.homeDelivery,\r\n                DriveawayPrice: driveawayCostData.driveawayPrice,\r\n                OnRoadFee: driveawayCostData.onRoadFeeSubtotal,\r\n                SubTotal: driveawayCostData.subTotal,\r\n                VariantName: \"\",\r\n                VariantID: \"\",\r\n                VariantPrice: 0,\r\n                ExteriorID: \"\",\r\n                ExteriorName: \"\",\r\n                ExteriorPrice: 0,\r\n                InteriorID: \"\",\r\n                InteriorName: \"\",\r\n                InteriorPrice: 0,\r\n                GST: driveawayCostData.gst,\r\n                RoadUserChargers: driveawayCostData.roadUserChargers,\r\n                TyreStewardshipFee: driveawayCostData.tyreStewardshipFee,\r\n                Options: [],\r\n            }\r\n\r\n\r\n            let tempOrder: orderModel.IOrderRequest = {\r\n                ...order,\r\n                Country: orderData.orderVehicle.country,\r\n                State: orderData.orderVehicle.state,\r\n                OrderID: orderData.orderID,\r\n                RDAcountID: orderData.rdAccountID,\r\n                VariantName: orderData.orderVehicle.variantName,\r\n                VariantPrice: orderData.orderVehicle.variantPrice,\r\n                ExteriorName: orderData.orderVehicle.exteriorName,\r\n                ExteriorPrice: orderData.orderVehicle.exteriorPrice,\r\n                InteriorName: orderData.orderVehicle.interiorName,\r\n                InteriorPrice: orderData.orderVehicle.interiorPrice,\r\n                VehicleImages: orderData.orderVehicle.variantPicture,\r\n                Options: getOptions(orderData.orderVehicle.options),\r\n                DeliveryLocationState: orderData.delivery.deliveryLocationState,\r\n                DeliveryLocationSuburb: orderData.delivery.deliveryLocationSuburb,\r\n                DeliveryLocationPostcode: orderData.delivery.deliveryLocationPostcode,\r\n                DeliveryLocationAddress: orderData.delivery.deliveryLocationAddress,\r\n                DeliveryOption: orderData.delivery.deliveryOption,\r\n                PickupLocationName: orderData.delivery.pickupLocationName,\r\n                Available: orderData.delivery.available,\r\n                PaymentOption: orderData.paymentOption,\r\n                DriveawayCost: driveawayCost,\r\n                Email: orderData.orderCustomer.email,\r\n                FirstName: orderData.orderCustomer.firstName,\r\n                LastName: orderData.orderCustomer.lastName,\r\n                Mobile: orderData.orderCustomer.mobile,\r\n                ABN: orderData.orderCustomer.abn,\r\n                BusinessName: orderData.orderCustomer.businessName,\r\n                CustomerType: orderData.orderCustomer.customerType,\r\n                BillingAddress: orderData.orderCustomer.billingAddress,\r\n                BillingSuburb: orderData.orderCustomer.billingSuburb,\r\n                BillingPostcode: orderData.orderCustomer.billingPostCode,\r\n                BillingState: orderData.orderCustomer.billingState,\r\n                RegoAddress: orderData.orderCustomer.regoAddress,\r\n                RegoPostcode: orderData.orderCustomer.regoPostCode,\r\n                RegoSuburb: orderData.orderCustomer.regoSuburb,\r\n                RegoState: orderData.orderCustomer.regoState,\r\n                YanaOrderID: orderData.yanaOrderIDs.yanaOrderID,\r\n                YanaOrderNo: orderData.yanaOrderIDs.yanaOrderNo,\r\n                YanaCustomerID: orderData.yanaOrderIDs.yanaCustomerID,\r\n                YanaCustomerNo: orderData.yanaOrderIDs.yanaCustomerNo,\r\n                PaymentHistory: getPaymentHistory(orderData.orderPaymentHistory),\r\n                DownPayment: orderData.downPayment,\r\n                PaymentDueDate: orderData.paymentDueDate,\r\n                FinalPaymentAmount: orderData.finalPaymentAmount,\r\n                Total: orderData.orderVehicle.totalPrice,\r\n                Balance: orderData.currentBalance,\r\n                Comments: orderData.comments,\r\n            };\r\n            setOrder(tempOrder);\r\n            dispatch(orderDetailsStore.setOrderDetailsAction(tempOrder));\r\n\r\n            let pipelines: pipelineModel.IPipeLineItem[] = [];\r\n            let pipeLineData = orderData.pipeLines;\r\n            let isCancelled = false;\r\n            let showViewAppointmentButton = false;\r\n            if (!isNil(pipeLineData) && pipeLineData.length > 0) {\r\n                pipeLineData.map((item: any) => {\r\n                    if (item.pipelineName.includes(\"Cancel\")) {\r\n                        isCancelled = true;\r\n                    }\r\n\r\n                    //show view appointment button if pick-up date&time selection is done\r\n                    if (item.pipelineNumber == \"A\") {\r\n                        if (item.pipelineBarStepNumber == 5 && item.pipelineBarStepStatus == 1) {\r\n                            showViewAppointmentButton = true;\r\n                        }\r\n                    }\r\n                    else if (item.pipelineNumber == \"B\") {\r\n                        if (item.pipelineBarStepNumber == 6 && item.pipelineBarStepStatus == 1) {\r\n                            showViewAppointmentButton = true;\r\n                        }\r\n                    }\r\n                    else if (item.pipelineNumber == \"C\") {\r\n                        if (item.pipelineBarStepNumber == 7 && item.pipelineBarStepStatus == 1) {\r\n                            showViewAppointmentButton = true;\r\n                        }\r\n                    }\r\n                    else if (item.pipelineNumber == \"D\") {\r\n                        if (item.pipelineBarStepNumber == 8 && item.pipelineBarStepStatus == 1) {\r\n                            showViewAppointmentButton = true;\r\n                        }\r\n                    }\r\n\r\n                    pipelines.push({\r\n                        stepNo: item.pipelineNumber,\r\n                        step: item.pipelineBarStepNumber,\r\n                        name: item.pipelineName,\r\n                        desc: item.pipelineDesc,\r\n                        date: item.completeDate,\r\n                        pipelineBarStepStatus: item.pipelineBarStepStatus,\r\n                        buttonID: item.buttonID,\r\n                        buttonText: item.buttonText,\r\n                    });\r\n                });\r\n            }\r\n            setStepsList(pipelines);\r\n            setIsCancelledOrder(isCancelled);\r\n            setIfShowViewAppointmentButton(showViewAppointmentButton);\r\n\r\n            //let stateList = rdEnum.constStateList; // await countryState.getStates(tempOrder.Country);\r\n\r\n            //let billingState = getSelectState(stateList, orderData.orderCustomer.billingState);\r\n            //console.log(billingState);\r\n\r\n            let orderCustomerDetails: orderCustomerDetailsModel.IOrderCustomerDetails = {\r\n                country: orderData.orderVehicle.country,\r\n                birthday: orderData.orderCustomer.birthDay,\r\n                //birthdayFormat: orderData.orderCustomer.birthDay,\r\n                driverLicense: {\r\n                    driverLicenseNo: orderData.orderCustomer.driveLicenseNumber,\r\n                    driverLicenseExpiryDate: orderData.orderCustomer.driveLicenseExpDate\r\n                    //driverLicenseExpiryDate: !isNil(orderData.orderCustomer.driveLicenseExpDate)\r\n                    //    ? moment(orderData.orderCustomer.driveLicenseExpDate).toDate() : undefined,\r\n                    // driverLicenseExpiryDateFormat: orderData.orderCustomer.driveLicenseExpDate\r\n                },\r\n                customerType: orderData.orderCustomer.customerType,\r\n                firstname: orderData.orderCustomer.firstName,\r\n                middlename: orderData.orderCustomer.middleName,\r\n                lastname: orderData.orderCustomer.lastName,\r\n                email: orderData.orderCustomer.email,\r\n                phone: orderData.orderCustomer.mobile,\r\n                secondaryPhone: \"\",\r\n                abn: orderData.orderCustomer.abn,\r\n                businessName: orderData.orderCustomer.businessName,\r\n                billingAddress: {\r\n                    Address1: orderData.orderCustomer.billingAddress,\r\n                    Address2: \"\",\r\n                    Postcode: orderData.orderCustomer.billingPostCode,\r\n                    Suburb: orderData.orderCustomer.billingSuburb,\r\n                    State: { code: orderData.orderCustomer.billingState, name: orderData.orderCustomer.billingState }\r\n                },\r\n                regoAddress: {\r\n                    Address1: orderData.orderCustomer.regoAddress,\r\n                    Address2: \"\",\r\n                    Postcode: orderData.orderCustomer.regoPostCode,\r\n                    Suburb: orderData.orderCustomer.regoSuburb,\r\n                    State: { code: orderData.orderCustomer.regoState, name: orderData.orderCustomer.regoState }\r\n                },\r\n                deliveryAddress: {\r\n                    Address1: orderData.delivery.deliveryLocationAddress,\r\n                    Address2: \"\",\r\n                    Postcode: orderData.delivery.deliveryLocationPostcode,\r\n                    Suburb: orderData.delivery.deliveryLocationSuburb,\r\n                    State: { code: orderData.delivery.deliveryLocationState, name: orderData.delivery.deliveryLocationState }\r\n                },\r\n                paymentOption: orderData.paymentOption,\r\n                yanaOrderID: orderData.yanaOrderIDs.yanaOrderID,\r\n                yanaOrderNo: orderData.yanaOrderIDs.yanaOrderNo,\r\n                yanaCustomerID: orderData.yanaOrderIDs.yanaCustomerID,\r\n                yanaCustomerNo: orderData.yanaOrderIDs.yanaCustomerNo,\r\n                actionType: \"\"\r\n            };\r\n            dispatch(orderCustomerDetailsStore.setOrderCustomerDetailsAction(orderCustomerDetails));\r\n\r\n\r\n            let scheduleDelivery: scheduleDeliveryModel.IOrderScheduleDelivery = {\r\n                YanaOrderID: orderData.yanaOrderIDs.yanaOrderID,\r\n                YanaOrderNo: orderData.yanaOrderIDs.yanaOrderNo,\r\n                YanaCustomerID: orderData.yanaOrderIDs.yanaCustomerID,\r\n                YanaCustomerNo: orderData.yanaOrderIDs.yanaCustomerNo,\r\n                DeliveryLocationState: orderData.delivery.deliveryLocationState,\r\n                DeliveryLocationSuburb: orderData.delivery.deliveryLocationSuburb,\r\n                DeliveryLocationPostcode: orderData.delivery.deliveryLocationPostcode,\r\n                DeliveryLocationAddress: orderData.delivery.deliveryLocationAddress,\r\n                DeliveryOption: orderData.delivery.deliveryOption,\r\n                DeliveryDate: orderData.delivery.deliveryDate == \"\" ? undefined : moment(orderData.delivery.deliveryDate, \"DD.MM.YYYY\").toDate(),\r\n                DeliveryFormatDate: orderData.delivery.deliveryDate,\r\n                DeliveryTime: orderData.delivery.deliveryTime,\r\n                Country: orderData.orderCustomer.customerCountry,\r\n                PickupLocationName: orderData.delivery.pickupLocationName,\r\n                Available: orderData.delivery.available,\r\n            };\r\n            dispatch(orderScheduleDeliveryStore.setOrderScheduleDeliveryAction(scheduleDelivery));\r\n        }\r\n        else {\r\n            if (response.errorCode == rdEnum.enumRDErrorCode.NotSignIn) {\r\n                azureB2C.signIn();\r\n            }\r\n            else {\r\n                navigate(`${getFrontendUrl()}/error`);\r\n            }\r\n        }\r\n    }\r\n\r\n    const getOptions = (optionData: any): vehicleModel.IVehicleOptions[] | null => {\r\n        let configs: vehicleModel.IVehicleOptions[] = [];\r\n        optionData.map((item: any) => {\r\n            configs.push({\r\n                YanaOptionID: \"\",\r\n                OptionType: item.optionType,\r\n                OptionName: item.optionName,\r\n                OptionPrice: item.optionPrice,\r\n                OptionPicture: [],\r\n                OptionPictureMobile: [],\r\n                OptionDesc: item.optionDesc,\r\n                ChargeType: item.chargeType,\r\n                Disable: false,\r\n                TermsDescription: null,\r\n            });\r\n        });\r\n        return configs;\r\n    }\r\n\r\n    const getPaymentHistory = (paymentHistoryData: any): orderModel.IOrderPaymentHistory[] | null => {\r\n\r\n        let history: orderModel.IOrderPaymentHistory[] = [];\r\n        paymentHistoryData.map((item: any) => {\r\n            history.push({\r\n                PaymentDate: item.paymentDate,\r\n                PaymentName: item.paymentName,\r\n                PaymentAmount: item.paymentAmount,\r\n            });\r\n        });\r\n\r\n\r\n        return history;\r\n    }\r\n\r\n\r\n\r\n    const FrqQuestionsToggle = ({ children, eventKey, callback, isOpen }: any) => {\r\n\r\n        const { activeEventKey } = useContext(AccordionContext);\r\n\r\n        const decoratedOnClick = useAccordionButton(\r\n            eventKey,\r\n            () => {\r\n                if (callback) {\r\n                    callback(eventKey); // Invoke the callback if provided\r\n                }\r\n                setAccordionOpen({\r\n                    ...accordionOpen,\r\n                    [`btn${eventKey}` as keyof AccordionOpenType]: !accordionOpen[`btn${eventKey}` as keyof AccordionOpenType]\r\n                });\r\n            }\r\n        );\r\n\r\n        const isCurrentEventKey = activeEventKey === eventKey;\r\n\r\n        return (\r\n            <button\r\n                type=\"button\"\r\n                onClick={decoratedOnClick}\r\n                className='question-accordion-header-btn'\r\n                aria-expanded={accordionOpen[`btn${eventKey}` as keyof AccordionOpenType]}\r\n            >\r\n                {\r\n                    accordionOpen[`btn${eventKey}` as keyof AccordionOpenType]\r\n                        ?\r\n                        <img alt=\"\" src={`${getCMSAssets()}/users/minus.svg`} />\r\n                        :\r\n                        <img alt=\"\" src={`${getCMSAssets()}/users/plus.svg`} />\r\n                }\r\n                <span>{children}</span>\r\n            </button>\r\n        );\r\n    }\r\n\r\n\r\n    var currencyFormatter = new Intl.NumberFormat('en-AU', {\r\n        style: 'currency',\r\n        currency: 'AUD',\r\n    });\r\n\r\n    const showPrice = (price: number | null | undefined) => {\r\n        if (price == null || price == undefined || price == 0)\r\n            return \"Included\";\r\n        return currencyFormatter.format(price);\r\n    }\r\n\r\n    const optionsTemplate = (options: vehicleModel.IVehicleOptions[] | null, optionType: string) => {\r\n        let optionItemsTemplate: any[] = [];\r\n        if (!isNil(options) && options.length > 0) {\r\n            let selectedOptions = options.filter(m => m.OptionType == optionType);\r\n            if (!isNil(selectedOptions) && selectedOptions.length > 0) {\r\n                selectedOptions.map((optionItem: vehicleModel.IVehicleOptions, index: any) => {\r\n                    optionItemsTemplate.push(\r\n                        <div className='details-desc' key={optionType + \"_\" + index}>\r\n                            <p>{optionItem?.OptionName}</p>\r\n                            <span>{showPrice(optionItem?.OptionPrice)}</span>\r\n                        </div>\r\n                    );\r\n                })\r\n            }\r\n        }\r\n\r\n        let template: any[] = [];\r\n        if (optionItemsTemplate.length == 0) {\r\n            template.push(<></>);\r\n        }\r\n        else {\r\n            template.push(\r\n                <div className='details-item'>\r\n                    <div className='details-subtitle'>{optionType == rdEnum.enumVehicleOptionType.Charge ? rdEnum.enumVehicleOptionTypeName.Charge : rdEnum.enumVehicleOptionTypeName.Accessories}</div>\r\n                    {optionItemsTemplate}\r\n                </div>\r\n            );\r\n        }\r\n        return template;\r\n    }\r\n\r\n    useEffect(() => {\r\n        doGetDownloadPaymentSummary();\r\n\r\n    }, [orderDetailsFromStore?.yanaCustomerID, orderDetailsFromStore?.yanaOrderID])\r\n\r\n    const doGetDownloadPaymentSummary = async () => {\r\n        let doc: docModel.IDocumentItem = {\r\n            DocumentName: rdEnum.enumDocumentType.PaymentSummary,\r\n            DocumentType: rdEnum.enumDocumentType.PaymentSummary,\r\n            Base64: \"\",\r\n            InvalidDocment: null,\r\n            InvalidReason: null,\r\n            DocumentKey:  null,\r\n            DocumentUrl:  null,\r\n            DocumentDownloadUrl: null,\r\n        };\r\n        let requestData: docModel.IDocument = {\r\n            YanaCustomerID: orderDetailsFromStore?.yanaCustomerID || \"\",\r\n            YanaCustomerNo: orderDetailsFromStore?.yanaCustomerNo || \"\",\r\n            YanaOrderID: orderDetailsFromStore?.yanaOrderID || \"\",\r\n            YanaOrderNo: orderDetailsFromStore?.yanaOrderNo || \"\",\r\n            Country: orderDetailsFromStore?.country || \"\",\r\n            Documents: [doc]\r\n        };\r\n        let response = await docService.getSpecificDocuments(requestData);\r\n        if (response.status && response.data.length > 0) {\r\n            setPaymentSummaryLink(response.data[0].downloadUrl);\r\n        }\r\n    }\r\n\r\n    useEffect(() => {\r\n        if (window.digitalData) {\r\n            window.digitalData = {\r\n                pageInfo: {},\r\n                internalCampaignInfo: {},\r\n                articleInfo: {},\r\n                visitorProfile: {},\r\n                vehicleInfo: {},\r\n                toolsInfo: {}\r\n            };\r\n        }\r\n\r\n    }, []);\r\n\r\n    return (\r\n\r\n        <MainLayoutPage sceneId=\"container-has-header\">\r\n\r\n            <GlobalMenu />\r\n            {loadingStatus === rdEnum.enumProcessingStatus.Processing && (\r\n                <div className='order-details-loading-container'>\r\n                    {/* <ProgressSpinner\r\n                        style={{ width: '64px', height: '64px' }}\r\n                        strokeWidth=\"5\"\r\n                        animationDuration=\".8s\"\r\n                    /> */}\r\n                    <Spinner spinnerWidth={64} />\r\n                </div>\r\n            )}\r\n\r\n            {loadingStatus === rdEnum.enumProcessingStatus.Processed && (\r\n                <React.Fragment>\r\n                    <div className='order-details-container'>\r\n                        <div className='order-details-header'>\r\n                            <div className='header-panel'>\r\n                                <h1>{order?.VariantName}</h1>\r\n                            </div>\r\n                            {\r\n                                !isMobile\r\n                                ?\r\n                                <div className='header-management-panel'>\r\n                                    <div className='order-ID-box'>\r\n                                        Order ID: {order?.YanaOrderNo}\r\n                                    </div>\r\n                                    <div className=\"\">\r\n                                        {/*{order?.DeliveryOption == rdEnum.enumDeliveryOptions.Pickup && ifShowViewAppointmentButton && (*/}\r\n                                        {/*    <ViewAppointment buttonText={\"VIEW APPOINTMENT\"} />*/}\r\n                                        {/*)}*/}\r\n                                        <div className='right-options-panel'>\r\n                                            <Support />\r\n                                            <Documents />\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                                :\r\n                                <></>\r\n                            }\r\n                           \r\n                        </div>\r\n\r\n                        <Row className='details-carousel-content'>\r\n                            <Col lg={8} className='details-left-carousel-container'>\r\n                                <CarCarousel variantAWD='luxury' exteriorColor=\"Argent Silver Metallic\" interiorColor=\"Oxford Stone\" carouselInterval={null}\r\n                                    images={order.VehicleImages}\r\n                                    mobileImages={order.VehicleImages}\r\n                                    isUseImages={true}\r\n                                />\r\n                            </Col>\r\n\r\n                            {\r\n                                isMobile\r\n                                ?\r\n                                <div className='header-management-panel'>\r\n                                    {/* <div className='order-ID-box'>\r\n                                        Order ID: {order?.YanaOrderNo}\r\n                                    </div> */}\r\n                                    <div className=\"\">\r\n                                           {/* {order?.DeliveryOption == rdEnum.enumDeliveryOptions.Pickup && ifShowViewAppointmentButton && ()}*/}\r\n                                            {/*<ViewAppointment buttonText={\"VIEW APPOINTMENT\"} />*/}\r\n                                        \r\n                                        <div className='right-options-panel'>\r\n                                            <Support />\r\n                                            <Documents />\r\n                                        </div>\r\n\r\n                                        <div className='order-steps-container'>\r\n                                            <div className='order-steps-inner-container'>\r\n                                                <div className='order-panel'>\r\n                                                    <div className='order-date-panel'>\r\n                                                        <div className='order-id'>Order {order?.YanaOrderNo}</div>\r\n                                                        <div className='order-estimate-date'>Est. delivery {order?.Available}</div>\r\n                                                    </div>\r\n                                                    <div className='order-status-panel'>\r\n                                                        {/* <div className='order-status-box'>\r\n                                                            <div className='ordered-date'>09.09.2024</div>\r\n                                                            <div className='order-status'>Ordered</div>\r\n                                                        </div> */}\r\n                                                        <div className='order-placed-info'>Your order is in progress. There are a number of important steps to complete before we can deliver your Cadillac.</div>\r\n                                                    </div>\r\n                                                </div>\r\n\r\n                                                <div className='steps-panel' onClick={() => handleDialogOpen()}>\r\n                                                    See all steps\r\n                                                    <img alt=\"\" className='close-icon' src={`${getCMSAssets()}/checkout/right-black-arrow.svg`} />\r\n                                                </div>\r\n                                            </div>\r\n                                           \r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                                :\r\n                                <></>\r\n                            }\r\n                            {\r\n                                !isMobile\r\n                                ?\r\n                                <Col lg={4} className='details-right-steps-container'>\r\n\r\n                                    <div className='purchasing-steps-container'>\r\n                                        <div className='purchasing-steps-title'>\r\n                                            <h5>ORDER {order?.YanaOrderNo}</h5>\r\n                                            <span>Est. delivery {order?.Available}</span>\r\n                                        </div>\r\n                                        <ProgressSteps progressList={stepsList} />\r\n                                    </div>\r\n\r\n                                </Col>\r\n                                :\r\n                                <></>\r\n                            }\r\n                            \r\n                        </Row>\r\n\r\n                        {!isCancelledOrder && (\r\n\r\n                            <div className='selection-details'>\r\n                                <div className='selection-panel'>\r\n                                    <div className='section-top-panel'>\r\n                                        <div className='section-title'>\r\n                                            YOUR SELECTION\r\n                                        </div>\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-subtitle'>Variant</div>\r\n                                            <div className='details-desc'>\r\n                                                <p>{order?.VariantName}</p>\r\n                                                <span>{rdHelper.currencyFormatWithBlank(order.VariantPrice)}</span>\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-subtitle'>Exterior</div>\r\n                                            <div className='details-desc'>\r\n                                                <p>{order?.ExteriorName}</p>\r\n                                                <span>{showPrice(order?.ExteriorPrice)}</span>\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-subtitle'>Interior</div>\r\n                                            <div className='details-desc'>\r\n                                                <p>{order?.InteriorName}</p>\r\n                                                <span>{showPrice(order?.InteriorPrice)}</span>\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        {optionsTemplate(order?.Options, rdEnum.enumVehicleOptionType.Charge)}\r\n                                        {optionsTemplate(order?.Options, rdEnum.enumVehicleOptionType.Accessories)}\r\n\r\n                                        <div className='details-total-item'>\r\n                                            <div className='details-subtitle'>Vehicle Subtotal</div>\r\n                                            <div className='details-desc'>\r\n                                                <span>{showPrice(order?.DriveawayCost?.SubTotal)}</span>\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className='details-gst'>Includes {showPrice(order?.DriveawayCost?.GST)} GST</div>\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-subtitle'>Delivery option</div>\r\n                                            <div className='details-desc'>\r\n                                                <p>{order?.DeliveryOption}</p>\r\n                                                <span>{showPrice(order?.DriveawayCost?.HomeDelivery)}</span>\r\n                                            </div>\r\n                                        </div>\r\n                                        <div className=\"details-line\"></div>\r\n                                        {order?.Country == rdEnum.enumCountryCode.Australia && (\r\n                                            <React.Fragment>\r\n                                                <div className='details-item' style={{ marginTop: \"10px\" }}>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Luxury Car Tax</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.LuxuryCarTax)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='details-item'>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Local Stamp Duty</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.LocalStampDuty)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='details-item'>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Local Registration Costs</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.LocalRegistrationCost)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='details-item'>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Local CTP</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.LocalCTP)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='details-item'>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Local Plate Fee</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.LocalPlateFee)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n\r\n\r\n                          \r\n                                            </React.Fragment>\r\n                                        )}\r\n                                        {order?.Country == rdEnum.enumCountryCode.NewZealand && (\r\n                                            <React.Fragment>\r\n\r\n                                                <div className='details-item' style={{ marginTop: \"10px\" }}>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Local Registration Costs</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.LocalRegistrationCost)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='details-item'>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Local Plate Fee</p>\r\n                                                        <span>{rdHelper.currencyFormatWithIncluded(order?.DriveawayCost?.LocalPlateFee || 0)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='details-item'>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Tyre Stewardship Fee</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.TyreStewardshipFee)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                                <div className='details-item'>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Road User Charges</p>\r\n                                                        <span>{showPrice(order?.DriveawayCost?.RoadUserChargers)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                            </React.Fragment>\r\n                                        )}\r\n                                        <div className='details-total-item'>\r\n                                            <div className='details-subtitle'>On Road Fee Subtotal</div>\r\n                                            <div className='details-desc'>\r\n                                                <span>{showPrice(order?.DriveawayCost?.OnRoadFee)}</span>\r\n                                            </div>\r\n                                        </div>\r\n                                    </div>\r\n\r\n                                    <div className='section-bottom-panel'>\r\n                                        <div className='section-bottom'>\r\n                                            <h6>Total</h6>\r\n                                            <h6>{rdHelper.currencyFormatWithBlank(order.DriveawayCost?.DriveawayPrice || 0)}</h6>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <div className='payment-summary-panel'>\r\n                                    <div className='section-top-panel'>\r\n                                        <div className='section-title'>\r\n                                            PAYMENT SUMMARY\r\n                                        </div>\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-desc'>\r\n                                                <p>Total Price</p>\r\n                                                <span>{rdHelper.currencyFormatWithBlank(order?.DriveawayCost?.DriveawayPrice || 0)}</span>\r\n                                            </div>\r\n                                        </div>\r\n                                        {!isNil(order.PaymentHistory) && order.PaymentHistory.map((item: orderModel.IOrderPaymentHistory, index: any) => {\r\n                                            return (\r\n                                                <div className='details-item' key={\"\" + item + index}>\r\n                                                    <div className='details-subtitle'>{item.PaymentDate}</div>\r\n                                                    <div className='details-desc'>\r\n                                                        <p>Less: {item.PaymentName}</p>\r\n                                                        <span>{rdHelper.currencyFormatWithBlank(item.PaymentAmount)}</span>\r\n                                                    </div>\r\n                                                </div>\r\n                                            );\r\n                                        })}\r\n                                    </div>\r\n\r\n                                    <div className='section-bottom-panel'>\r\n                                        {!isNil(paymentSummaryLink) && paymentSummaryLink != \"\" && (\r\n                                        <div className='download-btn' onClick={() => {\r\n                                            window.open(paymentSummaryLink);\r\n                                        }}>\r\n                                            <img alt=\"\" src={`${getCMSAssets()}/order/download.svg`} />\r\n                                        </div>\r\n                                        )}\r\n                                        <div className='section-bottom'>\r\n                                            <h6>Current Balance</h6>\r\n                                            <h6>{rdHelper.currencyFormatWithBlank(order.Balance)}</h6>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n\r\n                                <div className='finance-delivery-container'>\r\n                                    <div className='finance-panel'>\r\n                                        <div className='section-title'>\r\n                                            FINANCE\r\n                                        </div>\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-subtitle'>Customer type</div>\r\n                                            <div className='details-desc'>\r\n                                                <p>{order?.CustomerType}</p>\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-subtitle'>Payment type</div>\r\n                                            <div className='details-desc'>\r\n                                                <p>{order?.PaymentOption}</p>\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        {/*<div className='details-item'>*/}\r\n                                        {/*    <div className='details-subtitle'>Down Payment</div>*/}\r\n                                        {/*    <div className='details-desc'>*/}\r\n                                        {/*        <p>{rdHelper.currencyFormatWithBlank(order?.DownPayment)}</p>*/}\r\n                                        {/*    </div>*/}\r\n                                        {/*</div>*/}\r\n                                    </div>\r\n\r\n                                    <div className='delivery-panel'>\r\n                                        <div className='section-title'>\r\n                                            {order.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery ? \"DELIVERY\" : \"IN-STORE COLLECTION\"}\r\n                                        </div>\r\n\r\n                                        {/* <div className='details-item'>\r\n                                <div className='details-subtitle'>Preferred option</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.DeliveryOption}</p>\r\n                                </div>\r\n                            </div> */}\r\n\r\n                                        <div className='details-item'>\r\n                                            <div className='details-subtitle'>Location</div>\r\n                                            <div className='details-desc'>\r\n                                                <p>{order.DeliveryOption == rdEnum.enumDeliveryOptions.HomeDelivery ? order?.DeliveryLocationAddress : order?.DeliveryLocationAddress}</p>\r\n                                            </div>\r\n                                        </div>\r\n\r\n                                        {/* <div className='details-item'>\r\n                                <div className='details-subtitle'>Estimated date</div>\r\n                                <div className='details-desc'>\r\n                                    <p>{order?.Available}</p>\r\n                                </div>\r\n                            </div> */}\r\n                                    </div>\r\n                                    <div className='order-comments-panel'>\r\n                                        <div className='section-title'>\r\n                                            Order Comments\r\n                                        </div>\r\n                                        <div className='details-item'>\r\n                                            {order.Comments}\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n\r\n                        { order?.PaymentOption == rdEnum.enumPaymentOptions.Finance && (\r\n                            <div className='success-disclaimer-container my-order'>\r\n                                <p>\r\n                                    {/* <i> */}\r\n                                    Credit subject to financier's approval. Terms, conditions, fees and charges apply. Rates, repayments and fees are estimates and are subject to change at any time. Credit provided by Plenti Finance Pty Limited ACN 636 759 861 (supported by its servicer, Plenti RE Limited ACN 166 646 635). Plenti RE Limited holds Australian Financial Services Licence number 449176 and Australian Credit Licence number 449176.\r\n                                    {/* </i> */}\r\n                                </p>\r\n                            </div>\r\n                        )}\r\n\r\n                        <div className='questions-container'>\r\n                            <Row>\r\n                                <Col lg={4} className='questions-title-panel'>\r\n                                    <h2>QUESTIONS?</h2>\r\n                                    <p>\r\n                                        Browse frequently asked questions for contract Cadillac Team for assistance.\r\n                            </p>\r\n                                </Col>\r\n                                <Col lg={8} className='questions-accordion-panel'>\r\n                                    <Accordion className='questions-accordion' alwaysOpen >\r\n                                        {/* <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"0\">PLATFORM¹</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"0\">\r\n                                                <Card.Body>\r\n                                                    <ul>\r\n                                                        <li>Powered by Ultium - GM's next-gen battery platform</li>\r\n                                                        <li>Dual-drive motor all-wheel drive</li>\r\n                                                        <li>Regenerative braking with Regen on Demand</li>\r\n                                                        <li>One Pedal Driving capability</li>\r\n                                                        <li>Electronic Precision Shift</li>\r\n                                                        <li>530km all-electric driving range²</li>\r\n                                                        <li>528hp / 388kW power³</li>\r\n                                                        <li>610Nm of near-instant torque³</li>\r\n                                                        <li>0-100km/h in 4.6 seconds3 with a top speed of 210km/h</li>\r\n                                                        <li>400 V lithium-ion Ultium battery with 102 kWh capacity</li>\r\n                                                        <li>DC fast charging 10-80% in 34 minutes (up to 190 kW)&#x2074;</li>\r\n                                                        <li>AC charging 0-100% (3-phase 230V AC) in 7 hours (11 kW)&#x2074;</li>\r\n                                                    </ul>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"1\">INTERIOR</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"1\">\r\n                                                <Card.Body>\r\n                                                    <ul>\r\n                                                        <li>33-inch diagonal LED screen, capable of 9K resolution</li>\r\n                                                        <li>Fixed glass roof with power shade</li>\r\n                                                        <li>Counter levered centre console with armrest</li>\r\n                                                        <li>Glovebox with electronic release</li>\r\n                                                        <li>Carpeted floor mats, front and rear</li>\r\n                                                        <li>Rear cargo shade, retractable</li>\r\n                                                        <li>Interior ambient lighting with 26 colours</li>\r\n                                                        <li>Illuminated door sill plates with LYRIQ show car silhouette</li>\r\n                                                        <li>Power rake and telescopic steering column</li>\r\n                                                        <li>Tri-zone automatic climate control (including rear)</li>\r\n                                                        <li>Cabin humidity and air quality sensors</li>\r\n                                                        <li>Keyless entry with automatic start</li>\r\n                                                    </ul>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"2\">SEATING COMFORT</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"2\">\r\n                                                <Card.Body>\r\n                                                    <ul>\r\n                                                        <li>Automated heated steering wheel with mounted controls</li>\r\n                                                        <li>Automatic heated front and rear (outboard) seats</li>\r\n                                                        <li>Ventilated front seats with massage function</li>\r\n                                                        <li>8-way power-adjustable front seats</li>\r\n                                                        <li>4-way power lumbar adjuster, driver and front passenger</li>\r\n                                                        <li>Rear bench seat, 1-touch flat folding</li>\r\n                                                        <li>60/40 split-folding rear bench seat and rear fold-down centre armrest</li>\r\n                                                        <li>Rear centre seat with manually adjustable headrest</li>\r\n                                                        <li>Memory capability for two: driver seat, outside mirrors and steering wheel</li>\r\n                                                    </ul>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"3\">INFOTAINMENT</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"3\">\r\n                                                <Card.Body>\r\n                                                    <ul>\r\n                                                        <li>Wireless Apple Carplay and Android Auto built in</li>\r\n                                                        <li>Cadillac-exclusive AKG Studio 19-speaker audio system</li>\r\n                                                        <li>Active noise cancellation</li>\r\n                                                        <li>Wireless mobile device charging (requires compatible device)</li>\r\n                                                        <li>Digital audio broadcast (DAB/DAB+/DMB-R)</li>\r\n                                                        <li>5 USB-C ports (3 full function, front, 2 charge-only, rear)</li>\r\n                                                    </ul>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"4\">EXTERIOR</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"4\">\r\n                                                <Card.Body>\r\n                                                    <ul>\r\n                                                        <li>Future face of Cadillac: distinctive 3D-eched crystal shield front grille design</li>\r\n                                                        <li>Signature Adaptive LED headlamps incorporated in slimline vertical design</li>\r\n                                                        <li>Daytime running lamps (DRLs) incorporated in slimline vertical design</li>\r\n                                                        <li>LED rear taillights and indicators</li>\r\n                                                        <li>21\" split spoke alloy wheels</li>\r\n                                                        <li>Heated, power-adjustable, power-folding, driver side auto dimming mirrors</li>\r\n                                                        <li>Mirror-integrated turn signal indicators</li>\r\n                                                        <li>Acoustic laminated and solar-absorbing front door glass</li>\r\n                                                        <li>Privacy glass</li>\r\n                                                        <li>Hands free power liftgate</li>\r\n                                                    </ul>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"5\">SAFETY & SECURITY⁸</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"5\">\r\n                                                <Card.Body>\r\n                                                    <ul>\r\n                                                        <li>6 airbags: front and thorax, first and second row roof rail HD Surround Vision with birds-eye view</li>\r\n                                                        <li>Rear Camera (digital) Mirror with lens-cleaning feature</li>\r\n                                                        <li>Adaptive Cruise Control</li>\r\n                                                        <li>Lane Keep Assist with Lane Departure Warning</li>\r\n                                                        <li>Blind Zone Steering Assist</li>\r\n                                                        <li>Following Distance Indicator • Forward Collision Alert</li>\r\n                                                        <li>Enhanced Autonomous Emergency Braking Reverse Autonomous Braking</li>\r\n                                                        <li>Rear Pedestrian Detection</li>\r\n                                                        <li>Intersection Autonomous Emergency Braking Front Pedestrian and Cyclist Braking</li>\r\n                                                        <li>Side Cyclist Alert</li>\r\n                                                        <li>Rear Cross-traffic Braking</li>\r\n                                                        <li>Safety Alert Seat</li>\r\n                                                        <li>Locking wheel lugs</li>\r\n                                                        <li>Driver Drowsiness Monitoring System</li>\r\n                                                        <li>Steering column lock</li>\r\n                                                        <li>Door shield locks and glass-break sensors Vehicle inclination tilt sensors</li>\r\n                                                        <li>Vehicle interior movement sensor</li>\r\n                                                        <li>Self-powered theft deterrent system</li>\r\n                                                        <li>Tyre pressure monitoring system</li>\r\n                                                        <li>RainsenseTM automatic wipers</li>\r\n                                                        <li>Windshield with heated glass in wiper park position</li>\r\n                                                    </ul>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card> \r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"6\">DIMENSIONS</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"6\">\r\n                                                <Card.Body>\r\n                                                    <ul>\r\n                                                        <li>Overall height: 1,623mm</li>\r\n                                                        <li>Overall length: 5,005mm</li>\r\n                                                        <li>Overall width (with mirrors): 2,207mm</li>\r\n                                                        <li>Wheelbase: 3,094mm</li>\r\n                                                        <li>Headroom: 980mm (front), 957mm (rear)</li>\r\n                                                        <li>Legroom: 1,124mm (front-max), 1,006mm (rear)</li>\r\n                                                        <li>Shoulder room: 1,497mm (front), 1,488mm (rear)</li>\r\n                                                        <li>Hip room: 1,436mm (front), 1,372mm (rear)</li>\r\n                                                        <li>Base Curb Weight: 2,774kg9</li>\r\n                                                        <li>Passenger volume: 2,976L</li>\r\n                                                        <li>Cargo volume: 793L (behind read seat), 1,722L (rear seatbacks folded)</li>\r\n                                                    </ul>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card> */}\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"0\">ORDER</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"0\">\r\n                                                <Card.Body>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: I've changed my mind. Can I cancel my order? </p>\r\n                                                        <p>A: We understand plans change. You can cancel your order any time before your Contract of Sale has been signed and cooling off period passed. To do so, please contact the Cadillac Sales Team using the drop down at the top right of your Cadillac account.  </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: Can I update my order (change my vehicle or its specifications)? </p>\r\n                                                        <p>A: Please contact the Cadillac Sale Team using the drop down at the top right of your Cadillac account to discuss changes to your order. Your options will be determined by your order status and individual circumstances.  </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: When do I need to make full payment for the vehicle?  </p>\r\n                                                        <p>A: We require full payment for your Cadillac at least 3 business days prior to delivery. Regional Delivery customers are required to make full payment before a delivery date is arranged. </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: How much notice will I have to arrange payment? </p>\r\n                                                        <p>A: The payment task will activate as soon as your Contract of Sale is signed, and cooling off period passed. You will find the payment task and instructions in the order tracking section of your account home page. </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: Can I pay the full price of the vehicle on my credit card? </p>\r\n                                                        <p>A: No. Cadillac requires payments to be made via electronic funds transfer (EFT). You can view instructions in the payments task once it is available in your account.  </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: Does Cadillac accept Trade-ins? </p>\r\n                                                        <p>A: Cadillac does not currently accept trade-ins. Should you have a vehicle to dispose of, please contact the Cadillac Sales Team so we can assist you in this process. </p>\r\n                                                    </div>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"1\">FINANCE</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"1\">\r\n                                                <Card.Body>\r\n                                                    {/* <div className='qa-card'>\r\n                                                        <p>Q: Can I get a Cadillac on a novated lease? </p>\r\n                                                        <p>A: Not at this stage. Cadillac will continue to expand its purchase options in Australia and New Zealand.  </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: If my finance application gets rejected, how can I proceed? Will my deposit be refunded to me if I cannot proceed? </p>\r\n                                                        <p>A: Your Contract of Sale is conditional upon finance approval. If your application is rejected, you can speak with our Finance partners about next steps. The Cadillac Sales Team will be available to understand your individual circumstances and next steps relating to your deposit. </p>\r\n                                                    </div> */}\r\n                                                    <div className='qa-card'>\r\n                                                        {\r\n                                                            order?.Country == rdEnum.enumCountryCode.Australia\r\n                                                            ?\r\n                                                            <p>\r\n                                                            Plenti and Cadillac have partnered to provide consumers with a simple and efficient financing application experience - for any finance related questions please contact Plenti on 1800 954 203.\r\n                                                            </p>\r\n                                                            :\r\n                                                            <p>\r\n                                                            MTF and Cadillac have partnered to provide you with a simple and efficient financing application experience – for any finance related questions please contact MTF on 03 477 0531. \r\n                                                            </p>\r\n                                                        }\r\n                                                    </div>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n\r\n                                        <Card>\r\n                                            <Card.Header>\r\n                                                <FrqQuestionsToggle eventKey=\"2\">DELIVERY</FrqQuestionsToggle>\r\n                                            </Card.Header>\r\n                                            <Accordion.Collapse eventKey=\"2\">\r\n                                                <Card.Body>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: Can I change the delivery location of my Cadillac? Store vs Home Delivery </p>\r\n                                                        <p>A: Please contact the Cadillac Sales Team to discuss changes to your instore pick up or delivery location. Your options will be determined by your order status and individual circumstances.    </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: How can I reschedule the delivery date of my Cadillac?  </p>\r\n                                                        <p>A: You can manage your instore pick up appointment in the order tracking section of your account. For any other queries relating to your pick up or delivery, please contact the Cadillac Sales Team. </p>\r\n                                                    </div>\r\n                                                    <div className='qa-card'>\r\n                                                        <p>Q: Can my partner pick up my Cadillac on my behalf? </p>\r\n                                                        <p>A: The registered owner will be required to pick up or take delivery of their vehicle, including provision of photo identification to Cadillac staff. </p>\r\n                                                    </div>\r\n                                                </Card.Body>\r\n                                            </Accordion.Collapse>\r\n                                        </Card>\r\n                                    </Accordion>\r\n                                </Col>\r\n                            </Row>\r\n                        </div>\r\n                    </div>\r\n\r\n                    {\r\n                        isMobile\r\n                        ?\r\n                        <Dialog className='mobile-steps-dialog' position='bottom' visible={isOpen} draggable={false} resizable={true} onHide={() => onHide()}>\r\n                            <div className='purchasing-steps-container'>\r\n                                {/* <div className='close-panel'>\r\n                                    <img alt=\"\" onClick={() => onHide()} className='download-icon' src={`${getCMSAssets()}/inventory/cross.svg`} />\r\n                                </div> */}\r\n                                <div className='purchasing-steps-title'>\r\n                                    <h5>ORDER {order?.YanaOrderNo}</h5>\r\n                                    <span>Est. delivery {order?.Available}</span>\r\n                                </div>\r\n                                <ProgressSteps progressList={stepsList} />\r\n                            </div>\r\n                        </Dialog>\r\n                        :\r\n                        <></>\r\n                    }\r\n                    \r\n                </React.Fragment>\r\n            )}\r\n\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\nexport default OrderDetails\r\n\r\n","import React, {\r\n    useState,\r\n    useEffect,\r\n    useRef,\r\n} from 'react';\r\nimport { useSearchParams, useNavigate, Link } from 'react-router-dom';\r\nimport { filter, includes, find, isNil, String, clone, isNull } from 'lodash';\r\nimport { Helmet } from 'react-helmet-async';\r\nimport { useSelector, useDispatch } from 'react-redux';\r\n\r\nimport { useCheckMobileScreen } from 'helpers/useCheckMobileScreen';\r\nimport { IAppState } from 'model/IAppState';\r\nimport { MainLayoutPage } from 'LayoutPages';\r\nimport {\r\n    getCMSAssets,\r\n} from 'helpers/Uri';\r\n\r\n\r\nconst MaintenancePage = () => {\r\n    return (\r\n        <MainLayoutPage>\r\n            <div className=\"maintenance-page\">\r\n                <div className=\"overlay-content\">\r\n                    <img src={`${getCMSAssets()}/home/Cadillac Logo - White.png`} alt=\"Logo\" />\r\n\r\n                    <h1>WE'LL BE RIGHT BACK.</h1>\r\n                    <p>We're making updates to the Cadillac Store. Please check back soon.</p>\r\n                    <button onClick={() => {\r\n                        window.location.href = \"https://www.cadillacanz.com/au-en/lyriq-electric-suv\";\r\n                    }}>LEARN ABOUT LYRIQ</button>\r\n                </div>\r\n            </div>\r\n        </MainLayoutPage>\r\n    )\r\n}\r\n\r\n\r\nexport default MaintenancePage;","import { css } from '@emotion/react';\r\nimport './App.scss';\r\nimport React, { useRef, useState, useEffect, Fragment } from 'react';\r\nimport { Provider } from 'react-redux';\r\nimport { configureStore } from './stores/Store';\r\nimport { HomePage } from './HomePage';\r\nimport { ScrollProvider } from './pages/Main/ScrollToSection';\r\nimport { fontFamily, fontSize, gray2 } from './Styles';\r\n\r\nimport {\r\n    BrowserRouter,\r\n    Route,\r\n    useLocation,\r\n    Routes,\r\n    Navigate,\r\n} from 'react-router-dom';\r\n\r\n\r\n//import { TransitionGroup, CSSTransition } from 'react-transition-group';\r\n\r\n\r\nimport { getFrontendUrl, getFrontendUrlWithSlash } from 'helpers/Uri';\r\nimport { ErrorPage } from 'scene/Info/ErrorPage';\r\nimport { NotFoundPage } from 'scene/Info/NotFoundPage';\r\n\r\nimport { setupIonicReact, IonApp } from '@ionic/react';\r\n\r\nimport { propTypes } from 'react-bootstrap/esm/Image';\r\n\r\n//users\r\nimport { SignInPage } from 'scene/Users/SignInPage';\r\nimport { ComingSoon } from 'pages/Support/ComingSoon';\r\n//import { JoinUsPage } from 'scene/Users/JoinUsPage';\r\nimport { ForgotPasswordPage } from 'scene/Users/ForgotPasswordPage';\r\nimport { ResetPasswordPage } from 'scene/Users/ResetPasswordPage';\r\nimport { EmailVerficationPage } from 'scene/Users/EmailVerficationPage';\r\nimport { UpdatePasswordPage } from \"scene/Users/UpdatePasswordPage\";\r\nimport { GoogleAutoCompletePage } from 'scene/Playground/GoogleAutoCompletePage';\r\n//import { AdyenPayment } from 'scene/Playground/AdyenPayment';\r\nimport { AuthPage } from 'scene/Users/AuthPage';\r\n\r\n/* Theme variables */\r\nimport './variables.css';\r\nimport { getUserIP } from \"services/UserIP\";\r\n\r\nimport ScrollToTop from 'components/ScrollToTop';\r\nimport { InventoryPage } from 'pages/InventoryPage';\r\nimport OrderPlacedSuccess from 'pages/OrderProgress/OrderPlacedSuccess';\r\nimport OrderWaitlisted from 'pages/OrderProgress/OrderWaitlisted';\r\nimport NewVehicleInventory from 'pages/Global/inventory/NewVehicleInventory';\r\nimport TestDrive from 'pages/Global/testDrive/TestDrive';\r\nimport MyOrders from 'pages/Global/orders/MyOrders';\r\nimport Profiles from 'pages/Global/profiles/Profiles';\r\nimport Privacy from 'pages/Global/privacy/Privacy';\r\nimport OrderDetails from 'pages/Global/orders/OrderDetails';\r\nimport MaintenancePage from 'scene/Info/MaintenancePage';\r\n\r\nimport { MsalProvider, useMsal } from '@azure/msal-react';\r\nimport { EventType } from '@azure/msal-browser';\r\nimport { b2cPolicies, protectedResources } from 'helpers/authConfig';\r\nimport { compareIssuingPolicy } from 'helpers/claimUtils';\r\n//import GoogleAutoCompletePage from 'scene/Playground/GoogleAutoCompletePage';\r\nimport * as rdUserService from 'services/User';\r\n\r\n\r\nconst store = configureStore();\r\nsetupIonicReact();\r\n\r\ndeclare global {\r\n    interface Window {\r\n        digitalData?: any;\r\n        _satellite: {\r\n            track: (event: string) => void;\r\n            getVar: (name: string) => any;\r\n            [key: string]: any; // Include any other methods you may use\r\n        };\r\n    }\r\n}\r\n\r\nfunction App() {\r\n    //const dispatch = useDispatch();\r\n    const { instance } = useMsal();\r\n    useEffect(() => {\r\n        const callbackId = instance.addEventCallback((event: any) => {\r\n            if (\r\n                (event.eventType === EventType.LOGIN_SUCCESS || event.eventType === EventType.ACQUIRE_TOKEN_SUCCESS) &&\r\n                event.payload.account\r\n            ) {\r\n                /**\r\n                 * For the purpose of setting an active account for UI update, we want to consider only the auth\r\n                 * response resulting from SUSI flow. \"tfp\" claim in the id token tells us the policy (NOTE: legacy\r\n                 * policies may use \"acr\" instead of \"tfp\"). To learn more about B2C tokens, visit:\r\n                 * https://docs.microsoft.com/en-us/azure/active-directory-b2c/tokens-overview\r\n                 */\r\n                //if (compareIssuingPolicy(event.payload.idTokenClaims, b2cPolicies.names.editProfile)) {\r\n                //    // retrieve the account from initial sing-in to the app\r\n                //    const originalSignInAccount = instance\r\n                //        .getAllAccounts()\r\n                //        .find(\r\n                //            (account) =>\r\n                //                account.idTokenClaims.oid === event.payload.idTokenClaims.oid &&\r\n                //                account.idTokenClaims.sub === event.payload.idTokenClaims.sub &&\r\n                //                compareIssuingPolicy(account.idTokenClaims, b2cPolicies.names.signUpSignIn)\r\n                //        );\r\n\r\n                //    let signUpSignInFlowRequest = {\r\n                //        authority: b2cPolicies.authorities.signUpSignIn.authority,\r\n                //        account: originalSignInAccount,\r\n                //    };\r\n\r\n                //    // silently login again with the signUpSignIn policy\r\n                //    instance.ssoSilent(signUpSignInFlowRequest);\r\n                //}\r\n\r\n                /**\r\n                 * Below we are checking if the user is returning from the reset password flow.\r\n                 * If so, we will ask the user to reauthenticate with their new password.\r\n                 * If you do not want this behavior and prefer your users to stay signed in instead,\r\n                 * you can replace the code below with the same pattern used for handling the return from\r\n                 * profile edit flow\r\n                 */\r\n                //console.log(\"app msal\");\r\n                if (compareIssuingPolicy(event.payload.idTokenClaims, b2cPolicies.names.forgotPassword)) {\r\n\r\n                    //console.log(\"forgotpassword\");\r\n                    let signUpSignInFlowRequest = {\r\n                        authority: b2cPolicies.authorities.signUpSignIn.authority,\r\n                        scopes: [\r\n                            ...protectedResources.apiTodoList.scopes.read,\r\n                            ...protectedResources.apiTodoList.scopes.write,\r\n                        ],\r\n                    };\r\n                    instance.loginRedirect(signUpSignInFlowRequest);\r\n                }\r\n            }\r\n\r\n            if (event.eventType === EventType.LOGIN_FAILURE) {\r\n                // Check for forgot password error\r\n                // Learn more about AAD error codes at https://docs.microsoft.com/en-us/azure/active-directory/develop/reference-aadsts-error-codes\r\n                if (event.error && event.error.errorMessage.includes('AADB2C90118')) {\r\n                    //reset password\r\n                    const resetPasswordRequest = {\r\n                        authority: b2cPolicies.authorities.forgotPassword.authority,\r\n                        scopes: [],\r\n                    };\r\n                    instance.loginRedirect(resetPasswordRequest);\r\n                }\r\n                else if (event.error && event.error.errorMessage.includes('AADB2C90091')) {\r\n                    //cancel reset password, go to home page\r\n                    window.location.href = getFrontendUrl();\r\n                }\r\n            }\r\n        });\r\n\r\n        return () => {\r\n            if (callbackId) {\r\n                instance.removeEventCallback(callbackId);\r\n            }\r\n        };\r\n        // eslint-disable-next-line\r\n    }, [instance]);\r\n\r\n\r\n    //useEffect(() => {\r\n    //    // Create a script element\r\n    //    const script = document.createElement(\"script\");\r\n    //    script.type = \"text/javascript\";\r\n\r\n    //    // Optionally, you can add JavaScript code directly within the script tag\r\n    //    script.innerHTML = `_satellite.pageBottom();`;\r\n\r\n    //    // Append script to body (near the </body>)\r\n    //    document.body.appendChild(script);\r\n\r\n    //    // Cleanup: remove the script when the component is unmounted\r\n    //    return () => {\r\n    //        document.body.removeChild(script);\r\n    //    };\r\n    //}, []);\r\n\r\n    //const [showMaintenancePage, setShowMaintenancePage] = useState(false);\r\n\r\n    //const doGetIsShowMaintenance = async () => {\r\n    //    let response = await rdUserService.isShowMaintenance();\r\n    //    if (response.status) {\r\n    //        setShowMaintenancePage(response.data);\r\n    //    }\r\n\r\n    //}\r\n\r\n    //useEffect(() => {\r\n    //    doGetIsShowMaintenance();\r\n    //},[]);\r\n\r\n\r\n\r\n    //if (showMaintenancePage) {\r\n    //    return (\r\n    //        <MsalProvider instance={instance}>\r\n    //            <Provider store={store}>\r\n    //                <ScrollProvider>\r\n    //                    <BrowserRouter>\r\n    //                        <div\r\n    //                            css={css`\r\n    //                    font-family: ${fontFamily};\r\n    //                    font-size: ${fontSize};\r\n    //                    color: ${gray2};\r\n    //                `}\r\n    //                        >\r\n    //                            <ScrollToTop />\r\n\r\n    //                            {process.env.REACT_APP_VIRTUAL_DIR_FRONTEND != \"\" && (\r\n    //                                <Routes>\r\n    //                                    <Navigate to={`${getFrontendUrlWithSlash()}`} />\r\n    //                                </Routes>\r\n    //                            )}\r\n    //                            {/*basename={`${getFrontendUrl()}`}*/}\r\n    //                            <Routes basename={process.env.REACT_APP_VIRTUAL_DIR_FRONTEND == \"\" ? undefined : getFrontendUrlWithSlash()} >\r\n    //                                <Route path=\"*\" element={<MaintenancePage />} />\r\n    //                            </Routes>\r\n    //                        </div>\r\n    //                    </BrowserRouter>\r\n    //                </ScrollProvider>\r\n    //            </Provider>\r\n    //        </MsalProvider>\r\n    //    );\r\n    //}\r\n    //else { }\r\n        return (\r\n            <MsalProvider instance={instance}>\r\n                <Provider store={store}>\r\n                    <ScrollProvider>\r\n                        <BrowserRouter>\r\n                            <div\r\n                                css={css`\r\n                        font-family: ${fontFamily};\r\n                        font-size: ${fontSize};\r\n                        color: ${gray2};\r\n                    `}\r\n                            >\r\n                                <ScrollToTop />\r\n\r\n                                {process.env.REACT_APP_VIRTUAL_DIR_FRONTEND != \"\" && (\r\n                                    <Routes>\r\n                                        <Navigate to={`${getFrontendUrlWithSlash()}`} />\r\n                                    </Routes>\r\n                                )}\r\n                                {/*basename={`${getFrontendUrl()}`}*/}\r\n                                <Routes basename={process.env.REACT_APP_VIRTUAL_DIR_FRONTEND == \"\" ? undefined : getFrontendUrlWithSlash()} >\r\n                                    <Route path=\"/\" element={<HomePage />} />\r\n                                    <Route path=\"/configure\" element={<HomePage />} />\r\n                                    <Route path=\"/auth\" element={<AuthPage />} />   {/*used by Azure b2c*/}\r\n\r\n                                    <Route path=\"/links/:linkKey\" element={<HomePage />} />\r\n\r\n                                    <Route path=\"coming-soon\" element={<ComingSoon />} />\r\n                                    <Route path=\"google-address-autocomplete\" element={<GoogleAutoCompletePage />} />\r\n                                    {/*                                <Route path=\"payment\" element={<AdyenPayment />} />*/}\r\n\r\n                                    {/* <Route path=\"test-drive\" element={<TestDrive />} /> */}\r\n                                    <Route path=\"test-drive/:QRcode\" element={<TestDrive />} />\r\n                                    <Route path=\"test-drive\" element={<TestDrive />} />\r\n                                    <Route path=\"inventory\" element={<InventoryPage />} />\r\n                                    {/*<Route path=\"inventory/:variant/:exterior/:interior/:outOfStockBoxLocation\" element={<InventoryPage />} />*/}\r\n\r\n                                    <Route path=\"new-vehicle-inventory\" element={<NewVehicleInventory />} />\r\n\r\n                                    <Route path=\"order-success/:yanaCustomerID/:yanaCustomerNo/:yanaOrderID/:yanaOrderNo/:rdRefNo/:country\" element={<OrderPlacedSuccess />} />\r\n                                    {/*<Route path=\"order-waitlisted/:waitlistId/:waitlistNo\" element={<OrderWaitlisted />} />*/}\r\n                                    <Route path=\"order-waitlisted/:webkey\" element={<OrderWaitlisted />} />\r\n\r\n                                    <Route path=\"my-orders\" element={<MyOrders />} />\r\n                                    <Route path=\"my-orders/:yanaID/:yanaNo/:customerID/:customerNo/:country\" element={<OrderDetails />} />\r\n                                    <Route path=\"profile\" element={<Profiles />} />\r\n                                    <Route path=\"privacy\" element={<Privacy />} />\r\n\r\n                                    <Route path=\"sign-in\" element={<SignInPage />} />    {/*we are using Azure B2C login, this page is not in use anymore*/}\r\n                                    {/*<Route path=\"join-us\" element={<JoinUsPage />} />*/}\r\n                                    <Route path='forgot-password' element={<ForgotPasswordPage />} />\r\n                                    <Route path='email-verification' element={<EmailVerficationPage />} />\r\n                                    <Route path='reset-password' element={<ResetPasswordPage />} />\r\n                                    <Route path=\"maintenance\" element={<MaintenancePage />} />\r\n\r\n                                    <Route path='test' element={<GoogleAutoCompletePage />} />\r\n                                    <Route path=\"error\" element={<NotFoundPage />} />\r\n                                    <Route path=\"*\" element={<NotFoundPage />} />\r\n                                </Routes>\r\n                            </div>\r\n                        </BrowserRouter>\r\n                    </ScrollProvider>\r\n                </Provider>\r\n            </MsalProvider>\r\n        );\r\n    \r\n\r\n\r\n}\r\n\r\nexport default App;\r\n\r\n","/**\r\n * Populate claims table with appropriate description\r\n * @param {Object} claims ID token claims\r\n * @returns claimsObject\r\n */\r\nexport const createClaimsTable = (claims:any) => {\r\n    let claimsObj = {};\r\n    let index = 0;\r\n\r\n    Object.keys(claims).forEach((key: any) => {\r\n        if (typeof claims[key] !== 'string' && typeof claims[key] !== 'number') return;\r\n        switch (key) {\r\n            case 'aud':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    \"Identifies the intended recipient of the token. In ID tokens, the audience is your app's Application ID, assigned to your app in the Azure portal.\",\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'iss':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'Identifies the issuer, or authorization server that constructs and returns the token. It also identifies the Azure AD tenant for which the user was authenticated. If the token was issued by the v2.0 endpoint, the URI will end in /v2.0. The GUID that indicates that the user is a consumer user from a Microsoft account is 9188040d-6c67-4c5b-b112-36a304b66dad.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'iat':\r\n                populateClaim(\r\n                    key,\r\n                    changeDateFormat(claims[key]),\r\n                    'Issued At indicates when the authentication for this token occurred.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'nbf':\r\n                populateClaim(\r\n                    key,\r\n                    changeDateFormat(claims[key]),\r\n                    'The nbf (not before) claim identifies the time (as UNIX timestamp) before which the JWT must not be accepted for processing.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'exp':\r\n                populateClaim(\r\n                    key,\r\n                    changeDateFormat(claims[key]),\r\n                    \"The exp (expiration time) claim identifies the expiration time (as UNIX timestamp) on or after which the JWT must not be accepted for processing. It's important to note that in certain circumstances, a resource may reject the token before this time. For example, if a change in authentication is required or a token revocation has been detected.\",\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'name':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    \"The principal about which the token asserts information, such as the user of an application. This value is immutable and can't be reassigned or reused. It can be used to perform authorization checks safely, such as when the token is used to access a resource. By default, the subject claim is populated with the object ID of the user in the directory\",\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'preferred_username':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'The primary username that represents the user. It could be an email address, phone number, or a generic username without a specified format. Its value is mutable and might change over time. Since it is mutable, this value must not be used to make authorization decisions. It can be used for username hints, however, and in human-readable UI as a username. The profile scope is required in order to receive this claim.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'nonce':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'The nonce matches the parameter included in the original /authorize request to the IDP. If it does not match, your application should reject the token.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'oid':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'The oid (user’s object id) is the only claim that should be used to uniquely identify a user in an Azure AD tenant. The token might have one or more of the following claim, that might seem like a unique identifier, but is not and should not be used as such.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'tid':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'The tenant ID. You will use this claim to ensure that only users from the current Azure AD tenant can access this app.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'upn':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    '(user principal name) – might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place or might change to reflect a personal change like marriage.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'email':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'Email might be unique amongst the active set of users in a tenant but tend to get reassigned to new employees as employees leave the organization and others take their place.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'acct':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'Available as an optional claim, it lets you know what the type of user (homed, guest) is. For example, for an individual’s access to their data you might not care for this claim, but you would use this along with tenant id (tid) to control access to say a company-wide dashboard to just employees (homed users) and not contractors (guest users).',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'sid':\r\n                populateClaim(key, claims[key], 'Session ID, used for per-session user sign-out.', index, claimsObj);\r\n                index++;\r\n                break;\r\n            case 'sub':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'The sub claim is a pairwise identifier - it is unique to a particular application ID. If a single user signs into two different apps using two different client IDs, those apps will receive two different values for the subject claim.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'ver':\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'Version of the token issued by the Microsoft identity platform',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case \"auth_time\":\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'The time at which a user last entered credentials, represented in epoch time. There is no discrimination between that authentication being a fresh sign-in, a single sign-on (SSO) session, or another sign-in type.',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case \"at_hash\":\r\n                populateClaim(\r\n                    key,\r\n                    claims[key],\r\n                    'An access token hash included in an ID token only when the token is issued together with an OAuth 2.0 access token. An access token hash can be used to validate the authenticity of an access token',\r\n                    index,\r\n                    claimsObj\r\n                );\r\n                index++;\r\n                break;\r\n            case 'uti':\r\n            case 'rh':\r\n                index++;\r\n                break;\r\n            default:\r\n                populateClaim(key, claims[key], '', index, claimsObj);\r\n                index++;\r\n        }\r\n    });\r\n\r\n    return claimsObj;\r\n};\r\n\r\n/**\r\n * Populates claim, description, and value into an claimsObject\r\n * @param {String} claim\r\n * @param {String} value\r\n * @param {String} description\r\n * @param {Number} index\r\n * @param {Object} claimsObject\r\n */\r\nconst populateClaim = (claim: any, value: any, description: any, index: any, claimsObject: any) => {\r\n    let claimsArray = [];\r\n    claimsArray[0] = claim;\r\n    claimsArray[1] = value;\r\n    claimsArray[2] = description;\r\n    claimsObject[index] = claimsArray;\r\n};\r\n\r\n/**\r\n * Transforms Unix timestamp to date and returns a string value of that date\r\n * @param {String} date Unix timestamp\r\n * @returns\r\n */\r\nconst changeDateFormat = (date: any) => {\r\n    let dateObj = new Date(date * 1000);\r\n    return `${date} - [${dateObj.toString()}]`;\r\n};\r\n\r\n/**\r\n * Compare the token issuing policy with a specific policy name\r\n * @param {object} idTokenClaims - Object containing the claims from the parsed token\r\n * @param {string} policyToCompare - ID/Name of the policy as expressed in the Azure portal\r\n * @returns {boolean}\r\n */\r\nexport function compareIssuingPolicy(idTokenClaims: any, policyToCompare: any) {\r\n    let tfpMatches = idTokenClaims.hasOwnProperty('tfp') && idTokenClaims['tfp'].toLowerCase() === policyToCompare.toLowerCase();\r\n    let acrMatches = idTokenClaims.hasOwnProperty('acr') && idTokenClaims['acr'].toLowerCase() === policyToCompare.toLowerCase();\r\n    return tfpMatches || acrMatches;\r\n}\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport 'abortcontroller-polyfill/dist/polyfill-patch-fetch';\r\n\r\nimport React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\n\r\nimport { PublicClientApplication, EventType } from '@azure/msal-browser';\r\nimport { MsalProvider } from '@azure/msal-react';\r\nimport { msalConfig } from 'helpers/authConfig';\r\n\r\nconst msalInstance = new PublicClientApplication(msalConfig);\r\n// Default to using the first account if no account is active on page load\r\nif (!msalInstance.getActiveAccount() && msalInstance.getAllAccounts().length > 0) {\r\n    // Account selection logic is app dependent. Adjust as needed for different use cases.\r\n    msalInstance.setActiveAccount(msalInstance.getAllAccounts()[0]);\r\n}\r\n\r\nmsalInstance.addEventCallback((event: any) => {\r\n    if (\r\n        (event.eventType === EventType.LOGIN_SUCCESS ||\r\n            event.eventType === EventType.ACQUIRE_TOKEN_SUCCESS ||\r\n            event.eventType === EventType.SSO_SILENT_SUCCESS) &&\r\n        event.payload.account\r\n    ) {\r\n        msalInstance.setActiveAccount(event.payload.account);\r\n    }\r\n});\r\n\r\nReactDOM.render(\r\n  <React.StrictMode>\r\n        <MsalProvider instance={msalInstance}>\r\n            <App />\r\n        </MsalProvider>\r\n  </React.StrictMode>,\r\n  document.getElementById('root'),\r\n);\r\n\r\n"],"sourceRoot":""}