Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/template-retail-react-app/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
- [Bugfix] Fix error toast for no applicable shipping methods in one-click checkout [#3673](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3673)
- [Feature] Subscribe to marketing communications. Email capture component updated in footer section to use Shopper Consents API. [#3674](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3674)
- [Bugfix] Fix for custom billing address as returning shoppers in 1CC [#3693](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3693)
- [Feature] Add translations for text in 1CC [#3703](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3703)

## v9.0.0 (Feb 12, 2026)
- [Feature] One Click Checkout (in Developer Preview) [#3552](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3552)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,10 @@ const OrderSummary = ({
</Text>
) : (
<Text fontSize={fontSize} color="gray.700">
TBD
<FormattedMessage
defaultMessage="TBD"
id="order_summary.label.tax_tbd"
/>
</Text>
)}
</Flex>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

import React from 'react'
import PropTypes from 'prop-types'
import {FormattedMessage} from 'react-intl'
import {Box, Stack} from '@salesforce/retail-react-app/app/components/shared/ui'
import CreditCardFields from '@salesforce/retail-react-app/app/components/forms/credit-card-fields'
import Field from '@salesforce/retail-react-app/app/components/field'
Expand All @@ -25,7 +26,12 @@ const AccountPaymentForm = ({form, onSubmit, children}) => {
<CreditCardFields form={form} />
<Field
name="default"
label="Set as default"
label={
<FormattedMessage
defaultMessage="Set as default"
id="account.payments.checkbox.make_default"
/>
}
type="checkbox"
defaultValue={false}
control={form.control}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,8 +443,14 @@ const AccountPayments = () => {
</Text>
<Text color="gray.600">{payment.paymentCard?.holder}</Text>
<Text color="gray.600">
Expires {payment.paymentCard?.expirationMonth}/
{payment.paymentCard?.expirationYear}
<FormattedMessage
defaultMessage="Expires {month}/{year}"
id="account.payments.label.expires"
values={{
month: payment.paymentCard?.expirationMonth,
year: payment.paymentCard?.expirationYear
}}
/>
</Text>
</Stack>
</Stack>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,22 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG

// Validate email format
if (!email) {
setEmailError('Please enter your email address.')
setEmailError(
formatMessage({
defaultMessage: 'Please enter your email address.',
id: 'use_login_fields.error.required_email'
})
)
return
}

if (!isValidEmail(email)) {
setEmailError('Please enter a valid email address.')
setEmailError(
formatMessage({
defaultMessage: 'Please enter a valid email address.',
id: 'use_login_fields.error.invalid_email'
})
)
return
}

Expand Down Expand Up @@ -424,13 +434,23 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG

// Validate email before proceeding
if (!formData.email) {
setError('Please enter your email address.')
setError(
formatMessage({
defaultMessage: 'Please enter your email address.',
id: 'use_login_fields.error.required_email'
})
)
setIsSubmitting(false) // Reset submitting state on validation error
return
}

if (!isValidEmail(formData.email)) {
setError('Please enter a valid email address.')
setError(
formatMessage({
defaultMessage: 'Please enter a valid email address.',
id: 'use_login_fields.error.invalid_email'
})
)
setIsSubmitting(false) // Reset submitting state on validation error
return
}
Expand Down Expand Up @@ -502,7 +522,12 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG

return
} catch (error) {
setError('An error occurred. Please try again.')
setError(
formatMessage({
defaultMessage: 'An error occurred. Please try again.',
id: 'contact_info.error.generic_try_again'
})
)
// Show continue button again if there's an error
setShowContinueButton(true)
setIsSubmitting(false)
Expand All @@ -511,7 +536,12 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
}
// If user is registered, OTP modal should be open, don't proceed to next step
} catch (error) {
setError('An error occurred. Please try again.')
setError(
formatMessage({
defaultMessage: 'An error occurred. Please try again.',
id: 'contact_info.error.generic_try_again'
})
)
} finally {
// Only reset submitting state for registered users (when OTP modal is open)
// Guest users will have already returned above
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"account.payments.checkbox.make_default": [
{
"type": 0,
"value": "Make default"
"value": "Set as default"
}
],
"account.payments.error.payment_method_remove_failed": [
Expand Down Expand Up @@ -77,6 +77,24 @@
"value": "New payment method was saved."
}
],
"account.payments.label.expires": [
{
"type": 0,
"value": "Expires "
},
{
"type": 1,
"value": "month"
},
{
"type": 0,
"value": "/"
},
{
"type": 1,
"value": "year"
}
],
"account.payments.message.error": [
{
"type": 0,
Expand Down Expand Up @@ -1571,6 +1589,12 @@
"value": "Secure Link"
}
],
"contact_info.error.generic_try_again": [
{
"type": 0,
"value": "An error occurred. Please try again."
}
],
"contact_info.error.incorrect_username_or_password": [
{
"type": 0,
Expand Down Expand Up @@ -3119,6 +3143,12 @@
"value": "Tax"
}
],
"order_summary.label.tax_tbd": [
{
"type": 0,
"value": "TBD"
}
],
"otp.button.cancel_guest_registration": [
{
"type": 0,
Expand Down Expand Up @@ -5021,6 +5051,12 @@
"value": "Security Code"
}
],
"use_login_fields.error.invalid_email": [
{
"type": 0,
"value": "Please enter a valid email address."
}
],
"use_login_fields.error.required_email": [
{
"type": 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
"account.payments.checkbox.make_default": [
{
"type": 0,
"value": "Make default"
"value": "Set as default"
}
],
"account.payments.error.payment_method_remove_failed": [
Expand Down Expand Up @@ -77,6 +77,24 @@
"value": "New payment method was saved."
}
],
"account.payments.label.expires": [
{
"type": 0,
"value": "Expires "
},
{
"type": 1,
"value": "month"
},
{
"type": 0,
"value": "/"
},
{
"type": 1,
"value": "year"
}
],
"account.payments.message.error": [
{
"type": 0,
Expand Down Expand Up @@ -1571,6 +1589,12 @@
"value": "Secure Link"
}
],
"contact_info.error.generic_try_again": [
{
"type": 0,
"value": "An error occurred. Please try again."
}
],
"contact_info.error.incorrect_username_or_password": [
{
"type": 0,
Expand Down Expand Up @@ -3119,6 +3143,12 @@
"value": "Tax"
}
],
"order_summary.label.tax_tbd": [
{
"type": 0,
"value": "TBD"
}
],
"otp.button.cancel_guest_registration": [
{
"type": 0,
Expand Down Expand Up @@ -5021,6 +5051,12 @@
"value": "Security Code"
}
],
"use_login_fields.error.invalid_email": [
{
"type": 0,
"value": "Please enter a valid email address."
}
],
"use_login_fields.error.required_email": [
{
"type": 0,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@
},
{
"type": 0,
"value": "Ḿȧȧķḗḗ ḓḗḗƒȧȧŭŭŀŧ"
"value": "Şḗḗŧ ȧȧş ḓḗḗƒȧȧŭŭŀŧ"
},
{
"type": 0,
Expand Down Expand Up @@ -181,6 +181,32 @@
"value": "]"
}
],
"account.payments.label.expires": [
{
"type": 0,
"value": "["
},
{
"type": 0,
"value": "Ḗẋƥīřḗḗş "
},
{
"type": 1,
"value": "month"
},
{
"type": 0,
"value": "/"
},
{
"type": 1,
"value": "year"
},
{
"type": 0,
"value": "]"
}
],
"account.payments.message.error": [
{
"type": 0,
Expand Down Expand Up @@ -3203,6 +3229,20 @@
"value": "]"
}
],
"contact_info.error.generic_try_again": [
{
"type": 0,
"value": "["
},
{
"type": 0,
"value": "Ȧƞ ḗḗřřǿǿř ǿǿƈƈŭŭřřḗḗḓ. Ƥŀḗḗȧȧşḗḗ ŧřẏ ȧȧɠȧȧīƞ."
},
{
"type": 0,
"value": "]"
}
],
"contact_info.error.incorrect_username_or_password": [
{
"type": 0,
Expand Down Expand Up @@ -6567,6 +6607,20 @@
"value": "]"
}
],
"order_summary.label.tax_tbd": [
{
"type": 0,
"value": "["
},
{
"type": 0,
"value": "ŦƁḒ"
},
{
"type": 0,
"value": "]"
}
],
"otp.button.cancel_guest_registration": [
{
"type": 0,
Expand Down Expand Up @@ -10597,6 +10651,20 @@
"value": "]"
}
],
"use_login_fields.error.invalid_email": [
{
"type": 0,
"value": "["
},
{
"type": 0,
"value": "Ƥŀḗḗȧȧşḗḗ ḗḗƞŧḗḗř ȧȧ ṽȧȧŀīḓ ḗḗḿȧȧīŀ ȧȧḓḓřḗḗşş."
},
{
"type": 0,
"value": "]"
}
],
"use_login_fields.error.required_email": [
{
"type": 0,
Expand Down
Loading
Loading