Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | 6x 6x 6x 9x 9x 9x 3x 8x 6x 5x 6x 6x 17x 7x 7x 10x 6x 2x 4x 4x 6x 6x 4x | import { Address, Cart, Consignment } from '@bigcommerce/checkout-sdk'; import { isEqualAddress } from '../address'; import findConsignment from './findConsignment'; import ShippableItem from './ShippableItem'; export interface UpdateItemParams { updatedItemIndex: number; address: Address; } export default function updateShippableItems( items: ShippableItem[], { updatedItemIndex, address }: UpdateItemParams, { cart, consignments }: { cart?: Cart; consignments?: Consignment[] } ): ShippableItem[] | undefined { if (updatedItemIndex < 0 || updatedItemIndex >= items.length || !cart) { return; } const cartItemIds = cart.lineItems.physicalItems.map(({ id }) => id); const updatedConsignment = (consignments || []).find(consignment => isEqualAddress(consignment.shippingAddress, address) ); const newId = findNewItemId(items[updatedItemIndex], cart, updatedConsignment); return items.map((item, i) => { if (newId && !cartItemIds.includes(item.id) || i === updatedItemIndex) { const itemId = newId ?? item.id; return { ...item, id: itemId, consignment: findConsignment(consignments || [], itemId as string), }; } else { return item; } }); } function findNewItemId(item: ShippableItem, cart?: Cart, consignment?: Consignment): string | undefined { if (!cart || !consignment) { return; } const { physicalItems } = cart.lineItems; const matchingCartItems = physicalItems.filter( ({ productId, variantId }) => productId === item.productId && variantId === item.variantId ); const matchingCartItemIds = matchingCartItems.map(({ id }) => id); return consignment.lineItemIds.find(id => matchingCartItemIds.includes(id)); } |