Skip to content

Commit e42e3e3

Browse files
committed
chore(cart): remove redundant gift card code deduplication
Removes client-side duplicate filtering from `cartGiftCardCodesUpdate`. ## What - Remove `uniqueCodes` filtering logic from `cartGiftCardCodeUpdateDefault.ts` ## Why E2E testing confirmed the Storefront API handles duplicate gift card codes gracefully (idempotent behavior). The client-side filtering was redundant overhead that doesn't align with Hydrogen's thin wrapper pattern. This has no observable effect on consumers - the API deduplicates identically.
1 parent 59c479d commit e42e3e3

File tree

2 files changed

+39
-6
lines changed

2 files changed

+39
-6
lines changed

packages/hydrogen/src/cart/queries/cartGiftCardCodeUpdateDefault.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,30 @@ export type CartGiftCardCodesUpdateFunction = (
1616
optionalParams?: CartOptionalInput,
1717
) => Promise<CartQueryDataReturn>;
1818

19+
/**
20+
* Updates (replaces) gift card codes in the cart.
21+
*
22+
* This function no longer filters duplicate codes internally.
23+
* To add codes without replacing, use `cartGiftCardCodesAdd` (API 2025-10+).
24+
*
25+
* @param {CartQueryOptions} options - Cart query options including storefront client and cart fragment.
26+
* @returns {CartGiftCardCodesUpdateFunction} - Function accepting gift card codes array and optional parameters.
27+
*
28+
* @example Replace all gift card codes
29+
* const updateGiftCardCodes = cartGiftCardCodesUpdateDefault({ storefront, getCartId });
30+
* await updateGiftCardCodes(['SUMMER2025', 'WELCOME10']);
31+
*/
1932
export function cartGiftCardCodesUpdateDefault(
2033
options: CartQueryOptions,
2134
): CartGiftCardCodesUpdateFunction {
2235
return async (giftCardCodes, optionalParams) => {
23-
// Ensure the gift card codes are unique
24-
const uniqueCodes = giftCardCodes.filter((value, index, array) => {
25-
return array.indexOf(value) === index;
26-
});
27-
2836
const {cartGiftCardCodesUpdate, errors} = await options.storefront.mutate<{
2937
cartGiftCardCodesUpdate: CartQueryData;
3038
errors: StorefrontApiErrors;
3139
}>(CART_GIFT_CARD_CODE_UPDATE_MUTATION(options.cartFragment), {
3240
variables: {
3341
cartId: options.getCartId(),
34-
giftCardCodes: uniqueCodes,
42+
giftCardCodes,
3543
...optionalParams,
3644
},
3745
});

packages/hydrogen/src/cart/queries/cartGiftCardCodesUpdateDefault.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,29 @@ describe('cartGiftCardCodesUpdateDefault', () => {
2727
expect(result.cart).toHaveProperty('id', CART_ID);
2828
expect(result.userErrors?.[0]).toContain(cartFragment);
2929
});
30+
31+
describe('no duplicate filtering (API 2025-10+)', () => {
32+
it('should pass duplicate codes directly to API without filtering', async () => {
33+
const updateGiftCardCodes = cartGiftCardCodesUpdateDefault({
34+
storefront: mockCreateStorefrontClient(),
35+
getCartId: () => CART_ID,
36+
});
37+
38+
const codesWithDuplicates = ['GIFT123', 'GIFT123', 'WELCOME10'];
39+
const result = await updateGiftCardCodes(codesWithDuplicates);
40+
41+
expect(result.cart).toHaveProperty('id', CART_ID);
42+
});
43+
44+
it('should delegate duplicate handling to API (case-insensitive normalization)', async () => {
45+
const updateGiftCardCodes = cartGiftCardCodesUpdateDefault({
46+
storefront: mockCreateStorefrontClient(),
47+
getCartId: () => CART_ID,
48+
});
49+
50+
const result = await updateGiftCardCodes(['gift123', 'GIFT123']);
51+
52+
expect(result.cart).toHaveProperty('id', CART_ID);
53+
});
54+
});
3055
});

0 commit comments

Comments
 (0)