diff --git a/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.jsx b/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.jsx
index b9daf566c6..92d6113d0d 100644
--- a/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.jsx
+++ b/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.jsx
@@ -112,7 +112,7 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
const [isCheckingEmail, setIsCheckingEmail] = useState(false)
const [isSubmitting, setIsSubmitting] = useState(false)
const [isBlurChecking, setIsBlurChecking] = useState(false)
- const [, setRegisteredUserChoseGuest] = useState(false)
+ const [registeredUserChoseGuest, setRegisteredUserChoseGuest] = useState(false)
const [emailError, setEmailError] = useState('')
// Auto-focus the email field when the component mounts
@@ -244,8 +244,15 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
lastEmailSentRef.current = normalizedEmail
return {isRegistered: true}
} catch (error) {
- const message = formatMessage(getPasswordlessErrorMessage(error.message))
- setError(message)
+ const errMsg = error?.message || ''
+ const isUserNotFound =
+ /user not found|email not found|unknown user|no account|no user|error getting user info/i.test(
+ errMsg
+ )
+ if (!isUserNotFound) {
+ const message = formatMessage(getPasswordlessErrorMessage(errMsg))
+ setError(message)
+ }
// Keep continue button visible if email is valid (for unregistered users)
if (isValidEmail(email)) {
setShowContinueButton(true)
@@ -272,37 +279,10 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
}
// Handle checkout as guest from OTP modal
- const handleCheckoutAsGuest = async () => {
- try {
- const email = form.getValues('email')
- const phone = form.getValues('phone')
- // Update basket with guest email
- await updateCustomerForBasket.mutateAsync({
- parameters: {basketId: basket.basketId},
- body: {email: email}
- })
-
- // Save phone number to basket billing address for guest shoppers
- if (phone) {
- await updateBillingAddressForBasket.mutateAsync({
- parameters: {basketId: basket.basketId},
- body: {
- ...basket?.billingAddress,
- phone: phone
- }
- })
- }
-
- // Set the flag that "Checkout as Guest" was clicked
- setRegisteredUserChoseGuest(true)
- if (onRegisteredUserChoseGuest) {
- onRegisteredUserChoseGuest(true)
- }
-
- // Proceed to next step (shipping address)
- goToNextStep()
- } catch (error) {
- setError(error.message)
+ const handleCheckoutAsGuest = () => {
+ setRegisteredUserChoseGuest(true)
+ if (onRegisteredUserChoseGuest) {
+ onRegisteredUserChoseGuest(true)
}
}
@@ -472,7 +452,7 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
return
}
- if (!result.isRegistered) {
+ if (!result.isRegistered || registeredUserChoseGuest) {
// Guest shoppers must provide phone number before proceeding
const phone = (formData.phone || '').trim()
if (!phone) {
diff --git a/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.test.js b/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.test.js
index 0a2ee05fee..586b0f8ae1 100644
--- a/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.test.js
+++ b/packages/template-retail-react-app/app/pages/checkout-one-click/partials/one-click-contact-info.test.js
@@ -110,13 +110,17 @@ jest.mock('@salesforce/retail-react-app/app/hooks/use-multi-site', () => ({
// Mock OtpAuth to expose a verify trigger
jest.mock('@salesforce/retail-react-app/app/components/otp-auth', () => {
// eslint-disable-next-line react/prop-types
- return function MockOtpAuth({isOpen, handleOtpVerification, onCheckoutAsGuest}) {
+ return function MockOtpAuth({isOpen, handleOtpVerification, onCheckoutAsGuest, onClose}) {
+ const handleGuestClick = () => {
+ onCheckoutAsGuest?.()
+ onClose?.()
+ }
return isOpen ? (
Confirm it's you
To log in to your account, enter the code sent to your email.
-