{"version":3,"sources":["webpack:///./Scripts/Bahag/Loader.js","webpack:///./Scripts/actions/Cart.action.js","webpack:///../node_modules/@stripe/stripe-js/dist/index.mjs","webpack:///./Scripts/NorthAmerica/ErrorModal.js","webpack:///./Scripts/Components/Payments/StripeCardForm.js","webpack:///./Scripts/Components/Payments/PaymentComponent.js","webpack:///./Scripts/NorthAmerica/NorthAmericaSignIn.js","webpack:///./Scripts/NorthAmerica/NorthAmericaSignUp.js","webpack:///./Scripts/NorthAmerica/NorthAmericaForgetPassword.js","webpack:///./Scripts/NorthAmerica/NorthAmericaTerms.js","webpack:///./Scripts/NorthAmerica/ShippingAddressForm.js","webpack:///./Scripts/actions/Checkout.action.js","webpack:///./Scripts/NorthAmerica/NorthAmericaDeliveryMethods.js","webpack:///./Scripts/NorthAmerica/NorthAmericaContainer.js","webpack:///./Scripts/Containers/CheckoutNorthAmerica.container.js"],"names":["Loader","Component","react__WEBPACK_IMPORTED_MODULE_0___default","a","createElement","className","Fragment","this","renderLoader","__webpack_require__","d","__webpack_exports__","Cart_action_load","receive","load","dispatch","getState","get","then","response","json","cart","catch","ex","catchError","error","loadError","type","payload","stripePromise$1","ErrorModal","props","_this","_classCallCheck","_super","call","handleClose","bind","_assertThisInitialized","react_default","onClick","translate","setActiveErrorModal","renderError","mapDispatchToProps","connect","state","errorModal","northAmerica","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","injectScript","params","queryString","advancedFraudSignals","script","document","src","concat","headOrBody","head","body","Error","appendChild","stripePromise","onErrorListener","onLoadListener","loadScript","Promise","resolve","reject","window","Stripe","console","warn","scripts","querySelectorAll","i","length","test","findScript","_script$parentNode","removeEventListener","parentNode","removeChild","onLoad","onError","addEventListener","loadCalled","getStripePromise","_len","arguments","args","Array","_key","startTime","Date","now","maybeStripe","stripe","apply","undefined","_registerWrapper","name","version","registerWrapper","initStripe","loadStripe","stripePublishableKey","StripeCardForm","StripeCardForm_classCallCheck","elements","clientSecret","errorMessage","paymentId","handleSubmit","StripeCardForm_assertThisInitialized","createUser","confirmPaymentIntent","handleError","isActivePaymentSection","displayLoader","initializeStripePayment","setSelectedPayment","directPayCustom2","prevProps","orderRows","_this2","reqData","stripePaymentIntentData","fetch","method","headers","Content-Type","JSON","stringify","res","ok","data","getElementById","create","mount","setState","loading","err","message","errorLoadingStripe","event","preventDefault","paymentError","submit","submitCardInfoRes","errorObject","msg","isRegisterChecked","paymentIntent","setIsRegisterChecked","createOrder","success","collectPayment","id","collectPaymentResponse","location","href","origin","redirectUrl","log","orderFailedMsg","cancelPayment","customerDetails","checkout","formData","firstname","firstName","lastname","lastName","email","password","confirmPassword","address","zipCode","city","phone","phoneNumber","houseNumber","country","createUserResponse","token","requestVerificationToken","localStorage","setItem","setLoggedInUser","_context2","t0","includes","confirmPayment","confirmParams","payment_method_data","billing_details","line1","postal_code","redirect","_this$state3","onSubmit","isLoaderActive","selectedPaymentMethod","user","bool","PaymentComponent","PaymentComponent_classCallCheck","getTotalPrice","PaymentComponent_assertThisInitialized","handleCardSelection","googlePayButtonContainer","React","createRef","googlePayButtonMounted","isGooglePaySelected","currencyCode","countryCode","setCurrencyAndCountryCode","url","pathname","Payments_StripeCardForm","grandTotalWithTax","_this$state","checked","readOnly","renderStripeCardSection","grandTotal","NorthAmericaSignIn","NorthAmericaSignIn_classCallCheck","isShowWrongMessage","showSignInForm","emailInput","passwordInput","newPasswordInput","handleLogin","NorthAmericaSignIn_assertThisInitialized","handleGoToForgetPassword","handleGoToSignUp","current","value","newPassword","login","loginData","closeModal","openForgetPasswordModal","deliveryWidgetTop","getElementsByClassName","innerWidth","scrollIntoView","behavior","block","inline","y","getBoundingClientRect","top","pageYOffset","scrollTo","openSignUpModal","required","placeholder","ref","isShowNewPassword","renderSignIn","showLoggedIn","showNorthAmericaSignUp","forgetPassword","showNorthAmericaDelivery","isActive","NorthAmericaSignUp","NorthAmericaSignUp_classCallCheck","errors","emailErrorMessage","isShowPasswordForm","isShowSignupForm","isShowConfirm","isShowPasswordErrorMessage","isShowErrorRegister","isShowValidationErrorMessage","isShowEmailErrorMessage","handleInputChange","NorthAmericaSignUp_assertThisInitialized","handleContinue","handleCreateAccount","handlePasswordSubmit","handleInputPhone","updateFormData","handleInputEmail","handleUpdatePasswordChange","handleEditInfo","signUpForm","onChange","openLoginModal","emailRegex","validationPassed","setSignUpForm","validateField","match","target","prevState","_objectSpread","NorthAmericaSignUp_defineProperty","trim","phonePattern","emailPattern","_this$state2","fieldName","passwordRegex","_context3","renderSignup","renderPasswordRegistration","isSignInSectionActive","isShowSignIn","isShowLoggedin","form","showNorthAmericaSignIn","userData","NorthAmericaForgetPassword","NorthAmericaForgetPassword_classCallCheck","forgetPasswordEmail","handleResetPasswordSubmit","NorthAmericaForgetPassword_assertThisInitialized","handleForgetPasswordEmail","forgotPassword","responseForgetPassword","setIsShowNewPassword","renderForgetPassword","setResetPasswordEmail","resetPasswordEmail","NorthAmericaTerms","NorthAmericaTerms_classCallCheck","handleCheckboxChange","NorthAmericaTerms_assertThisInitialized","isChecked","setTosAndDataPrivacy","ShippingAddressForm","ShippingAddressForm_classCallCheck","showLoginModal","showSignUpModal","showForgetPasswordModal","isLoggedIn","checkboxes","registerCheckbox","newsletterCheckbox","culture","statesList","handleCustomerFormSubmit","ShippingAddressForm_assertThisInitialized","handleChange","closeLoginModal","closeSignUpModal","closeForgetPasswordModal","handleCheckboxClick","isFormValid","isValidCanadianPostalCode","convertToCents","_isMounted","marketContent","querySelector","getAttribute","CAStates","USStates","authResponse","isAuthenticated","userResponse","userDetails","_context","lggedinUser","showValidationMessage","quantity","orderTotal","hasDiscount","selectedDeliveryMethod","items","map","row","articleNumber","amount","Math","round","parseFloat","totalPrice","replace","currency","shipping_cost","deliveryCost","calculateTax","setStripePaymentIntentData","showNorthAmericaPayment","naTax","setTax","_event$target","ShippingAddressForm_objectSpread","ShippingAddressForm_defineProperty","numericValue","_this3","countryName","_this$state$formData","isStateValid","some","item","code","NorthAmerica_NorthAmericaSignIn","NorthAmerica_NorthAmericaSignUp","NorthAmerica_NorthAmericaForgetPassword","onFocus","e","classList","remove","disabled","index","key","NorthAmerica_NorthAmericaTerms","style","margin","marginBottom","showValidation","isTosAndDataPrivacyChecked","_this$state$formData2","selectedState","find","isZipCodeValid","zipStartsWith","zipCodesStartsWith","prefix","startsWith","zipCodeNum","parseInt","start","zipCodesRange","end","validations","isValid","push","_i","_validations","validation","postalCode","zipCodeRange","postalCodePrefix","substring","setCustomerDetails","toPayment","newValue","renderCustomerPersonalForm","tax","isItChecked","propName","_defineProperty","num","NorthAmericaDeliveryMethods","_ref","deliveryMethods","selectedId","toShippingAddressForm","deliveryCostText","image","htmlFor","description","totalDeliveryCost","price","formattedTotalDeliveryCost","formattedPrice","NorthAmericaContainer","NorthAmericaContainer_classCallCheck","toLogin","toCustomerInformation","isPaymentSuccess","isProcessing","_checkout$errors","deliveryCostString","deliveryCostNumber","react","NorthAmerica_NorthAmericaDeliveryMethods","setDelivery","statusFirst","shippingWidgetTop","showShippingAddressForm","Payments_PaymentComponent","merchantId","stripeMerchantKey","merchantName","stripeMerchantName","onPaymentSuccess","handlePaymentSuccess","onPaymentFailure","handlePaymentFailure","isShippingAddressFormActive","NorthAmerica_ShippingAddressForm","paymentTop","NorthAmerica_ErrorModal","renderDeliveryMethodsSection","renderShippingAddressForm","renderPaymentSection","CheckoutNorthAmerica","CheckoutNorthAmerica_container_classCallCheck","isMobileOrTablet","handleResize","CheckoutNorthAmerica_container_assertThisInitialized","isMobile","Cart","CheckoutNorthAmerica_container_objectSpread","updateOrderRowQuantity","removeOrderRow","onCampaignCodeChange","setCampaignCode","onSubmitCampaignCode","submitCampaignCode","onRemoveCampaignCode","removeCampaignCode","renderCartSection","_checkout$errors2","orderNote","paymentWidget","paymentMethods","authenticated","isBusinessCustomer","checkoutMode","renderCartState","NorthAmerica_NorthAmericaContainer","setBusinessCustomer","systemId","setOrderNote","note","acceptTermsOfCondition","accept","verify","orderId","onSignUpChange","signUp","setSignUp","submitRequest","submitError","submitDone","rowId","reloadPayment"],"mappings":"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","file":"7.ce759dd7fcd5d628abbb.js","sourcesContent":["import React, { Component } from \"react\";\r\n\r\nclass Loader extends Component {\r\n\r\n renderLoader() {\r\n return (\r\n <span className=\"custom-loader\"></span>\r\n )\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n <div className=\"bahag-error-modal-backdrop\"></div>\r\n <div className=\"bahag-loader-container\">\r\n {this.renderLoader()}\r\n </div>\r\n </>\r\n );\r\n }\r\n}\r\n\r\nexport default Loader;","import { get, post, put } from '../Services/http';\r\nimport { catchError } from './Error.action';\r\nimport { show as showNotification } from './Notification.action';\r\n\r\nexport const CART_LOAD = 'CART_LOAD';\r\nexport const CART_LOAD_ERROR = 'CART_LOAD_ERROR';\r\nexport const CART_RECEIVE = 'CART_RECEIVE';\r\nexport const CART_SHOW_INFO = 'CART_SHOW_INFO';\r\nexport const CART_HIDE = 'CART_HIDE';\r\n\r\nexport const load = () => (dispatch, getState) => {\r\n return get('/api/cart')\r\n .then(response => response.json())\r\n .then(cart => dispatch(receive(cart)))\r\n .catch(ex => dispatch(catchError(ex, error => loadError(error))))\r\n ;\r\n}\r\n\r\nexport const loadError = error => ({\r\n type: CART_LOAD_ERROR,\r\n payload: {\r\n error,\r\n }\r\n})\r\n\r\nexport const receive = cart => ({\r\n type: CART_RECEIVE,\r\n payload: cart,\r\n})\r\n\r\nexport const toggle = () => (dispatch, getState) => {\r\n dispatch(show(!getState().cart.showInfo));\r\n}\r\n\r\nconst show = visible => ({\r\n type: CART_SHOW_INFO,\r\n payload: {\r\n showInfo: visible,\r\n }\r\n})\r\n\r\nexport const add = ({ articleNumber, quantity = 1, nodeIdToShowNotification = null, notificationMessage = null, hash = '' }) => {\r\n return (dispatch) => {\r\n if (!quantity || isNaN(quantity) || parseInt(quantity) <= 0) {\r\n return;\r\n }\r\n\r\n return post('/api/cart/add', { articleNumber, quantity: parseInt(quantity), sourceUrl: window.location.href })\r\n .then(response => response.json())\r\n .then(cart => {\r\n dispatch(receive(cart));\r\n nodeIdToShowNotification && dispatch(showNotification(nodeIdToShowNotification, notificationMessage, hash));\r\n })\r\n .catch(ex => dispatch(catchError(ex, error => loadError(error))))\r\n ;\r\n }\r\n}\r\n\r\nexport const reorder = ({ orderId, nodeIdToShowNotification = null, notificationMessage = null, hash = '' }) => {\r\n if (orderId) {\r\n return (dispatch) => {\r\n return post('/api/cart/reorder', { orderId })\r\n .then(response => response.json())\r\n .then(cart => {\r\n dispatch(receive(cart));\r\n nodeIdToShowNotification && dispatch(showNotification(nodeIdToShowNotification, notificationMessage, hash));\r\n })\r\n .catch(ex => dispatch(catchError(ex, error => loadError(error))))\r\n ;\r\n }\r\n }\r\n}\r\n\r\nexport const update = (rowSystemId, quantity) => (dispatch) => {\r\n return put(`/api/cart/update`, { rowSystemId, quantity })\r\n .then(response => response.json())\r\n .then(cart => dispatch(receive(cart)))\r\n .catch(ex => dispatch(catchError(ex, error => loadError(error))))\r\n ;\r\n}","var V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a <body> element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"4.8.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n return function () {\n reject(new Error('Failed to load Stripe.js'));\n };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n return function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n };\n};\n\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n } else if (script && onLoadListener !== null && onErrorListener !== null) {\n var _script$parentNode;\n\n // remove event listeners\n script.removeEventListener('load', onLoadListener);\n script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n // reload script to trigger 'load' event\n\n (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n script = injectScript(params);\n }\n\n onLoadListener = onLoad(resolve, reject);\n onErrorListener = onError(reject);\n script.addEventListener('load', onLoadListener);\n script.addEventListener('error', onErrorListener);\n } catch (error) {\n reject(error);\n return;\n }\n }); // Resets stripePromise on error\n\n return stripePromise[\"catch\"](function (error) {\n stripePromise = null;\n return Promise.reject(error);\n });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar stripePromise$1;\nvar loadCalled = false;\n\nvar getStripePromise = function getStripePromise() {\n if (stripePromise$1) {\n return stripePromise$1;\n }\n\n stripePromise$1 = loadScript(null)[\"catch\"](function (error) {\n // clear cache on error\n stripePromise$1 = null;\n return Promise.reject(error);\n });\n return stripePromise$1;\n}; // Execute our own script injection after a tick to give users time to do their\n// own script injection.\n\n\nPromise.resolve().then(function () {\n return getStripePromise();\n})[\"catch\"](function (error) {\n if (!loadCalled) {\n console.warn(error);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now(); // if previous attempts are unsuccessful, will re-load script\n\n return getStripePromise().then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","import React, { Component } from 'react';\r\nimport { translate } from '../Services/translation';\r\nimport { connect } from 'react-redux';\r\nimport { setActiveErrorModal } from '../actions/NorthAmerica.action';\r\n\r\nclass ErrorModal extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.handleClose = this.handleClose.bind(this);\r\n }\r\n\r\n renderError() {\r\n return (\r\n <div className=\"northAmerica-error-modal__container\">\r\n <div className=\"northAmerica-error-modal__container--close-container\">\r\n <span onClick={this.handleClose}></span>\r\n </div>\r\n <div className=\"northAmerica-error-modal__container--inner\">\r\n <span></span>\r\n <h3>{translate(\"northAmerica.error.modal.message.title\")}</h3>\r\n <p>{translate(\"northAmerica.error.modal.message.text\")}</p>\r\n <button onClick={this.handleClose}>{translate(\"northAmerica.error.modal.button\")}</button>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n handleClose() {\r\n this.props.setActiveErrorModal(false);\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n <div className=\"northAmerica-error-modal-backdrop\" onClick={this.handleClose}></div>\r\n <div className=\"northAmerica-error-modal\">\r\n {this.renderError()}\r\n </div>\r\n </>\r\n\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = {\r\n setActiveErrorModal,\r\n};\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n errorModal: state.northAmerica.errorModal\r\n };\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ErrorModal);","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport { loadStripe } from '@stripe/stripe-js';\r\nimport { submit as createOrder, setSelectedPayment } from '../../Actions/Checkout.action'\r\nimport { displayLoader, setLoggedInUser, setIsRegisterChecked, createUser, collectPayment, cancelPayment } from '../../Actions/NorthAmerica.action';\r\n\r\nconst stripePromise = loadStripe(stripePublishableKey);\r\n\r\nclass StripeCardForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n stripe: null,\r\n elements: null,\r\n clientSecret: null,\r\n errorMessage: null,\r\n paymentId: null\r\n };\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.createUser = this.createUser.bind(this);\r\n this.confirmPaymentIntent = this.confirmPaymentIntent.bind(this);\r\n this.handleError = this.handleError.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.isActivePaymentSection) {\r\n this.props.displayLoader(true);\r\n this.initializeStripePayment();\r\n }\r\n // DirectPay:Custom2 in Litium BO is set to Card Payment\r\n this.props.setSelectedPayment(directPayCustom2);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n // Check if the orderRows have changed\r\n if (this.props.isActivePaymentSection && ((prevProps.orderRows !== this.props.orderRows) || (prevProps.isActivePaymentSection !== this.props.isActivePaymentSection))) {\r\n this.props.displayLoader(true);\r\n this.initializeStripePayment(); // Reinitialize the payment with updated cart items\r\n }\r\n }\r\n\r\n initializeStripePayment() {\r\n try {\r\n const stripe = window.Stripe(stripePublishableKey);\r\n if (!stripe) {\r\n throw new Error('Stripe.js failed to load.');\r\n }\r\n\r\n const reqData = this.props.stripePaymentIntentData;\r\n\r\n // Fetch the client secret\r\n fetch('/api/payment/create-payment-intent', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(reqData),\r\n })\r\n .then((res) => {\r\n if (!res.ok) {\r\n throw new Error('Failed to fetch client secret.');\r\n }\r\n return res.json();\r\n })\r\n .then((data) => {\r\n if (!data.clientSecret) {\r\n throw new Error('No client secret returned from backend.');\r\n }\r\n if (!data.paymentId) {\r\n throw new Error('No payment id returned from backend.');\r\n }\r\n\r\n const clientSecret = data.clientSecret;\r\n const paymentId = data.paymentId;\r\n const elements = stripe.elements({ clientSecret });\r\n\r\n // Ensure that the #payment-element exists in the DOM before mounting\r\n const paymentElementDiv = document.getElementById('payment-element');\r\n if (paymentElementDiv) {\r\n const paymentElement = elements.create('payment');\r\n paymentElement.mount('#payment-element');\r\n }\r\n this.setState({ stripe, elements, clientSecret, paymentId, loading: false });\r\n this.props.displayLoader(false);\r\n })\r\n .catch((err) => {\r\n this.setState({\r\n errorMessage: err.message || 'Failed to load payment methods.',\r\n loading: false,\r\n });\r\n this.props.displayLoader(false);\r\n });\r\n } catch (err) {\r\n this.setState({\r\n errorLoadingStripe: err.message || 'An error occurred while initializing Stripe.',\r\n loading: false,\r\n });\r\n this.props.displayLoader(false);\r\n }\r\n }\r\n\r\n async handleSubmit(event) {\r\n event.preventDefault();\r\n const { stripe, elements } = this.state;\r\n this.setState({\r\n errorMessage: null\r\n });\r\n\r\n if (!stripe || !elements) {\r\n this.setState({ paymentError: 'Payment process is not ready. Please try again.' });\r\n return;\r\n }\r\n\r\n try {\r\n this.props.displayLoader(true);\r\n let submitCardInfoRes = await elements.submit();\r\n const { error: errorObject } = submitCardInfoRes;\r\n if (errorObject) {\r\n const msg = errorObject.message;\r\n this.handleError(msg);\r\n return;\r\n }\r\n if (this.props.isRegisterChecked) {\r\n this.createUser();\r\n }\r\n const { error, paymentIntent } = await this.confirmPaymentIntent();\r\n if (error) {\r\n const message = translate('checkout.payment.failed');\r\n this.handleError(message);\r\n return;\r\n } else {\r\n await this.props.setIsRegisterChecked(false);\r\n const res = await this.props.createOrder();\r\n if (res && res.success) {\r\n this.props.displayLoader(false);\r\n this.handleError(null);\r\n try {\r\n this.props.collectPayment(paymentIntent.id).then((collectPaymentResponse) => {\r\n window.location.href = window.location.origin + res.redirectUrl;\r\n });\r\n } catch (err) {\r\n console.log(\"collect err\", err);\r\n }\r\n } else {\r\n const orderFailedMsg = translate('checkout.create.order.failed');\r\n this.handleError(orderFailedMsg);\r\n this.props.cancelPayment(paymentIntent.id);\r\n }\r\n }\r\n } catch (err) {\r\n this.props.displayLoader(false);\r\n this.setState({\r\n paymentError: 'An error occurred while processing the payment. Please try again.',\r\n });\r\n }\r\n }\r\n\r\n async createUser() {\r\n const customerDetails = this.props.checkout.payload.customerDetails;\r\n const formData = {\r\n firstname: customerDetails.firstName || \"\",\r\n lastname: customerDetails.lastName || \"\",\r\n email: customerDetails.email || \"\",\r\n password: customerDetails.password || \"\",\r\n confirmPassword: customerDetails.confirmPassword || \"\",\r\n address: customerDetails.address || \"\",\r\n zipCode: customerDetails.zipCode || \"\",\r\n city: customerDetails.city || \"\",\r\n phone: customerDetails.phoneNumber || \"\",\r\n houseNumber: customerDetails.houseNumber || \"\",\r\n state: customerDetails.state || \"\",\r\n country: customerDetails.country || \"\",\r\n };\r\n\r\n try {\r\n const createUserResponse = await this.props.createUser(formData);\r\n\r\n const token = createUserResponse.requestVerificationToken;\r\n if (token) {\r\n window.localStorage.setItem(\"requestVerificationToken\", token);\r\n }\r\n this.props.setLoggedInUser(createUserResponse);\r\n } catch (err) {\r\n if (err.includes(\"Email already exists\")) {\r\n this.setState({\r\n errorMessage: translate(\"checkout.northAmerica.error.message.email.exist\"),\r\n });\r\n } else {\r\n this.setState({\r\n errorMessage: translate(\"checkout.northAmerica.error.message.generic\"),\r\n });\r\n }\r\n\r\n this.props.displayLoader(false);\r\n return;\r\n }\r\n }\r\n\r\n async confirmPaymentIntent() {\r\n const { stripe, elements, clientSecret } = this.state;\r\n const { error, paymentIntent } = await stripe.confirmPayment({\r\n elements,\r\n clientSecret,\r\n confirmParams: {\r\n payment_method_data: {\r\n billing_details: {\r\n name: `${this.props.checkout.payload.customerDetails.firstName} ${this.props.checkout.payload.customerDetails.lastName}`,\r\n email: this.props.checkout.payload.customerDetails.email,\r\n phone: this.props.checkout.payload.customerDetails.phoneNumber,\r\n address: {\r\n line1: this.props.checkout.payload.customerDetails.address,\r\n city: this.props.checkout.payload.customerDetails.city,\r\n postal_code: this.props.checkout.payload.customerDetails.zipCode,\r\n state: this.props.checkout.payload.customerDetails.state\r\n },\r\n },\r\n },\r\n },\r\n redirect: \"if_required\",\r\n });\r\n return { error, paymentIntent };\r\n }\r\n\r\n handleError(msg) {\r\n this.props.displayLoader(false);\r\n this.setState({ paymentError: msg });\r\n return;\r\n }\r\n\r\n render() {\r\n const { errorMessage, errorLoadingStripe, paymentError, loading } = this.state;\r\n\r\n if (errorLoadingStripe) {\r\n return <div className=\"error\">{errorLoadingStripe}</div>;\r\n }\r\n\r\n return (\r\n <form id=\"payment-form\" onSubmit={this.handleSubmit} className=\"northAmerica-stipe-card-form\">\r\n\r\n {!errorLoadingStripe &&\r\n <>\r\n <div id=\"payment-element\"></div> {/* Stripe Payment Element will be mounted here */}\r\n <button className=\"northAmerica-section__payment-button\" type=\"submit\">\r\n {translate('checkout.northAmerica.payment.submit')}\r\n </button>\r\n </>\r\n\r\n }\r\n {/* */}{/*Show any error messages */}\r\n {errorMessage && <div id=\"payment-message\" className=\"error northAmerica-section__signin--fail\"><p>{errorMessage}</p></div>}\r\n {paymentError && <div id=\"payment-error\" className=\"error northAmerica-section__signin--fail\"><p>{paymentError}</p></div>}\r\n </form>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n orderRows: state.cart.orderRows,\r\n isLoaderActive: state.northAmerica.isLoaderActive,\r\n cart: state.cart,\r\n checkout: state.checkout,\r\n isRegisterChecked: state.northAmerica.isRegisterChecked,\r\n stripePaymentIntentData: state.northAmerica.stripePaymentIntentData,\r\n isActivePaymentSection: state.northAmerica.isActivePaymentSection,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n createOrder: () => dispatch(createOrder()),\r\n setSelectedPayment: (selectedPaymentMethod) => dispatch(setSelectedPayment(selectedPaymentMethod)),\r\n displayLoader: (isLoaderActive) => dispatch(displayLoader(isLoaderActive)),\r\n createUser: (formData) => dispatch(createUser(formData)),\r\n setLoggedInUser: (user) => dispatch(setLoggedInUser(user)),\r\n setIsRegisterChecked: (bool) => dispatch(setIsRegisterChecked(bool)),\r\n collectPayment: (paymentId) => dispatch(collectPayment(paymentId)),\r\n cancelPayment: (paymentId) => dispatch(cancelPayment(paymentId))\r\n});\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(StripeCardForm);\r\n","import React, { Component } from \"react\";\r\nimport { connect } from 'react-redux';\r\nimport { translate } from '../../Services/translation';\r\nimport StripeCardForm from \"../../Components/Payments/StripeCardForm\";\r\nimport { submit as createOrder, setSelectedPayment } from '../../Actions/Checkout.action';\r\nimport { createUser, setLoggedInUser, setIsRegisterChecked, displayLoader } from '../../Actions/NorthAmerica.action';\r\n\r\n// Initialize Stripe with your publishable key\r\nconst allowedCardsWithGooglePay = [\"AMEX\", \"DISCOVER\", \"INTERAC\", \"JCB\", \"MASTERCARD\", \"VISA\"];\r\nclass PaymentComponent extends Component {\r\n constructor(props) {\r\n super(props);\r\n //this.onGooglePayButtonClicked = this.onGooglePayButtonClicked.bind(this);\r\n this.getTotalPrice = this.getTotalPrice.bind(this);\r\n //this.handleGooglePaySelection = this.handleGooglePaySelection.bind(this);\r\n this.handleCardSelection = this.handleCardSelection.bind(this);\r\n\r\n this.googlePayButtonContainer = React.createRef();\r\n this.state = {\r\n googlePayButtonMounted: false,\r\n isGooglePaySelected: false,\r\n error: null,\r\n currencyCode: '',\r\n countryCode: '',\r\n errorMessage: null\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n this.setCurrencyAndCountryCode();\r\n //this.initializeGooglePay();\r\n }\r\n\r\n //handleGooglePaySelection() {\r\n // this.setState({ isGooglePaySelected: true, errorMessage: null});\r\n //}\r\n\r\n handleCardSelection() {\r\n this.setState({ isGooglePaySelected: false, errorMessage: null});\r\n }\r\n\r\n // Function to determine currencyCode and countryCode based on the URL\r\n setCurrencyAndCountryCode() {\r\n const url = window.location.pathname;\r\n let countryCode = '';\r\n let currencyCode = '';\r\n\r\n if (url.includes('/ca/')) {\r\n countryCode = 'CA';\r\n currencyCode = 'CAD'; // Canadian Dollar\r\n } else if (url.includes('/us/')) {\r\n countryCode = 'US';\r\n currencyCode = 'USD'; // US Dollar\r\n } else {\r\n countryCode = 'US'; // Default to US\r\n currencyCode = 'USD';\r\n }\r\n\r\n this.setState({ countryCode, currencyCode });\r\n }\r\n\r\n // Render the Stripe Card Payment Form\r\n renderStripeCardSection() {\r\n //const { clientSecret, stripe, elements } = this.state;\r\n\r\n //// Avoid reinitializing Stripe form if it's already initialized\r\n //if (!clientSecret || !stripe || !elements) {\r\n // return <div>Loading payment options...</div>;\r\n //}\r\n\r\n // Pass the initialized Stripe and elements down to the StripeCardForm component\r\n return <StripeCardForm />;\r\n }\r\n\r\n // Google Pay functionality remains unchanged\r\n //initializeGooglePay() {\r\n // const orderRowTotalPrice = this.getTotalPrice();\r\n // const googlePayEnvironment = process.env.NODE_ENV === 'production' ? 'PRODUCTION' : 'TEST';\r\n\r\n // if (window.google && window.google.payments && window.google.payments.api) {\r\n // const paymentsClient = new window.google.payments.api.PaymentsClient({\r\n // environment: googlePayEnvironment\r\n // });\r\n\r\n // const paymentDataRequest = {\r\n // apiVersion: 2,\r\n // apiVersionMinor: 0,\r\n // allowedPaymentMethods: [{\r\n // type: 'CARD',\r\n // parameters: {\r\n // allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\r\n // allowedCardNetworks: allowedCardsWithGooglePay,\r\n // },\r\n // tokenizationSpecification: {\r\n // type: 'PAYMENT_GATEWAY',\r\n // parameters: {\r\n // gateway: 'stripe',\r\n // 'stripe:version': '2020-08-27',\r\n // 'stripe:publishableKey': this.props.stripePublishableKey\r\n // }\r\n // }\r\n // }],\r\n // transactionInfo: {\r\n // totalPriceStatus: 'FINAL',\r\n // totalPrice: orderRowTotalPrice.toString(),\r\n // currencyCode: this.state.currencyCode,\r\n // countryCode: this.state.countryCode\r\n // },\r\n // merchantInfo: {\r\n // merchantId: this.props.merchantId,\r\n // merchantName: this.props.merchantName\r\n // }\r\n // };\r\n\r\n // paymentsClient.isReadyToPay(paymentDataRequest)\r\n // .then(response => {\r\n // if (response.result) {\r\n // const googlePayButton = paymentsClient.createButton({\r\n // onClick: this.onGooglePayButtonClicked,\r\n // buttonColor: 'black',\r\n // });\r\n\r\n // if (this.googlePayButtonContainer.current && !this.state.googlePayButtonMounted) {\r\n // this.googlePayButtonContainer.current.appendChild(googlePayButton);\r\n // this.setState({ googlePayButtonMounted: true });\r\n // }\r\n // }\r\n // })\r\n // .catch(err => {\r\n // console.error(\"Google Pay is not ready\", err);\r\n // });\r\n // } else {\r\n // console.error('Google Pay API is not available.');\r\n // }\r\n //}\r\n\r\n getTotalPrice() {\r\n //let totalPrice = this.props.cart.grandTotal.replace(/[^0-9.-]+/g, \"\")\r\n let totalPrice = this.props.grandTotalWithTax;\r\n return totalPrice;\r\n }\r\n\r\n //async onGooglePayButtonClicked() {\r\n // // DirectPay:Custom1 in Litium BO is set to Google Pay\r\n // this.props.setSelectedPayment(directPayCustom1);\r\n // const paymentsClient = new window.google.payments.api.PaymentsClient({\r\n // environment: this.getGooglePayEnvironment()\r\n // });\r\n\r\n // const paymentDataRequest = {\r\n // apiVersion: 2,\r\n // apiVersionMinor: 0,\r\n // allowedPaymentMethods: [{\r\n // type: 'CARD',\r\n // parameters: {\r\n // allowedAuthMethods: ['PAN_ONLY', 'CRYPTOGRAM_3DS'],\r\n // allowedCardNetworks: allowedCardsWithGooglePay,\r\n // },\r\n // tokenizationSpecification: {\r\n // type: 'PAYMENT_GATEWAY',\r\n // parameters: {\r\n // gateway: 'stripe',\r\n // 'stripe:version': '2020-08-27',\r\n // 'stripe:publishableKey': this.props.stripePublishableKey\r\n // }\r\n // }\r\n // }],\r\n // transactionInfo: {\r\n // totalPriceStatus: 'FINAL',\r\n // totalPrice: this.getTotalPrice().toString(),\r\n // currencyCode: this.state.currencyCode,\r\n // countryCode: this.state.countryCode\r\n // },\r\n // merchantInfo: {\r\n // merchantId: this.props.merchantId,\r\n // merchantName: this.props.merchantName\r\n // }\r\n // };\r\n\r\n // try {\r\n // this.setState({\r\n // errorMessage: null,\r\n // });\r\n // this.props.displayLoader(true);\r\n\r\n // if (this.props.isRegisterChecked) {\r\n // const customerDetails = this.props.checkout.payload.customerDetails;\r\n // const formData = {\r\n // firstname: customerDetails.firstName || \"\",\r\n // lastname: customerDetails.lastName || \"\",\r\n // email: customerDetails.email || \"\",\r\n // password: customerDetails.password || \"\",\r\n // confirmPassword: customerDetails.confirmPassword || \"\",\r\n // address: customerDetails.address || \"\",\r\n // zipCode: customerDetails.zipCode || \"\",\r\n // city: customerDetails.city || \"\",\r\n // phone: customerDetails.phoneNumber || \"\",\r\n // houseNumber: customerDetails.houseNumber || \"\",\r\n // state: customerDetails.state || \"\",\r\n // country: customerDetails.country || \"\",\r\n // };\r\n\r\n // try {\r\n // const createUserResponse = await this.props.createUser(formData);\r\n \r\n // const token = createUserResponse.requestVerificationToken;\r\n // if (token) {\r\n // window.localStorage.setItem(\"requestVerificationToken\", token);\r\n // }\r\n // this.props.setLoggedInUser(createUserResponse);\r\n // } catch (err) {\r\n // if (err.message.includes(\"Email already exists.\")) {\r\n // this.setState({\r\n // errorMessage: translate(\"checkout.northAmerica.error.message.user.exist\"),\r\n // });\r\n // } else if (err.message.includes(\"Bad request. Please check your input.\")) {\r\n // this.setState({\r\n // errorMessage: translate(\"checkout.northAmerica.error.message.invalid\"),\r\n // });\r\n // } else {\r\n // this.setState({\r\n // errorMessage: translate(\"checkout.northAmerica.error.message.generic\"),\r\n // });\r\n // }\r\n\r\n // this.props.displayLoader(false);\r\n // return;\r\n // }\r\n // }\r\n // try {\r\n // const paymentData = await paymentsClient.loadPaymentData(paymentDataRequest);\r\n // const backendResponse = await this.sendPaymentToBackend(paymentData, 'success');\r\n\r\n // if (backendResponse && backendResponse.success) {\r\n // await this.props.setIsRegisterChecked(false);\r\n // const res = await this.props.createOrder();\r\n // if (res) {\r\n // window.location.href = window.location.origin + res.redirectUrl;\r\n // } else {\r\n // throw new Error('Order creation failed.');\r\n // }\r\n // } else {\r\n // throw new Error('Payment processing failed.');\r\n // }\r\n // } catch (err) {\r\n // this.setState({\r\n // errorMessage: translate(\"checkout.payment.failed\"),\r\n // });\r\n // await this.sendPaymentToBackend(err, 'failure');\r\n // }\r\n // } catch (err) {\r\n // this.setState({\r\n // errorMessage: translate(\"checkout.generic.error\"),\r\n // });\r\n // } finally {\r\n // this.props.displayLoader(false);\r\n // }\r\n ////}\r\n\r\n // Function to send payment data to the backend\r\n //async sendPaymentToBackend(paymentData, status) {\r\n // let paymentToken = null;\r\n // let errorMessage = '';\r\n\r\n // if (status === \"failure\") {\r\n // if (paymentData.statusCode === \"CANCELED\") {\r\n // errorMessage = 'User canceled the payment';\r\n // return { success: false, message: errorMessage };\r\n // } else if (!paymentData.paymentMethodData) {\r\n // errorMessage = 'Payment data incomplete or incorrect';\r\n // return { success: false, message: errorMessage };\r\n // }\r\n // }\r\n\r\n // if (paymentData.paymentMethodData && paymentData.paymentMethodData.tokenizationData) {\r\n // try {\r\n // const parsedToken = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);\r\n // paymentToken = parsedToken.id;\r\n // } catch (error) {\r\n // errorMessage = 'Error parsing payment token';\r\n // return { success: false, message: errorMessage };\r\n // }\r\n // }\r\n\r\n // const paymentRequest = {\r\n // paymentToken,\r\n // amount: this.getTotalPrice() * 100,\r\n // status,\r\n // countryCode: this.state.countryCode,\r\n // currencyCode: this.state.currencyCode,\r\n // returnUrl: \"https://www.ctek.com/\",\r\n // errorMessage\r\n // };\r\n\r\n // try {\r\n // const response = await fetch('/api/payment/process-payment-google', {\r\n // method: 'POST',\r\n // headers: { 'Content-Type': 'application/json' },\r\n // body: JSON.stringify(paymentRequest)\r\n // });\r\n\r\n // if (!response.ok) {\r\n // throw new Error(`Network response was not ok: ${response.statusText}`);\r\n // }\r\n\r\n // const data = await response.json();\r\n // return data;\r\n // } catch (error) {\r\n // console.error('Error sending payment to backend:', error);\r\n // return { success: false, message: error.message };\r\n // }\r\n ////}\r\n getGooglePayEnvironment() {\r\n return process.env.NODE_ENV === 'production' ? 'PRODUCTION' : 'TEST'; // Default to 'TEST' in non-production environments\r\n }\r\n\r\n render() {\r\n const { isGooglePaySelected, errorMessage } = this.state;\r\n return (\r\n <div className={!this.props.isActivePaymentSection ? \"northAmerica-section--inactive northAmerica-section__container\" : \"northAmerica-section__container\"}>\r\n <h3 className=\"checkout__section-title\">{translate('checkout.northAmerica.payment.header')}</h3>\r\n\r\n <div className=\"northAmerica-section__paymentButton-container\">\r\n {/*<div className=\"payment-selection\" >*/}\r\n {/* <label className={isGooglePaySelected ? 'selectedRadioButton' : ''}>*/}\r\n {/* <input*/}\r\n {/* type=\"radio\"*/}\r\n {/* name=\"paymentMethod\"*/}\r\n {/* checked={isGooglePaySelected}*/}\r\n {/* onChange={this.handleGooglePaySelection}*/}\r\n {/* />*/}\r\n {/* <span className=\"google-icon\"></span>*/}\r\n {/* <p>{translate('checkout.googlePay.radio.button')}</p>*/}\r\n {/* </label>*/}\r\n {/*</div>*/}\r\n\r\n <div className=\"payment-selection\">\r\n {/*<label className={!isGooglePaySelected ? 'selectedRadioButton' : ''}>*/}\r\n {/* <input*/}\r\n {/* type=\"radio\"*/}\r\n {/* name=\"paymentMethod\"*/}\r\n {/* checked={!isGooglePaySelected}*/}\r\n {/* onChange={this.handleCardSelection}*/}\r\n {/* />*/}\r\n <label className={!isGooglePaySelected ? 'selectedRadioButton' : ''}>\r\n <input\r\n type=\"radio\"\r\n name=\"paymentMethod\"\r\n checked={!isGooglePaySelected}\r\n readOnly\r\n />\r\n <span className=\"stripe-icon\"></span>\r\n <p>{translate('checkout.card.radio.button')}</p>\r\n </label>\r\n </div>\r\n </div>\r\n\r\n {/* Always render both sections but toggle their visibility */}\r\n {/*{isGooglePaySelected && this.props.isActivePaymentSection ? (*/}\r\n {/* <div className=\"northAmerica-button-container\">*/}\r\n {/* <button onClick={this.onGooglePayButtonClicked} className=\"northAmerica-button-container__button\">*/}\r\n {/* {translate('checkout.northAmerica.payment.submit')}*/}\r\n {/* </button>*/}\r\n {/* <div ref={this.googlePayButtonContainer} className=\"google-pay-api-button\" style={{ display: 'none' }}></div>*/}\r\n {/* </div>*/}\r\n {/*) : (*/}\r\n {/* <div className=\"northAmerica-button-container\">*/}\r\n {/* {this.renderStripeCardSection()} */}{/* Render Stripe Card Payment Form */}\r\n {/* </div>*/}\r\n {/*)}*/}\r\n\r\n <div className=\"northAmerica-button-container\">\r\n {this.renderStripeCardSection()} {/* Render Stripe Card Payment Form */}\r\n </div>\r\n\r\n {(errorMessage && this.props.isActivePaymentSection) && <div className=\"northAmerica-section__signin--fail\"><p>{errorMessage}</p></div>}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state) => ({\r\n orderRows: state.cart.orderRows,\r\n isActivePaymentSection: state.northAmerica.isActivePaymentSection,\r\n cart: state.cart,\r\n checkout: state.checkout,\r\n isRegisterChecked: state.northAmerica.isRegisterChecked,\r\n grandTotalWithTax: state.northAmerica.grandTotal\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n createOrder: () => dispatch(createOrder()),\r\n setSelectedPayment: (selectedPaymentMethod) => dispatch(setSelectedPayment(selectedPaymentMethod)),\r\n displayLoader: (isLoaderActive) => dispatch(displayLoader(isLoaderActive)),\r\n createUser: (formData) => dispatch(createUser(formData)),\r\n setLoggedInUser: (user) => dispatch(setLoggedInUser(user)),\r\n setIsRegisterChecked: (bool) => dispatch(setIsRegisterChecked(bool))\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PaymentComponent);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { translate } from '../Services/translation';\r\nimport {\r\n login, displayLoader, showLoggedIn, setLoggedInUser,\r\n showNorthAmericaSignUp, forgetPassword, showNorthAmericaDelivery\r\n} from '../actions/NorthAmerica.action';\r\n\r\nclass NorthAmericaSignIn extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n isShowWrongMessage: false,\r\n errorMessage: \"\",\r\n showSignInForm: false,\r\n };\r\n\r\n this.emailInput = React.createRef();\r\n this.passwordInput = React.createRef();\r\n this.newPasswordInput = React.createRef(); \r\n this.handleLogin = this.handleLogin.bind(this);\r\n this.handleGoToForgetPassword = this.handleGoToForgetPassword.bind(this);\r\n this.handleGoToSignUp = this.handleGoToSignUp.bind(this);\r\n }\r\n\r\n async handleLogin() {\r\n const email = this.emailInput.current.value;\r\n const password = this.passwordInput.current.value;\r\n const newPassword = this.newPasswordInput && this.newPasswordInput.current ? this.newPasswordInput.current.value : null;\r\n this.props.displayLoader(true);\r\n let loginData = await this.props.login(email, password, newPassword);\r\n\r\n if (loginData && loginData.success) {\r\n const token = loginData.requestVerificationToken;\r\n this.props.displayLoader(false);\r\n this.setState({ isShowWrongMessage: false });\r\n this.props.setLoggedInUser(loginData.user);\r\n token && window.localStorage.setItem(\"requestVerificationToken\", token);\r\n this.props.closeModal();\r\n } else {\r\n this.props.displayLoader(false);\r\n this.setState({\r\n isShowWrongMessage: true,\r\n errorMessage: translate('checkout.northAmerica.invalid.login.credentials')\r\n });\r\n }\r\n }\r\n\r\n handleGoToForgetPassword() {\r\n this.props.openForgetPasswordModal();\r\n \r\n }\r\n\r\n handleGuestButton() {\r\n const deliveryWidgetTop = document.getElementsByClassName(\"signin-arrow\")[0];\r\n if (deliveryWidgetTop) {\r\n if (window.innerWidth > 1023) {\r\n deliveryWidgetTop.scrollIntoView({ behavior: \"smooth\", block: \"start\", inline: \"nearest\" });\r\n } else {\r\n const y = deliveryWidgetTop.getBoundingClientRect().top + window.pageYOffset - 72;\r\n window.scrollTo({ top: y, behavior: 'smooth' });\r\n }\r\n }\r\n }\r\n\r\n handleGoToSignUp() {\r\n this.props.openSignUpModal();\r\n }\r\n\r\n renderSignIn() {\r\n\r\n return (\r\n <div>\r\n <h3 id=\"northAmerica-signin\" className=\"checkout__section-title checkout__section-title-modal\">{translate('checkout.northAmerica.signin.header')}</h3>\r\n <div className=\"northAmerica-section__signin\">\r\n <p className=\"northAmerica-section__signin--header\">{translate(\"checkout.northAmerica.login.title\")}</p>\r\n <p className=\"northAmerica-section__signin--subheader\">{translate(\"checkout.northAmerica.login.description\")}</p>\r\n <div className=\"northAmerica-section__signin__form\">\r\n <div className=\"northAmerica-section__signin-form\">\r\n <div className=\"northAmerica-section__signin-form--input-container\">\r\n <input type=\"email\" required placeholder={translate('checkout.northAmerica.signin.placeholder.email')} ref={this.emailInput} />\r\n <input type=\"password\" required placeholder={translate('checkout.northAmerica.placeholder.password')} ref={this.passwordInput} />\r\n </div>\r\n {this.state.isShowWrongMessage && (\r\n <div className=\"northAmerica-section__signin--fail\">\r\n <p>{this.state.errorMessage}</p>\r\n </div>\r\n )}\r\n <div className=\"northAmerica-section__signin--buttons\">\r\n {!this.props.isShowNewPassword && (\r\n <a onClick={this.handleGoToForgetPassword}>{translate('checkout.northAmerica.forget.password.button')}</a>\r\n )}\r\n <button className=\"northAmerica-section__signin--buttons--signin\" type=\"button\" onClick={this.handleLogin}>\r\n {translate('checkout.northAmerica.signin.button')}\r\n </button>\r\n <span className=\"northAmerica-section__separator-line\"></span>\r\n <button className=\"northAmerica-section__signin--buttons--signup\" onClick={this.handleGoToSignUp}>\r\n {translate('checkout.northAmerica.signup.button')}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <button className=\"northAmerica-section__signin--buttons--guest\" onClick={this.props.closeModal}>\r\n {translate('checkout.northAmerica.guest.button')}\r\n </button>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {this.renderSignIn()}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n login: (email, password, newPassword) => dispatch(login(email, password, newPassword)),\r\n displayLoader: (isLoaderActive) => dispatch(displayLoader(isLoaderActive)),\r\n showLoggedIn: () => dispatch(showLoggedIn(true)),\r\n setLoggedInUser: (user) => dispatch(setLoggedInUser(user)),\r\n showNorthAmericaSignUp: () => dispatch(showNorthAmericaSignUp(true)),\r\n forgetPassword: () => dispatch(forgetPassword()),\r\n showNorthAmericaDelivery: (isActive) => dispatch(showNorthAmericaDelivery(isActive))\r\n});\r\n\r\nexport default connect(null, mapDispatchToProps)(NorthAmericaSignIn);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { translate } from '../Services/translation';\r\nimport { setSignUpForm, showNorthAmericaSignUp, showNorthAmericaSignIn, createUser, displayLoader, setActiveErrorModal, showLoggedIn, setLoggedInUser } from '../actions/NorthAmerica.action';\r\n\r\nclass NorthAmericaSignUp extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n formData: {\r\n firstname: \"\",\r\n lastname: \"\",\r\n email: \"\",\r\n password: \"\",\r\n confirmPassword: \"\",\r\n address: \"\",\r\n zipCode: \"\",\r\n city: \"\",\r\n phone: \"\",\r\n houseNumber: \"\",\r\n state: \"\",\r\n country: \"\"\r\n },\r\n\r\n errors: {},\r\n errorMessage: \"\",\r\n emailErrorMessage: \"\",\r\n isShowWrongMessage: false,\r\n isShowPasswordForm: false,\r\n isShowSignupForm: true,\r\n isShowConfirm: false,\r\n isShowPasswordErrorMessage: false,\r\n isShowErrorRegister: false,\r\n isShowValidationErrorMessage: false,\r\n isShowEmailErrorMessage: false\r\n };\r\n\r\n this.handleInputChange = this.handleInputChange.bind(this);\r\n this.handleContinue = this.handleContinue.bind(this);\r\n this.handleCreateAccount = this.handleCreateAccount.bind(this);\r\n this.handlePasswordSubmit = this.handlePasswordSubmit.bind(this);\r\n this.handleInputPhone = this.handleInputPhone.bind(this);\r\n this.updateFormData = this.updateFormData.bind(this);\r\n this.handleInputEmail = this.handleInputEmail.bind(this);\r\n this.handleUpdatePasswordChange = this.handleUpdatePasswordChange.bind(this);\r\n this.handleEditInfo = this.handleEditInfo.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { signUpForm } = this.props;\r\n this.setState({\r\n formData: signUpForm\r\n });\r\n }\r\n\r\n renderSignup() {\r\n const { errors, formData } = this.state;\r\n return (\r\n <>\r\n <h3 id=\"northAmerica-signin\" className=\"checkout__section-title\">{translate('checkout.northAmerica.signin.header')}</h3>\r\n <div className=\"northAmerica-section__signup-container\">\r\n <div className=\"northAmerica-section__signup-container--header-container\">\r\n <span className=\"northAmerica-section__signup-container--header-container--icon\"></span>\r\n <p className=\"northAmerica-section__signup-container--header-container--header\">{translate(\"checkout.northAmerica.signup.title\")}</p>\r\n <p className=\"northAmerica-section__signup-container--header-container--subheader\">\r\n {translate(\"checkout.northAmerica.signup.description\")}\r\n </p>\r\n\r\n {this.state.isShowValidationErrorMessage &&\r\n <div className=\"northAmerica-section__signup-container--header-container--error-message\">\r\n <p>{this.state.errorMessage}</p>\r\n </div>\r\n }\r\n </div>\r\n <form>\r\n <div className=\"northAmerica-section__signup-container__name-container northAmerica-section__signup-container__input\">\r\n <div className=\"northAmerica-section--input-container\">\r\n <input\r\n type=\"text\"\r\n name=\"firstname\"\r\n placeholder={translate('northAmerica.signup.placeholder.first.name')}\r\n onChange={this.handleInputChange}\r\n value={formData.firstname}\r\n required\r\n />\r\n {errors.firstname && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.firstname}</span>}\r\n </div>\r\n <div className=\"northAmerica-section--input-container\">\r\n <input\r\n type=\"text\"\r\n name=\"lastname\"\r\n placeholder={translate('northAmerica.signup.placeholder.last.name')}\r\n onChange={this.handleInputChange}\r\n value={formData.lastname}\r\n required\r\n />\r\n {errors.lastname && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.lastname}</span>}\r\n </div>\r\n </div>\r\n\r\n <p className=\"northAmerica-section__signup-container--title\">{translate('northAmerica.signup.address.title')}</p>\r\n\r\n <div className=\"northAmerica-section__signup-container__input northAmerica-section__signup-container--address\">\r\n <div className=\"northAmerica-section__signup-container--inner-address-house\">\r\n <div className=\"northAmerica-section--input-container northAmerica-section__signup-container--inner-address-house__address\">\r\n <input\r\n type=\"text\"\r\n name=\"address\"\r\n placeholder={translate('northAmerica.signup.placeholder.address')}\r\n onChange={this.handleInputChange}\r\n value={formData.address}\r\n required\r\n />\r\n {errors.address && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.address}</span>}\r\n </div>\r\n\r\n {/*<div className=\"northAmerica-section--input-container northAmerica-section__signup-container--inner-address-house__number\">*/}\r\n {/* <input*/}\r\n {/* type=\"text\"*/}\r\n {/* name=\"houseNumber\"*/}\r\n {/* placeholder={translate('northAmerica.signup.placeholder.house.number')}*/}\r\n {/* value={formData.houseNumber}*/}\r\n {/* onChange={this.handleInputChange}*/}\r\n {/* required*/}\r\n {/* maxLength=\"5\"*/}\r\n {/* />*/}\r\n {/* {errors.houseNumber && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.houseNumber}</span>}*/}\r\n {/*</div>*/}\r\n </div>\r\n <div className=\"northAmerica-section__signup-container__input northAmerica-section__signup-container--inner-address\">\r\n <div className=\"northAmerica-section--input-container\">\r\n <input\r\n type=\"text\"\r\n name=\"zipCode\"\r\n placeholder={translate('northAmerica.signup.placeholder.zip.code')}\r\n onChange={this.handleInputChange}\r\n value={formData.zipCode}\r\n required\r\n />\r\n {errors.zipCode && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.zipCode}</span>}\r\n </div>\r\n <div className=\"northAmerica-section--input-container\">\r\n <input\r\n type=\"text\"\r\n name=\"city\"\r\n placeholder={translate('northAmerica.signup.placeholder.city')}\r\n onChange={this.handleInputChange}\r\n value={formData.city}\r\n required\r\n />\r\n {errors.city && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.city}</span>}\r\n </div>\r\n <div className=\"northAmerica-section--input-container\">\r\n <input\r\n type=\"text\"\r\n name=\"state\"\r\n placeholder={translate('northAmerica.signup.placeholder.state')}\r\n onChange={this.handleInputChange}\r\n value={formData.state}\r\n required\r\n />\r\n {errors.city && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.city}</span>}\r\n </div>\r\n </div>\r\n\r\n <p className=\"northAmerica-section__signup-container--title northAmerica-section__signup-container--completeTitle\">\r\n {translate('northAmerica.signup.complete.with.title')}\r\n </p>\r\n\r\n <div className=\"northAmerica-section__signup-container__input northAmerica-section__signup-container--complete\">\r\n <div className=\"northAmerica-section--input-container\">\r\n <input\r\n type=\"phone\"\r\n name=\"phone\"\r\n placeholder={translate('northAmerica.signup.placeholder.phone')}\r\n onChange={this.handleInputPhone}\r\n value={formData.phone}\r\n required\r\n />\r\n\r\n {errors.phone && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.phone}</span>}\r\n </div>\r\n <div className=\"northAmerica-section--input-container\">\r\n <input\r\n type=\"email\"\r\n name=\"email\"\r\n placeholder={translate('northAmerica.signup.placeholder.email')}\r\n onChange={this.handleInputEmail}\r\n value={formData.email}\r\n required\r\n />\r\n {errors.email && <span className=\"northAmerica-section__signup-container__input--error-message\">{errors.email}</span>}\r\n </div>\r\n </div>\r\n </div>\r\n <button className=\"northAmerica-orange-button\" onClick={this.handleContinue}>\r\n {translate('northAmerica.signup.continue.button')}\r\n </button>\r\n </form>\r\n\r\n <span className=\"northAmerica-section__separator-line\"></span>\r\n <button className=\"northAmerica-gray-button\" onClick={this.props.openLoginModal}>\r\n {translate('northAmerica.signup.back.to.signin.button')}\r\n </button>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n async handleContinue(event) {\r\n event.preventDefault();\r\n const { formData } = this.state;\r\n this.setState({ isShowValidationErrorMessage: false, errorMessage: \"\" });\r\n const emailRegex = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,4}$/;\r\n let validationPassed = true;\r\n this.props.setSignUpForm(formData);\r\n this.validateField();\r\n\r\n //Validation\r\n if (formData.firstname && (formData.firstname.length < 2 || formData.firstname.length > 34)) {\r\n this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.firstname.length\") });\r\n validationPassed = false;\r\n }\r\n else if (formData.lastname && (formData.lastname.length < 2 || formData.lastname.length > 35)) {\r\n this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.lastname.length\") });\r\n validationPassed = false;\r\n }\r\n else if (formData.address && (formData.address.length < 2 || formData.address.length > 2147483647)) {\r\n this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.address.length\") });\r\n validationPassed = false;\r\n }\r\n else if (formData.city && (formData.city.length < 2 || formData.city.length > 35)) {\r\n this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.city.length\") });\r\n validationPassed = false;\r\n }\r\n else if (formData.state && (formData.state.length < 2 || formData.state.length > 35)) {\r\n this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.state.length\") });\r\n validationPassed = false;\r\n }\r\n //else if (formData.houseNumber && (formData.houseNumber.length > 15 || !/\\d/.test(formData.houseNumber))) {\r\n // this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.housenumber.form\") });\r\n // validationPassed = false;\r\n //}\r\n else if (formData.email && !formData.email.match(emailRegex)) {\r\n this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.email.form\") });\r\n validationPassed = false;\r\n } \r\n else if (formData.phone && !/( )*(0|\\+)([0-9]| |[\\+\\-()/])*/.test(formData.phone)) {\r\n this.setState({ isShowValidationErrorMessage: true, errorMessage: translate(\"checkout.customer.address.form.error.message.phone.form\") });\r\n validationPassed = false;\r\n } else if (\r\n formData.firstname &&\r\n formData.lastname &&\r\n formData.address &&\r\n formData.zipCode &&\r\n formData.city &&\r\n formData.state && \r\n formData.email.match(emailRegex) &&\r\n //formData.houseNumber &&\r\n validationPassed\r\n ) {\r\n this.setState({\r\n isShowPasswordForm: true,\r\n isShowSignupForm: false,\r\n });\r\n }\r\n }\r\n\r\n handleInputChange(event) {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n this.setState((prevState) => ({\r\n formData: {\r\n ...prevState.formData,\r\n [name]: value,\r\n },\r\n }));\r\n\r\n if (value.trim() !== \"\") {\r\n this.setState((prevState) => ({\r\n errors: {\r\n ...prevState.errors,\r\n [name]: \"\",\r\n },\r\n }));\r\n }\r\n }\r\n\r\n handleInputPhone(event) {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n\r\n const phonePattern = /^( )*(0|\\+)([0-9]| |[\\+\\-\\(\\)\\/])*$/;\r\n\r\n // Check if the phone number matches the pattern\r\n this.setState((prevState) => ({\r\n errors: {\r\n ...prevState.errors,\r\n [name]: !phonePattern.test(value) ? \"Invalid phone number format.\" : \"\",\r\n },\r\n }));\r\n\r\n this.updateFormData(name, value)\r\n }\r\n\r\n handleInputEmail(event) {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n\r\n const emailPattern = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/;\r\n\r\n // Check if the email matches the pattern\r\n this.setState((prevState) => ({\r\n errors: {\r\n ...prevState.errors,\r\n [name]: !emailPattern.test(value) ? \"Invalid email format.\" : \"\",\r\n },\r\n }));\r\n\r\n this.updateFormData(name, value)\r\n }\r\n\r\n updateFormData(name, value) {\r\n this.setState((prevState) => ({\r\n formData: {\r\n ...prevState.formData,\r\n [name]: value,\r\n },\r\n }));\r\n }\r\n\r\n\r\n validateField() {\r\n this.setState({ errors: {} })\r\n const { errors, formData } = this.state;\r\n\r\n for (const fieldName in formData) {\r\n errors[fieldName] = formData[fieldName].trim() === \"\" ? \"This field is required.\" : \"\";\r\n }\r\n this.setState({ errors });\r\n }\r\n\r\n renderPasswordRegistration() {\r\n const { errors, formData } = this.state;\r\n\r\n return (\r\n <>\r\n <h3 id=\"northAmerica-signin\" className=\"checkout__section-title\">{translate('checkout.northAmerica.signin.header')}</h3>\r\n <div className=\"northAmerica-section__signup-container\">\r\n <div className=\"northAmerica-section__password-container--top\">\r\n <span></span>\r\n <p className=\"northAmerica-section__password-container--top--title\">{translate(\"checkout.northAmerica.signup.title\")}</p>\r\n <p className=\"northAmerica-section__password-container--top--description\">{translate(\"checkout.northAmerica.signup.description\")}</p>\r\n\r\n {this.state.isShowValidationErrorMessage && !this.state.isShowPasswordErrorMessage &&\r\n <div className=\"northAmerica-section__password-container--top--error-message\">\r\n <p>{this.state.errorMessage}</p>\r\n </div>\r\n }\r\n\r\n {this.state.isShowEmailErrorMessage &&\r\n <div className=\"northAmerica-section__password-container--top--error-message\">\r\n <p>{this.state.emailErrorMessage}</p>\r\n </div>\r\n }\r\n\r\n {this.state.isShowPasswordErrorMessage && (\r\n <div className=\"northAmerica-section__password-container--top--password-fail\">\r\n <p>{this.state.errorMessage}</p>\r\n </div>\r\n )}\r\n </div>\r\n <div className=\"northAmerica-section__password-container--input\">\r\n <input\r\n type=\"password\"\r\n name=\"password\"\r\n placeholder={translate(\"checkout.northAmerica.placeholder.password\")}\r\n value={formData.password}\r\n required\r\n onChange={this.handleUpdatePasswordChange}\r\n />\r\n <input\r\n type=\"password\"\r\n name=\"confirmPassword\"\r\n placeholder={translate(\"checkout.northAmerica.placeholder.confirm.password\")}\r\n value={formData.confirmPassword}\r\n required\r\n onChange={this.handleUpdatePasswordChange}\r\n />\r\n\r\n <button className=\"northAmerica-orange-button\" onClick={this.handlePasswordSubmit}>{translate(\"checkout.northAmerica.create.account.button\")}</button>\r\n <button className=\"northAmerica-gray-button\" onClick={this.handleEditInfo}>\r\n {translate('northAmerica.signup.back.to.signup.button')}\r\n </button>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n handleEditInfo(event) {\r\n event.preventDefault();\r\n this.props.showNorthAmericaSignUp();\r\n this.setState({\r\n isShowPasswordForm: false,\r\n isShowSignupForm: true,\r\n });\r\n this.setState({ isShowValidationErrorMessage: false, isShowPasswordErrorMessage: false, isShowEmailErrorMessage: false, errorMessage: \"\", emailErrorMessage: \"\" });\r\n }\r\n\r\n handleUpdatePasswordChange(event) {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n this.setState((prevState) => ({\r\n formData: {\r\n ...prevState.formData,\r\n [name]: value,\r\n },\r\n }));\r\n }\r\n\r\n async handlePasswordSubmit() {\r\n const { formData } = this.state;\r\n this.setState({ isShowValidationErrorMessage: false, isShowPasswordErrorMessage: false, isShowEmailErrorMessage: false, errorMessage: \"\", emailErrorMessage: \"\" });\r\n const passwordRegex = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)(?=.*[\\W_]).{12,100}$/;\r\n const { password, confirmPassword } = this.state.formData;\r\n if (!passwordRegex.test(password) || !passwordRegex.test(confirmPassword) || password === \"\" || confirmPassword === \"\") {\r\n this.setState({ isShowPasswordErrorMessage: true, errorMessage: translate(\"checkout.northAmerica.password.error.message\") });\r\n return;\r\n } else if (password === confirmPassword) {\r\n this.setState({ isShowPasswordErrorMessage: false })\r\n this.props.setSignUpForm(formData);\r\n this.handleCreateAccount();\r\n } else {\r\n this.setState({ isShowPasswordErrorMessage: true, errorMessage: translate(\"checkout.northAmerica.password.not.match.message\") });\r\n }\r\n }\r\n\r\n async handleCreateAccount() {\r\n this.setState({ isShowPasswordErrorMessage: false });\r\n this.props.displayLoader(true);\r\n let createUserResponse = null;\r\n try {\r\n createUserResponse = await this.props.createUser(this.state.formData);\r\n if (createUserResponse) {\r\n const token = createUserResponse.requestVerificationToken;\r\n token && window.localStorage.setItem(\"requestVerificationToken\", token);\r\n this.props.setLoggedInUser(createUserResponse);\r\n //this.props.showLoggedIn(true);\r\n this.props.displayLoader(false);\r\n this.props.closeModal();\r\n }\r\n else {\r\n this.setState({\r\n isShowPasswordErrorMessage: true,\r\n errorMessage: translate(\"checkout.northAmerica.error.message.generic\")\r\n });\r\n this.props.displayLoader(false);\r\n }\r\n } catch (error) {\r\n if (error.includes(\"Email already exists\")) {\r\n this.setState({\r\n isShowPasswordErrorMessage: true,\r\n errorMessage: translate(\"checkout.northAmerica.error.message.email.exist\")\r\n });\r\n } else {\r\n // Handle generic errors\r\n this.setState({\r\n isShowPasswordErrorMessage: true,\r\n errorMessage: translate(\"checkout.northAmerica.error.message.generic\")\r\n });\r\n }\r\n this.props.displayLoader(false);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {this.state.isShowSignupForm && this.renderSignup()}\r\n {this.state.isShowPasswordForm && this.renderPasswordRegistration()}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setSignUpForm: (form) => dispatch(setSignUpForm(form)),\r\n showNorthAmericaSignUp: () => dispatch(showNorthAmericaSignUp(true)),\r\n showNorthAmericaSignIn: () => dispatch(showNorthAmericaSignIn(true)),\r\n createUser: (userData) => dispatch(createUser(userData)),\r\n displayLoader: (isLoaderActive) => dispatch(displayLoader(isLoaderActive)),\r\n setActiveErrorModal: (isActive) => dispatch(setActiveErrorModal(isActive)),\r\n showLoggedIn: () => dispatch(showLoggedIn(true)),\r\n setLoggedInUser: (user) => dispatch(setLoggedInUser(user)),\r\n});\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n isSignInSectionActive: state.northAmerica.isSignInSectionActive,\r\n isLoaderActive: state.northAmerica.isLoaderActive,\r\n isShowSignIn: state.northAmerica.payload.isShowSignIn,\r\n isShowLoggedin: state.northAmerica.payload.isShowLoggedin,\r\n signUpForm: state.northAmerica.signUpForm,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NorthAmericaSignUp);","import React, { Component } from 'react';\r\nimport { translate } from '../Services/translation';\r\nimport { connect } from 'react-redux';\r\nimport { setResetPasswordEmail, forgotPassword } from '../actions/NorthAmerica.action';\r\n\r\nclass NorthAmericaForgetPassword extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n forgetPasswordEmail: \"\",\r\n errorMessage: \"\"\r\n };\r\n\r\n this.handleResetPasswordSubmit = this.handleResetPasswordSubmit.bind(this);\r\n this.handleForgetPasswordEmail = this.handleForgetPasswordEmail.bind(this);\r\n }\r\n renderForgetPassword() {\r\n return (\r\n <>\r\n <h3 id=\"bahag-signin\" className=\"checkout__section-title\">{translate('checkout.bahag.signin.header')}</h3>\r\n <div className=\"germany-section__forget-container\">\r\n <p className=\"germany-section__forget-container--header\">{translate(\"checkout.bahag.forget.password.header\")}</p>\r\n <p className=\"germany-section__forget-container--subheader\">{translate(\"checkout.bahag.forget.password.description\")}</p>\r\n {this.state.errorMessage && (\r\n <div className=\"northAmerica-section__password-container--top--password-fail\">\r\n <p>{this.state.errorMessage}</p>\r\n </div>\r\n )}\r\n <form onSubmit={this.handleResetPasswordSubmit}>\r\n <div className=\"germany-section__forget-poassword\">\r\n <div className=\"germany-section__forget-poassword--input-container\">\r\n <input type=\"email\" placeholder={translate('checkout.bahag.forget.password.placeholder.email')} required onChange={this.handleForgetPasswordEmail} name=\"forgetPasswordEmail\"></input>\r\n </div>\r\n <div className=\"germany-section__forget-poassword--buttons\">\r\n <button\r\n className=\"germany-section__forget-poassword--buttons--signin\" type=\"submit\">{translate('checkout.bahag.reset.password.button')}\r\n </button>\r\n <a onClick={this.props.openLoginModal}>{translate('checkout.bahag.back.to.signin')}</a>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </>\r\n )\r\n }\r\n\r\n handleForgetPasswordEmail(event) {\r\n const { value } = event.target;\r\n\r\n this.setState({\r\n forgetPasswordEmail: value\r\n });\r\n\r\n }\r\n\r\n async handleResetPasswordSubmit(event) {\r\n event.preventDefault();\r\n this.setState({ errorMessage: \"\" });\r\n const email = this.state.forgetPasswordEmail\r\n if (email) {\r\n const responseForgetPassword = await this.props.forgotPassword(email);\r\n if (responseForgetPassword) {\r\n const isSuccess = responseForgetPassword.success;\r\n if (isSuccess) {\r\n this.props.setIsShowNewPassword();\r\n } else {\r\n this.setState({ errorMessage: responseForgetPassword.errorMessage });\r\n }\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {this.renderForgetPassword()}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n forgotPassword: (email) => dispatch(forgotPassword(email)),\r\n setResetPasswordEmail: (resetPasswordEmail) => dispatch(setResetPasswordEmail(resetPasswordEmail))\r\n});\r\n\r\nexport default connect(null, mapDispatchToProps)(NorthAmericaForgetPassword);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { translate } from '../Services/translation';\r\nimport { setTosAndDataPrivacy } from '../actions/NorthAmerica.action';\r\nclass NorthAmericaTerms extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.handleCheckboxChange = this.handleCheckboxChange.bind(this);\r\n }\r\n\r\n handleCheckboxChange(event) {\r\n const isChecked = event.target.checked;\r\n this.props.setTosAndDataPrivacy(isChecked);\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"northAmerica-terms-container\">\r\n <label className=\"northAmerica-terms-container--label\">\r\n <input className=\"northAmerica-terms-container--label__input\" type=\"checkbox\" onChange={this.handleCheckboxChange}></input>\r\n <span className=\"northAmerica-terms-container--label__input-box\"></span>\r\n <div className=\"northAmerica-terms-container--text-container wysiwyg\">\r\n <span>{translate(\"checkout.northAmerica.tos.data.text\")}\r\n <a className=\"northAmerica-terms-container--text-container--anchor\" href=\"\" target=\"_blank\" >{translate(\"checkout.northAmerica.terms.tos\")}</a>\r\n <a className=\"northAmerica-terms-container--text-container--anchor\" href=\"\" target=\"_blank\">{translate(\"checkout.northAmerica.terms.data.privacy\")}</a>\r\n </span>\r\n </div>\r\n </label>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n setTosAndDataPrivacy: (checked) => dispatch(setTosAndDataPrivacy(checked)),\r\n});\r\n\r\nexport default connect(null, mapDispatchToProps)(NorthAmericaTerms);\r\n","import React, { Component } from 'react';\r\nimport { translate } from '../Services/translation';\r\nimport { connect } from 'react-redux';\r\nimport { showNorthAmericaPayment, displayLoader, setLoggedInUser, setIsRegisterChecked, calculateTax, setStripePaymentIntentData, setTax } from '../actions/NorthAmerica.action';\r\nimport { setCustomerDetails } from '../actions/Checkout.action';\r\nimport NorthAmericaSignIn from \"./NorthAmericaSignIn\";\r\nimport NorthAmericaSignUp from \"./NorthAmericaSignUp\";\r\nimport NorthAmericaForgetPassword from './NorthAmericaForgetPassword';\r\nimport NorthAmericaTerms from './NorthAmericaTerms';\r\nimport USStates from './USStates.json';\r\nimport CAStates from './CAStates.json';\r\n\r\nclass ShippingAddressForm extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n formData: {\r\n phone: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n address: \"\",\r\n zipCode: \"\",\r\n city: \"\",\r\n houseNumber: \"\",\r\n state: \"\",\r\n email: \"\",\r\n },\r\n errorMessage: \"\",\r\n isShowValidationErrorMessage: false,\r\n showLoginModal: false,\r\n showSignUpModal: false,\r\n showForgetPasswordModal: false,\r\n isShowNewPassword: false,\r\n isLoggedIn: false,\r\n checkboxes: {\r\n registerCheckbox: false,\r\n newsletterCheckbox: false\r\n },\r\n culture: \"\",\r\n statesList: []\r\n };\r\n this.handleCustomerFormSubmit = this.handleCustomerFormSubmit.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.openLoginModal = this.openLoginModal.bind(this);\r\n this.closeLoginModal = this.closeLoginModal.bind(this);\r\n this.openSignUpModal = this.openSignUpModal.bind(this);\r\n this.closeSignUpModal = this.closeSignUpModal.bind(this);\r\n this.openForgetPasswordModal = this.openForgetPasswordModal.bind(this);\r\n this.closeForgetPasswordModal = this.closeForgetPasswordModal.bind(this);\r\n this.setIsShowNewPassword = this.setIsShowNewPassword.bind(this);\r\n this.handleCheckboxClick = this.handleCheckboxClick.bind(this);\r\n this.isFormValid = this.isFormValid.bind(this);\r\n this.isValidCanadianPostalCode = this.isValidCanadianPostalCode.bind(this);\r\n this.convertToCents = this.convertToCents.bind(this);\r\n }\r\n\r\n async componentDidMount() {\r\n this._isMounted = true;\r\n try {\r\n const marketContent = document.querySelector('meta[property=\"og:market\"]').getAttribute('content');\r\n if (marketContent == \"CA\") {\r\n this.setState({ statesList: CAStates });\r\n }\r\n else if (marketContent == \"US\") {\r\n this.setState({ statesList: USStates });\r\n }\r\n\r\n this.setState({ culture: marketContent });\r\n const authResponse = await fetch('/api/customer/isAuthenticated');\r\n const authStatus = await authResponse.json();\r\n if (authStatus.isAuthenticated) {\r\n const userResponse = await fetch('/api/customer/getUserDetails');\r\n const userDetails = await userResponse.json();\r\n this.props.setLoggedInUser(userDetails);\r\n this.setState({\r\n formData: {\r\n email: userDetails.email || \"\",\r\n phone: userDetails.phone || \"\",\r\n firstName: userDetails.firstName || \"\",\r\n lastName: userDetails.lastName || \"\",\r\n address: userDetails.address || \"\",\r\n zipCode: userDetails.zipCode || \"\",\r\n city: userDetails.city || \"\",\r\n houseNumber: userDetails.houseNumber || \"\",\r\n state: userDetails.state || \"\",\r\n password: \"\",\r\n confirmPassword: \"\"\r\n },\r\n isShowValidationErrorMessage: false,\r\n errorMessage: \"\",\r\n\r\n isLoggedIn: true\r\n });\r\n }\r\n } catch (error) {\r\n console.error(\"Error checking authentication status or fetching user details:\", error);\r\n }\r\n }\r\n\r\n async componentDidUpdate(prevProps, prevState) {\r\n if (this.props.lggedinUser && this.props.lggedinUser !== prevProps.lggedinUser) {\r\n this.setState({\r\n formData: {\r\n email: this.props.lggedinUser.email || \"\",\r\n phone: this.props.lggedinUser.phone || \"\",\r\n firstName: this.props.lggedinUser.firstName || \"\",\r\n lastName: this.props.lggedinUser.lastName || \"\",\r\n address: this.props.lggedinUser.address || \"\",\r\n zipCode: this.props.lggedinUser.zipCode || \"\",\r\n city: this.props.lggedinUser.city || \"\",\r\n houseNumber: this.props.lggedinUser.houseNumber || \"\",\r\n state: this.props.lggedinUser.state || \"\",\r\n password: \"\",\r\n confirmPassword: \"\"\r\n },\r\n isShowValidationErrorMessage: false,\r\n errorMessage: \"\",\r\n isLoggedIn: true\r\n });\r\n }\r\n\r\n // Handle when the user logs out (isLoggedIn changes to false)\r\n if (prevProps.isLoggedIn && !this.props.isLoggedIn) {\r\n this.setState({\r\n formData: {\r\n email: \"\",\r\n phone: \"\",\r\n firstName: \"\",\r\n lastName: \"\",\r\n address: \"\",\r\n zipCode: \"\",\r\n city: \"\",\r\n houseNumber: \"\",\r\n state: \"\",\r\n password: \"\",\r\n confirmPassword: \"\"\r\n },\r\n isShowValidationErrorMessage: false,\r\n errorMessage: \"\",\r\n isLoggedIn: false,\r\n });\r\n }\r\n \r\n const showValidationMessage = false;\r\n if (\r\n this.isFormValid(showValidationMessage) &&\r\n (\r\n prevState.formData.address !== this.state.formData.address ||\r\n prevState.formData.zipCode !== this.state.formData.zipCode ||\r\n prevState.formData.city !== this.state.formData.city ||\r\n prevState.formData.state !== this.state.formData.state ||\r\n prevProps.cart.quantity !== this.props.cart.quantity ||\r\n prevProps.cart.orderTotal !== this.props.cart.orderTotal ||\r\n prevProps.cart.hasDiscount !== this.props.cart.hasDiscount ||\r\n prevProps.checkout.payload.selectedDeliveryMethod !== this.props.checkout.payload.selectedDeliveryMethod\r\n )\r\n ) {\r\n const url = window.location.pathname;\r\n let currencyCode = '';\r\n\r\n if (url.includes('/ca/')) {\r\n currencyCode = 'CAD'; // Canadian Dollar\r\n } else if (url.includes('/us/')) {\r\n currencyCode = 'USD'; // US Dollar\r\n } else {\r\n currencyCode = 'USD';\r\n }\r\n const address = {\r\n line1: this.state.formData.address,\r\n postal_code: this.state.formData.zipCode,\r\n city: this.state.formData.city,\r\n state: this.state.formData.state,\r\n country: this.state.culture\r\n };\r\n\r\n const items = this.props.cart.orderRows.map(row => ({\r\n id: row.articleNumber,\r\n amount: Math.round(parseFloat(row.totalPrice.replace(/[^\\d.-]/g, '')) * 100)\r\n }));\r\n\r\n const data = {\r\n currency: currencyCode,\r\n address: address,\r\n items: items,\r\n shipping_cost: this.convertToCents(this.props.cart.deliveryCost),\r\n culture: document.querySelector('meta[property=\"og:market\"]').getAttribute('content')\r\n }\r\n\r\n try {\r\n await this.props.calculateTax(data);\r\n await this.props.setStripePaymentIntentData(data);\r\n this.setState({\r\n isShowValidationErrorMessage: false,\r\n errorMessage: \"\",\r\n });\r\n }\r\n catch {\r\n this.setState({\r\n isShowValidationErrorMessage: true,\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.invalid.address\"),\r\n });\r\n await this.props.setStripePaymentIntentData({});\r\n this.props.showNorthAmericaPayment(false);\r\n }\r\n } else if (\r\n prevState.formData.zipCode !== this.state.formData.zipCode ||\r\n prevState.formData.state !== this.state.formData.state ||\r\n prevProps.cart.quantity !== this.props.cart.quantity ||\r\n prevProps.cart.orderTotal !== this.props.cart.orderTotal\r\n ) {\r\n if (this.props.naTax) {\r\n this.props.setTax(null);\r\n }\r\n }\r\n }\r\n\r\n handleCheckboxClick(event) {\r\n const { name, checked } = event.target;\r\n this.setState(\r\n (prevState) => ({\r\n checkboxes: {\r\n ...prevState.checkboxes,\r\n [name]: !prevState.checkboxes[name],\r\n },\r\n }),\r\n () => {\r\n\r\n if (name === \"registerCheckbox\") {\r\n this.props.setIsRegisterChecked(this.state.checkboxes[name]);\r\n }\r\n }\r\n );\r\n }\r\n\r\n convertToCents(amount) {\r\n let numericValue = parseFloat(amount.replace(/[^\\d.]/g, ''));\r\n return Math.round(numericValue * 100);\r\n }\r\n\r\n renderCustomerPersonalForm() {\r\n const marketContent = this.state.culture;\r\n let countryName = marketContent !== null && marketContent === \"CA\" ? \"Canada\" : \"United States\";\r\n\r\n const { firstName, lastName, address, zipCode, city, email, phone, houseNumber, state, password, confirmPassword } = this.state.formData;\r\n const { checkboxes, statesList } = this.state;\r\n const isStateValid = statesList.some((item) => item.code === state);\r\n return (\r\n <div id=\"northAmerica-customer-address\">\r\n <h3 className=\"checkout__section-title\">{translate('checkout.customer.address.form.header')}</h3>\r\n {!this.state.isLoggedIn &&\r\n <div className=\"checkout__section-already-logged-in\">\r\n <p onClick={this.openLoginModal}>{translate('checkout.customer.address.form.already.member')}</p>\r\n </div>\r\n }\r\n {!this.state.lggedinUser && this.state.showLoginModal && (\r\n <div className=\"checkout__section__modal-overlay\">\r\n <div className=\"checkout__section__modal\">\r\n <div className=\"checkout__section__modal-content\">\r\n <NorthAmericaSignIn closeModal={this.closeLoginModal} openSignUpModal={this.openSignUpModal} openForgetPasswordModal={this.openForgetPasswordModal} isShowNewPassword={this.state.isShowNewPassword} />\r\n <button type=\"button\" className=\"checkout__section__modal-close\" onClick={this.closeLoginModal}>{translate('northAmerica.checkout.close.button.text')}</button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n {!this.state.lggedinUser && this.state.showSignUpModal && (\r\n <div className=\"checkout__section__modal-overlay\">\r\n <div className=\"checkout__section__modal\">\r\n <div className=\"checkout__section__modal-content\">\r\n <NorthAmericaSignUp closeModal={this.closeSignUpModal} openLoginModal={this.openLoginModal} />\r\n <button type=\"button\" className=\"checkout__section__modal-close\" onClick={this.closeSignUpModal}>{translate('northAmerica.checkout.close.button.text')}</button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n {!this.state.lggedinUser && this.state.showForgetPasswordModal && (\r\n <div className=\"checkout__section__modal-overlay\">\r\n <div className=\"checkout__section__modal\">\r\n <div className=\"checkout__section__modal-content\">\r\n <NorthAmericaForgetPassword closeModal={this.closeForgetPasswordModal} openLoginModal={this.openLoginModal} setIsShowNewPassword={this.setIsShowNewPassword} />\r\n <button type=\"button\" className=\"checkout__section__modal-close\" onClick={this.closeForgetPasswordModal}>{translate('northAmerica.checkout.close.button.text')}</button>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n <form onSubmit={(event) => this.handleCustomerFormSubmit(event)}>\r\n {this.state.isShowValidationErrorMessage &&\r\n <div className=\"checkout__section-error-message\">\r\n <p>{this.state.errorMessage}</p>\r\n </div>\r\n }\r\n <div className='shipping-address-form__inner'>\r\n <div className='shipping-address-form__input-halve'>\r\n <input\r\n className='shipping-address-form__inner--input'\r\n type='text'\r\n name=\"firstName\"\r\n placeholder={translate('checkout.customer.address.form.firstName')}\r\n required\r\n onChange={this.handleChange}\r\n value={firstName}\r\n />\r\n <input\r\n className='shipping-address-form__inner--input'\r\n type='text'\r\n name=\"lastName\"\r\n placeholder={translate('checkout.customer.address.form.lastName')}\r\n required\r\n onChange={this.handleChange}\r\n value={lastName}\r\n />\r\n </div>\r\n <div className='shipping-address-form__input-full'>\r\n <input\r\n className='shipping-address-form__inner--input shipping-address-form__input-full--address'\r\n type='text'\r\n name=\"address\"\r\n placeholder={translate('checkout.customer.address.form.address')}\r\n required\r\n onChange={this.handleChange}\r\n value={address}\r\n />\r\n </div>\r\n\r\n <div className='shipping-address-form__input-full'>\r\n <input\r\n className='shipping-address-form__inner--input shipping-address-form__input-full--address'\r\n type='text'\r\n name=\"city\"\r\n placeholder={translate('checkout.customer.address.form.city')}\r\n required\r\n onChange={this.handleChange}\r\n value={city}\r\n />\r\n <input\r\n className='shipping-address-form__inner--input shipping-address-form__input-full--number'\r\n type='text'\r\n name=\"zipCode\"\r\n placeholder={translate('checkout.customer.address.form.zip.code')}\r\n required\r\n onChange={this.handleChange}\r\n value={zipCode}\r\n />\r\n </div>\r\n <div className='shipping-address-form__input-halve'>\r\n <select\r\n className={`shipping-address-form__inner--input ${!isStateValid ? 'shipping-address-form__empty-value' : ''}`}\r\n name=\"state\"\r\n required\r\n value={isStateValid ? state : \"\"}\r\n onChange={this.handleChange}\r\n onFocus={(e) => e.target.classList.remove('shipping-address-form__empty-value')}\r\n >\r\n <option value=\"\" disabled>\r\n --Select State--\r\n </option>\r\n {statesList.map((item, index) => (\r\n <option key={index} value={item.code}>\r\n {item.state}\r\n </option>\r\n ))}\r\n </select>\r\n\r\n <input\r\n className='shipping-address-form__inner--input'\r\n type='text'\r\n name=\"contry\"\r\n placeholder={translate('checkout.customer.address.form.country')}\r\n readOnly\r\n value={countryName}\r\n />\r\n </div>\r\n <div className='shipping-address-form__input-halve'>\r\n <input\r\n className='shipping-address-form__inner--input'\r\n type='email'\r\n name=\"email\"\r\n placeholder={translate('checkout.customer.address.form.email')}\r\n required\r\n onChange={this.handleChange}\r\n value={email}\r\n />\r\n <input\r\n className='shipping-address-form__inner--input'\r\n type='phone'\r\n name=\"phone\"\r\n placeholder={translate('checkout.customer.address.form.phone')}\r\n required\r\n onChange={this.handleChange}\r\n value={phone}\r\n />\r\n </div>\r\n </div>\r\n\r\n <NorthAmericaTerms />\r\n <div className=\"northAmerica-terms-container\">\r\n {!this.state.isLoggedIn && (\r\n <label className=\"northAmerica-terms-container--label\">\r\n <input\r\n className=\"northAmerica-terms-container--label__input\"\r\n type=\"checkbox\"\r\n name=\"newsletterCheckbox\"\r\n onChange={this.handleCheckboxClick}\r\n checked={checkboxes.newsletterCheckbox}\r\n />\r\n <span className=\"northAmerica-terms-container--label__input-box\"></span>\r\n <div className=\"northAmerica-terms-container--text-container wysiwyg\">\r\n <span>\r\n {translate(\"checkout.northAmerica.marketing.data.text\")}\r\n </span>\r\n </div>\r\n </label>\r\n )}\r\n\r\n {!this.state.isLoggedIn && (\r\n <label className=\"northAmerica-terms-container--label\" style={{ margin: '34px 0' }}>\r\n <input\r\n className=\"northAmerica-terms-container--label__input\"\r\n type=\"checkbox\"\r\n name=\"registerCheckbox\"\r\n onChange={this.handleCheckboxClick}\r\n checked={checkboxes.registerCheckbox}\r\n />\r\n <span className=\"northAmerica-terms-container--label__input-box\"></span>\r\n <div className=\"northAmerica-terms-container--text-container wysiwyg\">\r\n <span>\r\n {translate(\"checkout.northAmerica.register.data.text\")}\r\n </span>\r\n </div>\r\n </label>\r\n )}\r\n </div>\r\n {(checkboxes.registerCheckbox && !this.state.isLoggedIn) && (\r\n <div className='shipping-address-form__input-halve' style={{ marginBottom: '34px' }} >\r\n <input\r\n className='shipping-address-form__inner--input'\r\n type='password'\r\n name=\"password\"\r\n placeholder={translate('checkout.customer.address.form.password')}\r\n required\r\n onChange={this.handleChange}\r\n value={password || \"\"}\r\n />\r\n <input\r\n className='shipping-address-form__inner--input'\r\n type='password'\r\n name=\"confirmPassword\"\r\n placeholder={translate('checkout.customer.address.form.confirmpassword')}\r\n required\r\n onChange={this.handleChange}\r\n value={confirmPassword || \"\"}\r\n />\r\n </div>\r\n )}\r\n <div className=\"shipping-address-form__inner\">\r\n <button className=\"shipping-address-form__submit-button\" type=\"submit\">{translate('checkout.customer.address.form.submit.button')}</button>\r\n </div>\r\n <div className='northAmerica-checkout-cartArrow'></div>\r\n </form >\r\n </div>\r\n )\r\n }\r\n\r\n isFormValid(showValidation) {\r\n const { isTosAndDataPrivacyChecked } = this.props;\r\n const { firstName, lastName, email, phone, city, zipCode, address, state, houseNumber, password, confirmPassword } = this.state.formData;\r\n const { statesList } = this.state;\r\n const isStateValid = statesList.some((item) => item.code === state);\r\n const selectedState = isStateValid ? statesList.find((item) => item.code === state) : null;\r\n let isZipCodeValid = false;\r\n if (this.state.culture == \"CA\" && selectedState) {\r\n const zipStartsWith = selectedState.zipCodesStartsWith || [];\r\n isZipCodeValid = zipCode && zipStartsWith.some((prefix) => zipCode.startsWith(prefix));\r\n } else if (this.state.culture == \"US\" && selectedState) {\r\n const zipCodeNum = parseInt(zipCode, 10);\r\n const start = parseInt(selectedState.zipCodesRange.start, 10);\r\n const end = parseInt(selectedState.zipCodesRange.end, 10);\r\n isZipCodeValid = selectedState && zipCode && zipCodeNum >= start && zipCodeNum <= end;\r\n }\r\n \r\n const validations = [\r\n {\r\n isValid: firstName && firstName.trim().length >= 2 && firstName.trim().length <= 34,\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.firstname.length\"),\r\n },\r\n {\r\n isValid: lastName && lastName.trim().length >= 2 && lastName.trim().length <= 35,\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.lastname.length\"),\r\n },\r\n {\r\n isValid: address && address.trim().length >= 2 && address.trim().length <= 2147483647,\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.address.length\"),\r\n },\r\n {\r\n isValid: city && city.trim().length >= 2 && city.trim().length <= 35,\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.city.length\"),\r\n },\r\n {\r\n isValid: zipCode && zipCode.trim().length >= 5 && zipCode.trim().length <= 10 && isZipCodeValid,\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.zipcode.invalid\"),\r\n },\r\n {\r\n isValid: isStateValid,\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.state.required\"),\r\n },\r\n ];\r\n\r\n if (showValidation) {\r\n validations.push(\r\n {\r\n isValid: isTosAndDataPrivacyChecked,\r\n errorMessage: translate(\"checkout.northAmerica.signup.error.message.checkbox\"),\r\n },\r\n {\r\n isValid: phone && /^\\+?\\d{1,4}?[-.\\s]?\\(?\\d{2,4}\\)?[-.\\s]?\\d{2,4}[-.\\s]?\\d{2,4}[-.\\s]?\\d{0,4}$/.test(phone),\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.phone.form\"),\r\n },\r\n {\r\n isValid: email && /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i.test(email),\r\n errorMessage: translate(\"checkout.customer.address.form.error.message.email.invalid\"),\r\n },\r\n //{\r\n // isValid: houseNumber && houseNumber.trim().length >= 1 && houseNumber.trim().length <= 10,\r\n // errorMessage: translate(\"checkout.customer.address.form.error.message.houseNumber.invalid\"),\r\n //},\r\n {\r\n isValid: !this.state.checkboxes.registerCheckbox || (password && confirmPassword && password === confirmPassword),\r\n errorMessage: translate(\"checkout.northAmerica.password.not.match.message\"),\r\n }\r\n );\r\n }\r\n\r\n \r\n for (const validation of validations) {\r\n if (!validation.isValid) {\r\n if (showValidation) {\r\n this.setState({\r\n isShowValidationErrorMessage: true,\r\n errorMessage: validation.errorMessage,\r\n });\r\n }\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n isValidCanadianPostalCode(postalCode, zipCodeRange) {\r\n const postalCodeRegex = /^[A-Za-z]\\d[A-Za-z] \\d[A-Za-z]\\d$/;\r\n if (!postalCodeRegex.test(postalCode)) {\r\n return false;\r\n }\r\n const postalCodePrefix = postalCode.substring(0, 3);\r\n return postalCodePrefix >= zipCodeRange.start && postalCodePrefix <= zipCodeRange.end;\r\n }\r\n\r\n async handleCustomerFormSubmit(event) {\r\n event.preventDefault();\r\n const { firstName, lastName, email, phone, city, zipCode, address, state, houseNumber, password, confirmPassword } = this.state.formData;\r\n this.setState({\r\n isShowValidationErrorMessage: false,\r\n errorMessage: \"\",\r\n });\r\n const showValidationMessage = true;\r\n const validationPassed = this.isFormValid(showValidationMessage);\r\n\r\n if (validationPassed) {\r\n this.props.setCustomerDetails(\"firstName\", firstName);\r\n this.props.setCustomerDetails(\"lastName\", lastName);\r\n this.props.setCustomerDetails(\"address\", address);\r\n this.props.setCustomerDetails(\"city\", city);\r\n this.props.setCustomerDetails(\"email\", email);\r\n this.props.setCustomerDetails(\"zipCode\", zipCode);\r\n this.props.setCustomerDetails(\"phoneNumber\", phone);\r\n //this.props.setCustomerDetails(\"houseNumber\", houseNumber);\r\n this.props.setCustomerDetails(\"state\", state);\r\n this.props.setCustomerDetails(\"country\", this.state.culture);\r\n this.props.setCustomerDetails(\"password\", password);\r\n this.props.setCustomerDetails(\"confirmPassword\", confirmPassword);\r\n // Proceed to show payment section if validation passed\r\n this.props.showNorthAmericaPayment(true);\r\n this.props.toPayment();\r\n } else {\r\n this.props.showNorthAmericaPayment(false);\r\n }\r\n }\r\n\r\n handleChange(event) {\r\n const fieldName = event.target.name;\r\n const newValue = event.target.value;\r\n this.props.showNorthAmericaPayment(false);\r\n\r\n this.setState(prevState => ({\r\n formData: {\r\n ...prevState.formData,\r\n [fieldName]: newValue\r\n },\r\n }));\r\n }\r\n\r\n openLoginModal() {\r\n this.setState({ showLoginModal: true });\r\n this.closeSignUpModal();\r\n this.closeForgetPasswordModal();\r\n }\r\n\r\n closeLoginModal() {\r\n this.setState({ showLoginModal: false });\r\n }\r\n\r\n openSignUpModal() {\r\n this.setState({ showSignUpModal: true });\r\n this.closeLoginModal();\r\n }\r\n\r\n closeSignUpModal() {\r\n this.setState({ showSignUpModal: false });\r\n }\r\n\r\n openForgetPasswordModal() {\r\n this.setState({ showForgetPasswordModal: true });\r\n this.closeLoginModal();\r\n }\r\n\r\n closeForgetPasswordModal() {\r\n this.setState({ showForgetPasswordModal: false });\r\n }\r\n\r\n setIsShowNewPassword() {\r\n this.openLoginModal();\r\n this.setState({ isShowNewPassword: true });\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n {this.renderCustomerPersonalForm()}\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n lggedinUser: state.northAmerica.lggedinUser,\r\n formData: state.northAmerica.formData,\r\n isShowLoggedin: state.northAmerica.payload.isShowLoggedin,\r\n isTosAndDataPrivacyChecked: state.northAmerica.isTosAndDataPrivacyChecked,\r\n cart: state.cart,\r\n naTax: state.northAmerica.tax,\r\n checkout: state.checkout\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n displayLoader: (isLoaderActive) => dispatch(displayLoader(isLoaderActive)),\r\n showNorthAmericaPayment: (isActive) => dispatch(showNorthAmericaPayment(isActive)),\r\n setLoggedInUser: (user) => dispatch(setLoggedInUser(user)),\r\n setIsRegisterChecked: (isItChecked) => dispatch(setIsRegisterChecked(isItChecked)),\r\n setCustomerDetails: (propName, value) => dispatch(setCustomerDetails(propName, value)),\r\n calculateTax: (data) => dispatch(calculateTax(data)),\r\n setStripePaymentIntentData: (data) => dispatch(setStripePaymentIntentData(data)),\r\n setTax: (num) => dispatch(setTax(num))\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ShippingAddressForm);","import { post, put } from '../Services/http';\r\nimport { load as loadCart } from './Cart.action';\r\nimport { catchError } from './Error.action';\r\n\r\nexport const CHECKOUT_SET_SELECTED_COMPANY_ADDRESS = 'CHECKOUT_SET_SELECTED_COMPANY_ADDRESS';\r\nexport const CHECKOUT_SET_CUSTOMER_INFO = 'CHECKOUT_SET_CUSTOMER_INFO';\r\nexport const CHECKOUT_SET_PRIVATE_CUSTOMER = 'CHECKOUT_SET_PRIVATE_CUSTOMER';\r\nexport const CHECKOUT_SET_SIGN_UP = 'CHECKOUT_SET_SIGN_UP';\r\nexport const CHECKOUT_SET_DELIVERY = 'CHECKOUT_SET_DELIVERY';\r\nexport const CHECKOUT_SET_PAYMENT = 'CHECKOUT_SET_PAYMENT';\r\nexport const CHECKOUT_SET_CAMPAIGN_CODE = 'CHECKOUT_SET_CAMPAIGN_CODE';\r\nexport const CHECKOUT_SET_ORDER_NOTE = 'CHECKOUT_SET_ORDER_NOTE';\r\nexport const CHECKOUT_ACCEPT_TERMS_OF_CONDITION = 'CHECKOUT_ACCEPT_TERMS_OF_CONDITION';\r\nexport const CHECKOUT_SUBMIT = 'CHECKOUT_SUBMIT';\r\nexport const CHECKOUT_SUBMIT_DONE = 'CHECKOUT_SUBMIT_DONE';\r\nexport const CHECKOUT_SUBMIT_ERROR = 'CHECKOUT_SUBMIT_ERROR';\r\nexport const CHECKOUT_SET_PAYMENT_WIDGET = 'CHECKOUT_SET_PAYMENT_WIDGET';\r\nexport const CHECKOUT_SET_DELIVERY_METHODS = 'CHECKOUT_SET_DELIVERY_METHODS';\r\n\r\nexport const setBusinessCustomer = (isBusinessCustomer) => ({\r\n type: CHECKOUT_SET_PRIVATE_CUSTOMER,\r\n payload: {\r\n isBusinessCustomer,\r\n }\r\n})\r\n\r\nexport const setSignUp = (signUp) => ({\r\n type: CHECKOUT_SET_SIGN_UP,\r\n payload: {\r\n signUp,\r\n }\r\n})\r\n\r\nexport const setAlternativeAddress = (propName, value) => ({\r\n type: CHECKOUT_SET_CUSTOMER_INFO,\r\n payload: {\r\n key: 'alternativeAddress',\r\n data: {\r\n [propName]: value,\r\n },\r\n }\r\n})\r\n\r\nexport const setCustomerDetails = (propName, value) => ({\r\n type: CHECKOUT_SET_CUSTOMER_INFO,\r\n payload: {\r\n key: 'customerDetails',\r\n data: {\r\n [propName]: value,\r\n },\r\n }\r\n})\r\n\r\nexport const setSelectedCompanyAddress = (selectedCompanyAddressId) => ({\r\n type: CHECKOUT_SET_SELECTED_COMPANY_ADDRESS,\r\n payload: {\r\n selectedCompanyAddressId,\r\n }\r\n})\r\n\r\nexport const setDelivery = (systemId) => (dispatch, getState) => {\r\n dispatch({\r\n type: CHECKOUT_SET_DELIVERY,\r\n payload: {\r\n selectedDeliveryMethod: systemId,\r\n }\r\n });\r\n const { payload } = getState().checkout;\r\n return put('/api/checkout/setDeliveryProvider', payload)\r\n .then(response => response.json())\r\n .then(result => {\r\n dispatch(loadCart());\r\n dispatch(setPaymentWidget(result.paymentWidget));\r\n })\r\n .catch(ex => dispatch(catchError(ex, error => submitError(error))))\r\n}\r\n\r\nexport const setPayment = (systemId) => (dispatch, getState) => {\r\n dispatch(setSelectedPayment(systemId));\r\n const { payload } = getState().checkout;\r\n return put('/api/checkout/setPaymentProvider', payload)\r\n .then(response => response.json())\r\n .then(result => {\r\n dispatch(loadCart());\r\n dispatch(setPaymentWidget(result.paymentWidget));\r\n })\r\n .catch(ex => dispatch(catchError(ex, error => submitError(error))))\r\n}\r\n\r\nexport const reloadPayment = () => (dispatch, getState) => {\r\n const { paymentWidget, selectedPaymentMethod } = getState().checkout.payload;\r\n if (!paymentWidget) {\r\n return;\r\n }\r\n return dispatch(setPayment(selectedPaymentMethod));\r\n}\r\n\r\nconst setPaymentWidget = (paymentWidget) => ({\r\n type: CHECKOUT_SET_PAYMENT_WIDGET,\r\n payload: {\r\n paymentWidget,\r\n }\r\n})\r\n\r\nexport const setSelectedPayment = (systemId) => ({\r\n type: CHECKOUT_SET_PAYMENT,\r\n payload: {\r\n selectedPaymentMethod: systemId,\r\n }\r\n})\r\n\r\nexport const setOrderNote = (orderNote) => ({\r\n type: CHECKOUT_SET_ORDER_NOTE,\r\n payload: {\r\n orderNote,\r\n }\r\n})\r\n\r\nexport const acceptTermsOfCondition = (acceptTermsOfCondition) => ({\r\n type: CHECKOUT_ACCEPT_TERMS_OF_CONDITION,\r\n payload: {\r\n acceptTermsOfCondition,\r\n }\r\n})\r\n\r\nexport const setCampaignCode = (campaignCode) => ({\r\n type: CHECKOUT_SET_CAMPAIGN_CODE,\r\n payload: {\r\n campaignCode,\r\n }\r\n})\r\n\r\nexport const submitCampaignCode = () => (dispatch, getState) => {\r\n const { payload } = getState().checkout;\r\n return put('/api/checkout/setCampaignCode', payload)\r\n .then(response => response.json())\r\n .then(result => {\r\n dispatch(loadCart());\r\n dispatch(setPaymentWidget(result.paymentWidget));\r\n // reset error of campaign code\r\n dispatch(submitError({\r\n modelState: {\r\n 'campaignCode': []\r\n } \r\n }))\r\n })\r\n .catch(ex => {\r\n dispatch(catchError(ex, error => submitError(error)));\r\n // restore the initial cart\r\n //dispatch(loadCart());\r\n })\r\n}\r\nexport const removeCampaignCode = () => (dispatch, getState) => {\r\n const { payload } = getState().checkout;\r\n return put('/api/checkout/removeCampaignCode', payload)\r\n .then(response => response.json())\r\n .then(result => {\r\n dispatch(loadCart());\r\n dispatch(setPaymentWidget(result.paymentWidget));\r\n dispatch(submitError({\r\n modelState: {\r\n 'campaignCode': []\r\n } \r\n }))\r\n })\r\n .catch(ex => {\r\n dispatch(catchError(ex, error => submitError(error)));\r\n })\r\n}\r\n\r\nexport const submit = () => (dispatch, getState) => {\r\n const { payload } = getState().checkout;\r\n const { isRegisterChecked } = getState().northAmerica;\r\n\r\n if (isRegisterChecked === true) {\r\n payload.signUp = isRegisterChecked;\r\n }\r\n return _submit('/api/checkout', payload, dispatch);\r\n}\r\n\r\nexport const verify = (url, orderId, payload) => (dispatch, getState) => {\r\n const model = getState().checkout.payload;\r\n model.orderId = orderId;\r\n model.payload = payload;\r\n return _submit(url, model, dispatch);\r\n}\r\n\r\nconst _submit = (url, model, dispatch) => {\r\n return post(url, model)\r\n .then(response => response.json())\r\n .then(result => {\r\n dispatch(submitDone(result));\r\n return result;\r\n })\r\n .catch(ex => {\r\n if (ex.response) {\r\n ex.response.json().then(error => {\r\n dispatch(submitError(error));\r\n dispatch(submitDone(null));\r\n // reload the cart, it might be changed after validation\r\n dispatch(loadCart());\r\n });\r\n } else {\r\n dispatch(submitError(ex));\r\n }\r\n })\r\n ;\r\n}\r\n\r\nexport const submitRequest = () => ({\r\n type: CHECKOUT_SUBMIT,\r\n payload: {\r\n isSubmitting: true,\r\n errors: [],\r\n },\r\n})\r\n\r\nexport const submitDone = result => ({\r\n type: CHECKOUT_SUBMIT,\r\n payload: {\r\n result,\r\n isSubmitting: false,\r\n },\r\n})\r\n\r\nexport const submitError = error => ({\r\n type: CHECKOUT_SUBMIT_ERROR,\r\n payload: {\r\n error,\r\n },\r\n})\r\n\r\nexport const updateDeliveryCost = () => (dispatch, getState) => {\r\n return fetch('/api/checkout/getDeliveryMethods')\r\n .then(response => response.json())\r\n .then(result => {\r\n dispatch({\r\n type: CHECKOUT_SET_DELIVERY_METHODS,\r\n payload: {\r\n deliveryMethods: result.deliveryMethods,\r\n }\r\n });\r\n dispatch({\r\n type: CHECKOUT_SET_DELIVERY,\r\n payload: {\r\n selectedDeliveryMethod: result.selectedDeliveryMethod,\r\n }\r\n });\r\n })\r\n .catch(ex => dispatch(catchError(ex, error => submitError(error))))\r\n}\r\n","import React from 'react';\r\nimport { translate } from '../Services/translation';\r\n\r\nconst NorthAmericaDeliveryMethods = ({ deliveryMethods, selectedId, onChange, toShippingAddressForm, deliveryCost, deliveryCostText }) => (\r\n <div className=\"checkout-info__container\" id=\"northAmericaDelivery\">\r\n <h3 className=\"checkout__section-title\">{translate('checkout.delivery.title')}</h3>\r\n <div className=\"\">\r\n {deliveryMethods && deliveryMethods.map(method => (\r\n <div className={\"checkout-info__deliveryMethod \" + (method.image && method.image !== \"\" ? \"checkout-info__deliveryMethodImage\" : \"\")} key={method.id}>\r\n <input type=\"radio\" name={method.id} id={method.id} className=\"checkout-info__checkbox-radio\"\r\n value={method.id} checked={method.id === selectedId} onChange={() => onChange(method.id)} />\r\n <label htmlFor={method.id} className=\"checkout-info__label\">\r\n {method.name}\r\n </label>\r\n {method.description && method.description !== \"\" && <p className=\"checkout-info__description\">{method.description}</p>}\r\n <div className=\"checkout-info__price-container\">\r\n {method.totalDeliveryCost < method.price && method.formattedTotalDeliveryCost !== '' ? (\r\n <span className=\"delivery-cost-text\">{method.formattedTotalDeliveryCost}</span>\r\n ) : null}\r\n <p className={`checkout-info__price ${method.totalDeliveryCost < method.price ? 'checkout-info__price--zero-cost' : ''}`}>{method.formattedPrice}</p>\r\n </div>\r\n {method.image && method.image !== \"\" && <img src={method.image}></img>}\r\n </div>\r\n ))}\r\n </div>\r\n <div className=\"northAmerica-button-container\">\r\n <button className=\"northAmerica-button-container__button\" onClick={toShippingAddressForm}>{translate('checkout-delivery-topayment')}</button>\r\n </div>\r\n <div className='checkout-info__arrow'></div>\r\n </div>\r\n)\r\n\r\nexport default NorthAmericaDeliveryMethods;\r\n","import React, { Component, Fragment } from \"react\";\r\nimport { connect } from 'react-redux';\r\nimport Loader from \"../Bahag/Loader\";\r\nimport ErrorModal from \"../NorthAmerica/ErrorModal\";\r\nimport PaymentComponent from \"../Components/Payments/PaymentComponent\";\r\nimport ShippingAddressForm from \"../NorthAmerica/ShippingAddressForm\";\r\nimport NorthAmericaDeliveryMethods from \"../NorthAmerica/NorthAmericaDeliveryMethods\";\r\nimport { showShippingAddressForm } from \"../Actions/NorthAmerica.action\";\r\n\r\n// Initialize Stripe with your publishable key\r\nclass NorthAmericaContainer extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n toLogin: false,\r\n toCustomerInformation: false,\r\n forgetPasswordEmail: \"\",\r\n isPaymentSuccess: false,\r\n paymentError: null,\r\n isProcessing: false,\r\n clientSecret: null,\r\n };\r\n }\r\n\r\n // Render delivery methods section\r\n renderDeliveryMethodsSection() {\r\n const { checkout } = this.props,\r\n { payload, errors = {} } = checkout,\r\n { deliveryMethods } = payload;\r\n const deliveryCostString = this.props.cart.deliveryCost.replace(/[^0-9.-]+/g, \"\");\r\n const deliveryCostNumber = parseFloat(deliveryCostString);\r\n const toShippingAddressForm = () => {\r\n this.setState({ toShippingAddressForm: true, statusFirst: true });\r\n var shippingWidgetTop = document.getElementsByClassName(\"checkout-info__arrow\")[0];\r\n if (shippingWidgetTop) {\r\n if (window.innerWidth > 1023) {\r\n shippingWidgetTop.scrollIntoView({ behavior: \"smooth\", block: \"start\", inline: \"nearest\" });\r\n } else {\r\n const y = shippingWidgetTop.getBoundingClientRect().top + window.pageYOffset - 72;\r\n window.scrollTo({ top: y, behavior: 'smooth' });\r\n }\r\n this.props.showShippingAddressForm(true);\r\n }\r\n };\r\n\r\n return (\r\n <Fragment>\r\n <div>\r\n <NorthAmericaDeliveryMethods deliveryMethods={deliveryMethods} selectedId={payload.selectedDeliveryMethod} onChange={this.props.setDelivery} toShippingAddressForm={toShippingAddressForm} deliveryCost={deliveryCostNumber} deliveryCostText={this.props.cart.deliveryCost} />\r\n {errors['selectedDeliveryMethod'] &&\r\n <span className=\"form__validator--error form__validator--top-narrow\">{errors['selectedDeliveryMethod'][0]}</span>\r\n }\r\n </div>\r\n </Fragment>\r\n );\r\n }\r\n\r\n\r\n renderPaymentSection() {\r\n return (\r\n <Fragment>\r\n <PaymentComponent\r\n stripePublishableKey={stripePublishableKey}\r\n merchantId={stripeMerchantKey}\r\n merchantName={stripeMerchantName}\r\n onPaymentSuccess={this.handlePaymentSuccess}\r\n onPaymentFailure={this.handlePaymentFailure}\r\n checkout={this.props.checkout}\r\n cart={this.props.cart}\r\n />\r\n\r\n {/* Display Payment Success or Error Messages */}\r\n {/*{this.state.isPaymentSuccess && <div>Payment was successful!</div>}*/}\r\n {this.state.paymentError && <div>Error: {this.state.paymentError}</div>}\r\n </Fragment>\r\n );\r\n }\r\n\r\n\r\n renderShippingAddressForm() {\r\n const toPayment = () => {\r\n this.setState({ toCustomerInformation: true, statusFirst: true });\r\n var paymentTop = document.getElementsByClassName(\"northAmerica-checkout-cartArrow\")[0];\r\n if (paymentTop) {\r\n if (window.innerWidth > 1023) {\r\n paymentTop.scrollIntoView({ behavior: \"smooth\", block: \"start\", inline: \"nearest\" });\r\n } else {\r\n const y = paymentTop.getBoundingClientRect().top + window.pageYOffset - 72;\r\n window.scrollTo({ top: y, behavior: 'smooth' });\r\n }\r\n }\r\n };\r\n return (\r\n <>\r\n <div className={!this.props.isShippingAddressFormActive ? \"northAmerica-section--inactive northAmerica-section__container\" : \"northAmerica-section__container\"}>\r\n {<ShippingAddressForm toPayment={toPayment} />}\r\n <div className='northAmerica-checkout-cartArrow'></div>\r\n </div>\r\n </>\r\n );\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n {this.props.isLoaderActive && <Loader />}\r\n {this.props.errorModal && <ErrorModal />}\r\n {this.renderDeliveryMethodsSection()}\r\n {this.renderShippingAddressForm()} {/* Google Pay Button Section */}\r\n {this.renderPaymentSection()} {/* Google Pay Button Section */}\r\n </>\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => ({\r\n showShippingAddressForm: (isActive) => dispatch(showShippingAddressForm(isActive)),\r\n});\r\n\r\nconst mapStateToProps = state => ({\r\n isLoaderActive: state.northAmerica.isLoaderActive,\r\n errorModal: state.northAmerica.errorModal,\r\n isShippingAddressFormActive: state.northAmerica.isShippingAddressFormActive\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NorthAmericaContainer);","import React, { Component, Fragment } from 'react';\r\nimport { translate } from '../Services/translation';\r\nimport { connect } from 'react-redux';\r\n\r\nimport {\r\n acceptTermsOfCondition,\r\n setBusinessCustomer,\r\n setCampaignCode,\r\n setDelivery,\r\n setOrderNote,\r\n submit,\r\n verify,\r\n setCustomerDetails,\r\n setSignUp,\r\n submitError,\r\n submitCampaignCode,\r\n removeCampaignCode,\r\n submitRequest,\r\n submitDone,\r\n reloadPayment,\r\n} from '../Actions/Checkout.action';\r\nimport Cart from '../Components/Cart';\r\n\r\nimport { update as updateOrderRowQuantity } from '../Actions/Cart.action';\r\nimport NorthAmericaContainer from \"../NorthAmerica/NorthAmericaContainer\";\r\nclass CheckoutNorthAmerica extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isMobileOrTablet: window.innerWidth <= 1024\r\n }\r\n this.handleResize = this.handleResize.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('resize', this.handleResize);\r\n\r\n if (!this.props || !this.props.checkout) {\r\n return;\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.handleResize);\r\n }\r\n\r\n handleResize() {\r\n this.setState({ isMobile: window.innerWidth <= 1024 });\r\n }\r\n\r\n renderCartSection() {\r\n const { checkout } = this.props,\r\n { errors = {} } = checkout;\r\n return (\r\n <Fragment>\r\n <Cart {...{\r\n ...this.props.cart,\r\n updateOrderRowQuantity: this.props.updateOrderRowQuantity,\r\n removeOrderRow: this.props.removeOrderRow,\r\n onCampaignCodeChange: this.props.setCampaignCode,\r\n onSubmitCampaignCode: this.props.submitCampaignCode,\r\n onRemoveCampaignCode: this.props.removeCampaignCode,\r\n errors: errors\r\n }} />\r\n </Fragment>\r\n );\r\n }\r\n\r\n renderError(errors) {\r\n return (\r\n <div className=\" \">\r\n {errors && errors['general'] && <p className=\"checkout__validator--error\">{errors['general'][0]}</p>}\r\n </div>\r\n )\r\n }\r\n\r\n renderCartState() {\r\n return (\r\n <div className='checkout__productsList' id=\"northAmerica-cart\">\r\n {this.renderCartSection()}\r\n </div>\r\n )\r\n }\r\n\r\n render() {\r\n const { cart } = this.props;\r\n if (!cart || !cart.orderRows || cart.orderRows.length < 1) {\r\n return (\r\n <div className=\"grid-full-width\">\r\n <h2 className=\"checkout__empty-title\">{translate(`checkout.cart.empty`)}</h2>\r\n </div>\r\n );\r\n }\r\n\r\n const { checkout } = this.props,\r\n { payload, errors = {} } = checkout,\r\n { orderNote, paymentWidget, paymentMethods, authenticated, isBusinessCustomer, checkoutMode } = payload;\r\n\r\n return (\r\n <div className='grid-full-width'>\r\n <Fragment>\r\n <div className=\"northAmerica-checkout--title\">\r\n <h2>{translate('checkout.title')}</h2>\r\n </div>\r\n <Fragment>\r\n {this.renderCartState()}\r\n <NorthAmericaContainer\r\n checkout={this.props.checkout}\r\n cart={this.props.cart}\r\n setDelivery={this.props.setDelivery}\r\n />\r\n {this.renderError(errors)}\r\n </Fragment>\r\n </Fragment>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const { cart, checkout } = state;\r\n return {\r\n cart,\r\n checkout,\r\n }\r\n}\r\n\r\n\r\nconst mapDispatchToProps = dispatch => {\r\n return {\r\n submit: () => dispatch(submit()),\r\n setBusinessCustomer: (value) => dispatch(setBusinessCustomer(value)),\r\n setCampaignCode: (code) => dispatch(setCampaignCode(code)),\r\n setDelivery: (systemId) => dispatch(setDelivery(systemId)),\r\n setOrderNote: (note) => dispatch(setOrderNote(note)),\r\n acceptTermsOfCondition: (accept) => dispatch(acceptTermsOfCondition(accept)),\r\n verify: (url, orderId, payload) => dispatch(verify(url, orderId, payload)),\r\n onSignUpChange: (signUp) => dispatch(setSignUp(signUp)),\r\n submitCampaignCode: () => dispatch(submitCampaignCode()),\r\n removeCampaignCode: () => dispatch(removeCampaignCode()),\r\n submitRequest: () => dispatch(submitRequest()),\r\n submitError: (error) => {\r\n dispatch(submitError(error));\r\n dispatch(submitDone(null));\r\n },\r\n updateOrderRowQuantity: (rowId, quantity) => dispatch(updateOrderRowQuantity(rowId, quantity)).then(() => dispatch(reloadPayment())),\r\n removeOrderRow: (rowId) => dispatch(updateOrderRowQuantity(rowId, 0)).then(() => dispatch(reloadPayment())),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CheckoutNorthAmerica);"],"sourceRoot":""}