Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
7d6ddec
fix: adjust billing collection logic
pbennett1-godaddy Aug 19, 2026
2caa59f
add changeset
pbennett1-godaddy Aug 19, 2026
4db2dc6
feat(react): add billing policy resolver
pbennett1-godaddy Aug 19, 2026
a5c1135
test(react): lock billing policy contracts
pbennett1-godaddy Aug 19, 2026
188cf87
feat(react): migrate billing renderers to policy
pbennett1-godaddy Aug 19, 2026
933221c
feat(react): refactor checkout trigger field filtering
pbennett1-godaddy Aug 19, 2026
33207a6
feat(react): add billing policy transition controller
pbennett1-godaddy Aug 19, 2026
111fe18
feat(react): add policy-aware checkout validation adapter
pbennett1-godaddy Aug 19, 2026
8f77713
feat(react): finalize billing policy validation
pbennett1-godaddy Aug 19, 2026
48012b4
biome fix
pbennett1-godaddy Aug 19, 2026
89ab144
do not prevent tax call on zero order after discount
pbennett1-godaddy Aug 19, 2026
222590a
update billing policy for shipping scenarios
pbennett1-godaddy Aug 19, 2026
29664cb
add tax fix for discounts on purchase and digital orders
pbennett1-godaddy Aug 19, 2026
bfb13f8
update billing policy for shipping flags
pbennett1-godaddy Aug 20, 2026
6a7e6c7
adjust changeset
pbennett1-godaddy Aug 20, 2026
3af3471
use consts for billing mode and locations
pbennett1-godaddy Aug 20, 2026
b10a141
add additional billing tests and do not treat null total as free
pbennett1-godaddy Aug 21, 2026
c7c5885
add billing address to stripe payments
pbennett1-godaddy Aug 21, 2026
d845174
adjust sku and order hydration and refetches
pbennett1-godaddy Aug 21, 2026
4057110
always use flushed updated order on checkout
pbennett1-godaddy Aug 21, 2026
f46f8f0
checkout payment flush test for e2e with latest order
pbennett1-godaddy Aug 21, 2026
29c4f33
hydrate contact email from shipping or billing data
pbennett1-godaddy Aug 24, 2026
6da79fb
refetch shipping methods and recalc taxes on coupon application
pbennett1-godaddy Aug 26, 2026
b284c92
add tests and changeset
pbennett1-godaddy Aug 26, 2026
12d9f5b
add reconcileAfterDiscount hook
pbennett1-godaddy Aug 26, 2026
a6da3cc
fix duplicate shipping reconciliation when shipping rates fails or re…
pbennett1-godaddy Aug 26, 2026
b64fff2
bail on shipping and methods if API failure
pbennett1-godaddy Aug 26, 2026
58857d0
keeps the previous shipping selection when discount reconciliation fails
pbennett1-godaddy Aug 26, 2026
52dcd66
Merge main into refetch-shipping-on-coupon-application
pbennett1-godaddy Sep 21, 2026
8a2e568
show retry on shipping method fetch failure
pbennett1-godaddy Sep 21, 2026
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
5 changes: 5 additions & 0 deletions .changeset/calm-coupons-ship.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@godaddy/react": patch
---

Keep shipping rates, discounts, taxes, and express checkout in sync when coupons change.
10 changes: 10 additions & 0 deletions .changeset/clever-clubs-crash.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
"@godaddy/react": patch
---

Fix billing collection across checkout flows.

- Align billing fields and validation for paid, free, pickup, shipping, purchase, and digital orders.
- Respect billing, shipping, phone, and tax collection settings.
- Clear hidden billing addresses when switching to a names-only flow.
- Keep totals and taxes accurate when discounts are applied.
6 changes: 6 additions & 0 deletions .changeset/retry-shipping-rates.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
"@godaddy/react": patch
"@godaddy/localizations": patch
---

Show a localized retry action when shipping rates cannot be loaded. Clear applied shipping when rates cannot be loaded, and apply the refreshed default method after a successful retry.
3 changes: 3 additions & 0 deletions packages/localizations/src/deDe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const deDe = {
noShippingMethodAddress:
'Geben Sie Ihre Adresse ein, um verfügbare Versandmethoden zu sehen.',
noShippingMethods: 'Keine Versandmethoden gefunden.',
failedToLoadMethods:
'Versandarten konnten nicht geladen werden. Bitte versuche es erneut.',
retryMethods: 'Erneut versuchen',
phone: 'Telefonnummer',
country: 'Land',
selectCountry: 'Land auswählen',
Expand Down
2 changes: 2 additions & 0 deletions packages/localizations/src/enAu.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const enAu = {
noShippingMethodAddress:
'Enter your address to see available shipping methods.',
noShippingMethods: 'No shipping methods found.',
failedToLoadMethods: 'Unable to load shipping methods. Please try again.',
retryMethods: 'Try again',
phone: 'Phone Number',
country: 'Country',
selectCountry: 'Select country',
Expand Down
2 changes: 2 additions & 0 deletions packages/localizations/src/enIe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const enIe = {
noShippingMethodAddress:
'Enter your address to see available shipping methods.',
noShippingMethods: 'No shipping methods found.',
failedToLoadMethods: 'Unable to load shipping methods. Please try again.',
retryMethods: 'Try again',
phone: 'Phone Number',
country: 'Country',
selectCountry: 'Select country',
Expand Down
2 changes: 2 additions & 0 deletions packages/localizations/src/enUs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const enUs = {
noShippingMethodAddress:
'Enter your address to see available shipping methods.',
noShippingMethods: 'No shipping methods found.',
failedToLoadMethods: 'Unable to load shipping methods. Please try again.',
retryMethods: 'Try again',
phone: 'Phone Number',
country: 'Country',
selectCountry: 'Select country',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/esAr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const esAr = {
noShippingMethodAddress:
'Ingresá tu dirección para ver los métodos de envío disponibles.',
noShippingMethods: 'No se encontraron métodos de envío.',
failedToLoadMethods:
'No se pudieron cargar los métodos de envío. Inténtalo de nuevo.',
retryMethods: 'Intentar de nuevo',
phone: 'Número de Teléfono',
country: 'País',
selectCountry: 'Seleccionar país',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/esCl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const esCl = {
noShippingMethodAddress:
'Ingresa tu dirección para ver los métodos de envío disponibles.',
noShippingMethods: 'No se encontraron métodos de envío.',
failedToLoadMethods:
'No se pudieron cargar los métodos de envío. Inténtalo de nuevo.',
retryMethods: 'Intentar de nuevo',
phone: 'Número de Teléfono',
country: 'País',
selectCountry: 'Seleccionar país',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/esCo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const esCo = {
noShippingMethodAddress:
'Ingresa tu dirección para ver los métodos de envío disponibles.',
noShippingMethods: 'No se encontraron métodos de envío.',
failedToLoadMethods:
'No se pudieron cargar los métodos de envío. Inténtalo de nuevo.',
retryMethods: 'Intentar de nuevo',
phone: 'Número de teléfono',
country: 'País',
selectCountry: 'Seleccionar país',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/esEs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const esEs = {
noShippingMethodAddress:
'Introduce tu dirección para ver los métodos de envío disponibles.',
noShippingMethods: 'No se encontraron métodos de envío.',
failedToLoadMethods:
'No se pudieron cargar los métodos de envío. Inténtalo de nuevo.',
retryMethods: 'Intentar de nuevo',
phone: 'Número de teléfono',
country: 'País',
selectCountry: 'Seleccionar país',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/esMx.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const esMx = {
noShippingMethodAddress:
'Ingrese su dirección para ver los métodos de envío disponibles.',
noShippingMethods: 'No se encontraron métodos de envío.',
failedToLoadMethods:
'No se pudieron cargar los métodos de envío. Inténtalo de nuevo.',
retryMethods: 'Intentar de nuevo',
phone: 'Número de Teléfono',
country: 'País',
selectCountry: 'Seleccionar país',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/esPe.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const esPe = {
noShippingMethodAddress:
'Ingrese su dirección para ver los métodos de envío disponibles.',
noShippingMethods: 'No se encontraron métodos de envío.',
failedToLoadMethods:
'No se pudieron cargar los métodos de envío. Inténtalo de nuevo.',
retryMethods: 'Intentar de nuevo',
phone: 'Número de Teléfono',
country: 'País',
selectCountry: 'Seleccionar país',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/esUs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const esUs = {
noShippingMethodAddress:
'Ingrese su dirección para ver los métodos de envío disponibles.',
noShippingMethods: 'No se encontraron métodos de envío.',
failedToLoadMethods:
'No se pudieron cargar los métodos de envío. Inténtalo de nuevo.',
retryMethods: 'Intentar de nuevo',
phone: 'Número de Teléfono',
country: 'País',
selectCountry: 'Seleccionar país',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/frCa.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const frCa = {
noShippingMethodAddress:
"Entrez votre adresse pour voir les méthodes d'expédition disponibles.",
noShippingMethods: "Aucune méthode d'expédition trouvée.",
failedToLoadMethods:
'Impossible de charger les modes de livraison. Veuillez réessayer.',
retryMethods: 'Réessayer',
phone: 'Numéro de téléphone',
country: 'Pays',
selectCountry: 'Sélectionner un pays',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/frFr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const frFr = {
noShippingMethodAddress:
'Entrez votre adresse pour voir les méthodes de livraison disponibles.',
noShippingMethods: "Aucune méthode d'expédition trouvée.",
failedToLoadMethods:
'Impossible de charger les modes de livraison. Veuillez réessayer.',
retryMethods: 'Réessayer',
phone: 'Numéro de téléphone',
country: 'Pays',
selectCountry: 'Sélectionner un pays',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/idId.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const idId = {
noShippingMethodAddress:
'Masukkan alamat Anda untuk melihat metode pengiriman yang tersedia.',
noShippingMethods: 'Tidak ada metode pengiriman ditemukan.',
failedToLoadMethods:
'Tidak dapat memuat metode pengiriman. Silakan coba lagi.',
retryMethods: 'Coba lagi',
phone: 'Nomor Telepon',
country: 'Negara',
selectCountry: 'Pilih negara',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/itIt.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const itIt = {
noShippingMethodAddress:
'Inserisci il tuo indirizzo per vedere i metodi di spedizione disponibili.',
noShippingMethods: 'Nessun metodo di spedizione trovato.',
failedToLoadMethods:
'Impossibile caricare i metodi di spedizione. Riprova.',
retryMethods: 'Riprova',
phone: 'Numero di Telefono',
country: 'Paese',
selectCountry: 'Seleziona paese',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/ptBr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const ptBr = {
noShippingMethodAddress:
'Digite seu endereço para ver os métodos de envio disponíveis.',
noShippingMethods: 'Nenhum método de envio encontrado.',
failedToLoadMethods:
'Não foi possível carregar as formas de envio. Tente novamente.',
retryMethods: 'Tentar novamente',
phone: 'Número de Telefone',
country: 'País',
selectCountry: 'Selecionar país',
Expand Down
2 changes: 2 additions & 0 deletions packages/localizations/src/qaPs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ export const qaPs = {
noShippingMethodAddress:
'[Ëñťër ÿöür âddrëšš ťö šëë âvâîlâblë šhîþþîñg mëťhödš fôr ÿöür löçâťîöñ.]',
noShippingMethods: '[Ñö šhîþþîñg mëťhödš föüñd fôr ţhîš löçâţîöñ.]',
failedToLoadMethods: '[Üñâblë ťö löâd šhîþþîñg mëťhödš. Þléâšé ťrÿ âgâîñ.]',
retryMethods: '[Ťrÿ âgâîñ]',
phone: '[Þhöñë Ñümkër Îñförmâťîöñ]',
country: '[Çöüñţrÿ Šëlëçťîöñ]',
selectCountry: '[Šëlëçť çöüñţrÿ frôm lîšť]',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/trTr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const trTr = {
noShippingMethodAddress:
'Mevcut kargo yöntemlerini görmek için adresinizi girin.',
noShippingMethods: 'Kargo yöntemi bulunamadı.',
failedToLoadMethods:
'Gönderim yöntemleri yüklenemedi. Lütfen tekrar deneyin.',
retryMethods: 'Tekrar dene',
phone: 'Telefon Numarası',
country: 'Ülke',
selectCountry: 'Ülke seçin',
Expand Down
3 changes: 3 additions & 0 deletions packages/localizations/src/viVn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ export const viVn = {
noShippingMethodAddress:
'Nhập địa chỉ của bạn để xem các phương thức vận chuyển có sẵn.',
noShippingMethods: 'Không tìm thấy phương thức vận chuyển nào.',
failedToLoadMethods:
'Không thể tải phương thức vận chuyển. Vui lòng thử lại.',
retryMethods: 'Thử lại',
phone: 'Số điện thoại',
country: 'Quốc gia',
selectCountry: 'Chọn quốc gia',
Expand Down
2 changes: 2 additions & 0 deletions packages/localizations/src/zhCn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export const zhCn = {
method: '配送方式',
noShippingMethodAddress: '请输入您的地址以查看可用的配送方式。',
noShippingMethods: '未找到配送方式。',
failedToLoadMethods: '无法加载配送方式。请重试。',
retryMethods: '重试',
phone: '手机号码',
country: '国家',
selectCountry: '选择国家',
Expand Down
2 changes: 2 additions & 0 deletions packages/localizations/src/zhSg.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export const zhSg = {
method: '运送方式',
noShippingMethodAddress: '输入您的地址以查看可用的运送方式。',
noShippingMethods: '未找到运送方式。',
failedToLoadMethods: '无法加载配送方式。请重试。',
retryMethods: '重试',
phone: '电话号码',
country: '国家',
selectCountry: '选择国家',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { fireEvent, screen, waitFor } from '@testing-library/react';
import { act, fireEvent, screen, waitFor } from '@testing-library/react';
import { useState } from 'react';
import { useFormContext } from 'react-hook-form';
import { describe, expect, it } from 'vitest';
Expand All @@ -9,6 +9,7 @@ import {
PaymentProvider,
useConfirmCheckout,
} from '@/components/checkout/payment/utils/use-confirm-checkout';
import { checkoutQueryKeys } from '@/components/checkout/utils/query-keys';
import { GraphQLErrorWithCodes } from '@/lib/graphql-with-errors';
import {
buildCheckoutSession,
Expand Down Expand Up @@ -508,7 +509,7 @@ describe('Checkout confirm errors', () => {
const draftOrder = buildDraftOrder({ shippingLines: [] });
const session = buildCheckoutSession({ draftOrder });

const { user } = renderCheckout({
const { user, queryClient } = renderCheckout({
session,
draftOrder,
checkoutProps: {
Expand All @@ -521,6 +522,20 @@ describe('Checkout confirm errors', () => {
});
await waitForCheckoutReady();
clearOperations();
setApiError('getDraftOrderShippingMethods', 'rates failed');
await act(async () => {
await queryClient.refetchQueries({
queryKey: checkoutQueryKeys.draftOrderShippingMethods(session.id),
});
});
expect(
queryClient
.getQueryCache()
.findAll({
queryKey: checkoutQueryKeys.draftOrderShippingMethods(session.id),
})
.some(query => query.state.status === 'error')
).toBe(true);

await user.click(
await screen.findByRole('button', { name: /express confirm seam/i })
Expand Down
Loading
Loading