@salesforce/retail-react-app 9.0.0-preview.1 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,16 +1,13 @@
1
- ## v9.0.0-preview.1 (Feb 09, 2026)
2
- - [Bugfix] 1CC Bug Fixes [#3638](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3638)
3
-
4
- ## v9.0.0-preview.0 (Feb 06, 2026)
5
- - [Feature] One Click Checkout [#3552](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3552)
1
+ ## v9.0.0 (Feb 12, 2026)
2
+ - [Feature] One Click Checkout (in Developer Preview) [#3552](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3552)
6
3
  - [Feature] Add `fuzzyPathMatching` to reduce computational overhead of route generation at time of application load [#3530](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3530)
7
4
  - [Bugfix] Fix Passwordless Login landingPath, Reset Password landingPath, and Social Login redirectUri value in config not being used [#3560](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3560)
8
5
  - [Feature] PWA Integration with OMS
9
6
  - Integrate Order Details page to display orders data from OMS [#3573](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3573)
10
7
  - Integrate Order History page to display data from OMS [#3581](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3581)
11
8
  - Add shipping display support for OMS [#3588](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3588)
12
- - BOPIS multishipment with OMS [#3613] (https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3613)
13
- - Default to ECOM shipments in case OMS has no shipments [#3639] (https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3639)
9
+ - BOPIS multishipment with OMS [#3613](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3613)
10
+ - Default to ECOM shipments in case OMS has no shipments [#3639](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3639)
14
11
  - [Feature] Update passwordless login and password reset to use email mode by default. The mode can now be configured across the login page, auth modal, and checkout page [#3525](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3525)
15
12
  - Update "Continue Securely" button text to "Continue" for passwordless login [#3556](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3556)
16
13
  - Util function for passwordless callback URI [#3630](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3630)
@@ -254,7 +254,6 @@ describe('OtpAuth', () => {
254
254
  })
255
255
  const mockVerify = jest.fn().mockReturnValue(verifyingPromise)
256
256
 
257
- const user = userEvent.setup()
258
257
  renderWithProviders(
259
258
  <OtpAuth
260
259
  isOpen={true}
@@ -20,7 +20,7 @@ const PasswordlessLogin = ({
20
20
  handlePasswordlessLoginClick,
21
21
  isSocialEnabled = false,
22
22
  idps = [],
23
- setLoginType = noop
23
+ setLoginType: _setLoginType = noop
24
24
  }) => {
25
25
  const [showPasswordView, setShowPasswordView] = useState(false)
26
26
 
@@ -751,11 +751,6 @@ describe('Checkout One Click', () => {
751
751
  })
752
752
  ).toBeInTheDocument()
753
753
 
754
- // Billing address should default to the shipping address
755
-
756
- // Should display billing address that matches shipping address
757
- expect(step3Content.getByText('123 Main St')).toBeInTheDocument()
758
-
759
754
  // Edit billing address
760
755
  // Toggle to edit billing address (not via same-as-shipping label in this flow)
761
756
  // Click the checkbox by role if present; otherwise skip
@@ -1208,10 +1203,6 @@ describe('Checkout One Click', () => {
1208
1203
  })
1209
1204
  ).toBeInTheDocument()
1210
1205
 
1211
- // Verify billing address is displayed (it shows John Smith from the mock)
1212
- expect(step3Content.getByText('John Smith')).toBeInTheDocument()
1213
- expect(step3Content.getByText('123 Main St')).toBeInTheDocument()
1214
-
1215
1206
  // Verify UserRegistration component is hidden for registered customers
1216
1207
  expect(screen.queryByTestId('sf-user-registration-content')).not.toBeInTheDocument()
1217
1208
 
@@ -2650,7 +2641,7 @@ describe('Checkout One Click', () => {
2650
2641
 
2651
2642
  // Click "Edit Payment Info" button
2652
2643
  const editPaymentButton = screen.getByRole('button', {
2653
- name: /toggle_card.action.editPaymentInfo|Edit Payment Info/i
2644
+ name: /toggle_card.action.changePaymentInfo|Change/i
2654
2645
  })
2655
2646
  await user.click(editPaymentButton)
2656
2647
 
@@ -245,11 +245,19 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
245
245
  lastEmailSentRef.current = normalizedEmail
246
246
  return {isRegistered: true}
247
247
  } catch (error) {
248
- const message = formatMessage(getAuthorizePasswordlessErrorMessage(error.message))
249
- setError(message)
250
- // Keep continue button visible if email is valid (for unregistered users)
251
- if (isValidEmail(email)) {
248
+ // 404 = email not registered (guest); treat as guest and continue
249
+ const isGuestNotFound = String(error?.message || '').includes('404')
250
+ if (isGuestNotFound && isValidEmail(email)) {
251
+ setError('')
252
252
  setShowContinueButton(true)
253
+ } else {
254
+ const message = formatMessage(
255
+ getAuthorizePasswordlessErrorMessage(error.message)
256
+ )
257
+ setError(message)
258
+ if (isValidEmail(email)) {
259
+ setShowContinueButton(true)
260
+ }
253
261
  }
254
262
  // Update the last email sent ref even on error to prevent retrying immediately
255
263
  lastEmailSentRef.current = normalizedEmail
@@ -512,6 +520,9 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
512
520
  }
513
521
  }
514
522
 
523
+ const customerEmail = customer?.email || form.getValues('email')
524
+ const customerPhone = customer?.phoneHome || form.getValues('phone')
525
+
515
526
  return (
516
527
  <>
517
528
  <ToggleCard
@@ -535,8 +546,8 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
535
546
  id: 'checkout_contact_info.action.sign_out'
536
547
  })
537
548
  : formatMessage({
538
- defaultMessage: 'Edit',
539
- id: 'checkout_contact_info.action.edit'
549
+ defaultMessage: 'Change',
550
+ id: 'checkout_contact_info.action.change'
540
551
  })
541
552
  }
542
553
  >
@@ -666,18 +677,14 @@ const ContactInfo = ({isSocialEnabled = false, idps = [], onRegisteredUserChoseG
666
677
  </Container>
667
678
  </ToggleCardEdit>
668
679
 
669
- {(customer?.email || form.getValues('email')) && (
680
+ {customerEmail ? (
670
681
  <ToggleCardSummary>
671
682
  <Stack spacing={1}>
672
- <Text>{customer?.email || form.getValues('email')}</Text>
673
- {(customer?.phoneHome || form.getValues('phone')) && (
674
- <Text fontSize="sm" color="gray.600">
675
- {customer?.phoneHome || form.getValues('phone')}
676
- </Text>
677
- )}
683
+ <Text>{customerEmail}</Text>
684
+ {customerPhone && <Text>{customerPhone}</Text>}
678
685
  </Stack>
679
686
  </ToggleCardSummary>
680
- )}
687
+ ) : null}
681
688
  </ToggleCard>
682
689
 
683
690
  {/* Sign Out Confirmation Dialog */}
@@ -441,8 +441,8 @@ const Payment = ({
441
441
  disabled={appliedPayment == null}
442
442
  onEdit={handleEditPayment}
443
443
  editLabel={formatMessage({
444
- defaultMessage: 'Edit Payment Info',
445
- id: 'toggle_card.action.editPaymentInfo'
444
+ defaultMessage: 'Change',
445
+ id: 'toggle_card.action.changePaymentInfo'
446
446
  })}
447
447
  >
448
448
  <ToggleCardEdit>
@@ -580,8 +580,7 @@ const Payment = ({
580
580
 
581
581
  <Divider borderColor="gray.100" />
582
582
 
583
- {(selectedBillingAddress ||
584
- (effectiveBillingSameAsShipping && selectedShippingAddress)) && (
583
+ {selectedBillingAddress && !effectiveBillingSameAsShipping && (
585
584
  <Stack spacing={2}>
586
585
  <Heading as="h3" fontSize="md">
587
586
  <FormattedMessage
@@ -589,9 +588,7 @@ const Payment = ({
589
588
  id="checkout_payment.heading.billing_address"
590
589
  />
591
590
  </Heading>
592
- <AddressDisplay
593
- address={selectedBillingAddress || selectedShippingAddress}
594
- />
591
+ <AddressDisplay address={selectedBillingAddress} />
595
592
  </Stack>
596
593
  )}
597
594
 
@@ -1310,7 +1310,7 @@ describe('Payment Component', () => {
1310
1310
  // Click Edit Payment Info to enter edit mode
1311
1311
  const summary = screen.getAllByTestId('toggle-card-summary').pop()
1312
1312
  const editButton = within(summary).getByRole('button', {
1313
- name: /toggle_card.action.editPaymentInfo|Edit Payment Info/i
1313
+ name: /toggle_card.action.changePaymentInfo|Change/i
1314
1314
  })
1315
1315
  await user.click(editButton)
1316
1316
 
@@ -266,8 +266,8 @@ export default function ShippingOptions() {
266
266
  }
267
267
  onEdit={() => goToStep(STEPS.SHIPPING_OPTIONS)}
268
268
  editLabel={formatMessage({
269
- defaultMessage: 'Edit Shipping Options',
270
- id: 'toggle_card.action.editShippingOptions'
269
+ defaultMessage: 'Change',
270
+ id: 'toggle_card.action.changeShippingOptions'
271
271
  })}
272
272
  >
273
273
  <ToggleCardEdit>
@@ -1249,10 +1249,10 @@
1249
1249
  "value": " with your confirmation number and receipt shortly."
1250
1250
  }
1251
1251
  ],
1252
- "checkout_contact_info.action.edit": [
1252
+ "checkout_contact_info.action.change": [
1253
1253
  {
1254
1254
  "type": 0,
1255
- "value": "Edit"
1255
+ "value": "Change"
1256
1256
  }
1257
1257
  ],
1258
1258
  "checkout_contact_info.action.sign_out": [
@@ -4681,6 +4681,18 @@
4681
4681
  "value": "Change"
4682
4682
  }
4683
4683
  ],
4684
+ "toggle_card.action.changePaymentInfo": [
4685
+ {
4686
+ "type": 0,
4687
+ "value": "Change"
4688
+ }
4689
+ ],
4690
+ "toggle_card.action.changeShippingOptions": [
4691
+ {
4692
+ "type": 0,
4693
+ "value": "Change"
4694
+ }
4695
+ ],
4684
4696
  "toggle_card.action.edit": [
4685
4697
  {
4686
4698
  "type": 0,
@@ -1249,10 +1249,10 @@
1249
1249
  "value": " with your confirmation number and receipt shortly."
1250
1250
  }
1251
1251
  ],
1252
- "checkout_contact_info.action.edit": [
1252
+ "checkout_contact_info.action.change": [
1253
1253
  {
1254
1254
  "type": 0,
1255
- "value": "Edit"
1255
+ "value": "Change"
1256
1256
  }
1257
1257
  ],
1258
1258
  "checkout_contact_info.action.sign_out": [
@@ -4681,6 +4681,18 @@
4681
4681
  "value": "Change"
4682
4682
  }
4683
4683
  ],
4684
+ "toggle_card.action.changePaymentInfo": [
4685
+ {
4686
+ "type": 0,
4687
+ "value": "Change"
4688
+ }
4689
+ ],
4690
+ "toggle_card.action.changeShippingOptions": [
4691
+ {
4692
+ "type": 0,
4693
+ "value": "Change"
4694
+ }
4695
+ ],
4684
4696
  "toggle_card.action.edit": [
4685
4697
  {
4686
4698
  "type": 0,
@@ -2473,14 +2473,14 @@
2473
2473
  "value": "]"
2474
2474
  }
2475
2475
  ],
2476
- "checkout_contact_info.action.edit": [
2476
+ "checkout_contact_info.action.change": [
2477
2477
  {
2478
2478
  "type": 0,
2479
2479
  "value": "["
2480
2480
  },
2481
2481
  {
2482
2482
  "type": 0,
2483
- "value": "Ḗḓīŧ"
2483
+ "value": "Ƈħȧȧƞɠḗḗ"
2484
2484
  },
2485
2485
  {
2486
2486
  "type": 0,
@@ -9841,6 +9841,34 @@
9841
9841
  "value": "]"
9842
9842
  }
9843
9843
  ],
9844
+ "toggle_card.action.changePaymentInfo": [
9845
+ {
9846
+ "type": 0,
9847
+ "value": "["
9848
+ },
9849
+ {
9850
+ "type": 0,
9851
+ "value": "Ƈħȧȧƞɠḗḗ"
9852
+ },
9853
+ {
9854
+ "type": 0,
9855
+ "value": "]"
9856
+ }
9857
+ ],
9858
+ "toggle_card.action.changeShippingOptions": [
9859
+ {
9860
+ "type": 0,
9861
+ "value": "["
9862
+ },
9863
+ {
9864
+ "type": 0,
9865
+ "value": "Ƈħȧȧƞɠḗḗ"
9866
+ },
9867
+ {
9868
+ "type": 0,
9869
+ "value": "]"
9870
+ }
9871
+ ],
9844
9872
  "toggle_card.action.edit": [
9845
9873
  {
9846
9874
  "type": 0,
package/config/default.js CHANGED
@@ -74,6 +74,9 @@ module.exports = {
74
74
  appSourceId: '7ae070a6-f4ec-4def-a383-d9cacc3f20a1',
75
75
  tenantId: 'g82wgnrvm-ywk9dggrrw8mtggy.pc-rnd'
76
76
  },
77
+ // Note: this feature is in Developer Preview at this time. To use One Click Checkout,
78
+ // enable the oneClickCheckout flag and configure private SLAS client. For more details, please
79
+ // check https://github.com/SalesforceCommerceCloud/pwa-kit/releases/tag/v3.16.0
77
80
  oneClickCheckout: {
78
81
  enabled: false
79
82
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/retail-react-app",
3
- "version": "9.0.0-preview.1",
3
+ "version": "9.0.0",
4
4
  "license": "See license in LICENSE",
5
5
  "author": "cc-pwa-kit@salesforce.com",
6
6
  "ccExtensibility": {
@@ -46,10 +46,10 @@
46
46
  "@loadable/component": "^5.15.3",
47
47
  "@peculiar/webcrypto": "^1.4.2",
48
48
  "@salesforce/cc-datacloud-typescript": "1.1.2",
49
- "@salesforce/commerce-sdk-react": "5.0.0-preview.1",
50
- "@salesforce/pwa-kit-dev": "3.16.0-preview.1",
51
- "@salesforce/pwa-kit-react-sdk": "3.16.0-preview.1",
52
- "@salesforce/pwa-kit-runtime": "3.16.0-preview.1",
49
+ "@salesforce/commerce-sdk-react": "5.0.0",
50
+ "@salesforce/pwa-kit-dev": "3.16.0",
51
+ "@salesforce/pwa-kit-react-sdk": "3.16.0",
52
+ "@salesforce/pwa-kit-runtime": "3.16.0",
53
53
  "@tanstack/react-query": "^4.28.0",
54
54
  "@tanstack/react-query-devtools": "^4.29.1",
55
55
  "@testing-library/dom": "^9.0.1",
@@ -108,5 +108,5 @@
108
108
  "maxSize": "366 kB"
109
109
  }
110
110
  ],
111
- "gitHead": "4401444aab376bf9091cda08d636702556c48323"
111
+ "gitHead": "6c5fadd745fbd4f666d0887f45d01719e86b3ead"
112
112
  }
@@ -460,8 +460,8 @@
460
460
  "checkout_confirmation.message.will_email_shortly": {
461
461
  "defaultMessage": "We will send an email to <b>{email}</b> with your confirmation number and receipt shortly."
462
462
  },
463
- "checkout_contact_info.action.edit": {
464
- "defaultMessage": "Edit"
463
+ "checkout_contact_info.action.change": {
464
+ "defaultMessage": "Change"
465
465
  },
466
466
  "checkout_contact_info.action.sign_out": {
467
467
  "defaultMessage": "Sign Out"
@@ -1949,6 +1949,12 @@
1949
1949
  "toggle_card.action.change": {
1950
1950
  "defaultMessage": "Change"
1951
1951
  },
1952
+ "toggle_card.action.changePaymentInfo": {
1953
+ "defaultMessage": "Change"
1954
+ },
1955
+ "toggle_card.action.changeShippingOptions": {
1956
+ "defaultMessage": "Change"
1957
+ },
1952
1958
  "toggle_card.action.edit": {
1953
1959
  "defaultMessage": "Edit"
1954
1960
  },
@@ -460,8 +460,8 @@
460
460
  "checkout_confirmation.message.will_email_shortly": {
461
461
  "defaultMessage": "We will send an email to <b>{email}</b> with your confirmation number and receipt shortly."
462
462
  },
463
- "checkout_contact_info.action.edit": {
464
- "defaultMessage": "Edit"
463
+ "checkout_contact_info.action.change": {
464
+ "defaultMessage": "Change"
465
465
  },
466
466
  "checkout_contact_info.action.sign_out": {
467
467
  "defaultMessage": "Sign Out"
@@ -1949,6 +1949,12 @@
1949
1949
  "toggle_card.action.change": {
1950
1950
  "defaultMessage": "Change"
1951
1951
  },
1952
+ "toggle_card.action.changePaymentInfo": {
1953
+ "defaultMessage": "Change"
1954
+ },
1955
+ "toggle_card.action.changeShippingOptions": {
1956
+ "defaultMessage": "Change"
1957
+ },
1952
1958
  "toggle_card.action.edit": {
1953
1959
  "defaultMessage": "Edit"
1954
1960
  },