Skip to main content

Select a Variation

Learn how to validate variation selections, resolve the correct child product using the variation matrix, and add it to cart with proper error handling.

Selection Flow​

1. Validate All Options Selected​

Before resolving a child product, ensure all variations have selections:

function validateSelections(
selectedOptions: Record<string, string>,
variations: Variation[]
): { isValid: boolean; missing: string[] } {
const missing = variations
.filter(v => !selectedOptions[v.id])
.map(v => v.name);

return {
isValid: missing.length === 0,
missing
};
}

// Example usage
const validation = validateSelections(selectedOptions, variations);
if (!validation.isValid) {
return { error: `Please select: ${validation.missing.join(', ')}` };
}

2. Resolve Child Product​

Use the variation matrix to find the child product ID:

import { getSkuIdFromOptions } from '@/utils/product-helper';

// Collect selected option IDs in order
const optionIds = Object.values(selectedOptions);

// Look up child product ID
const childId = getSkuIdFromOptions(optionIds, variationMatrix);

if (!childId) {
return { error: 'This combination is not available' };
}
info

See Understanding the Variation Matrix for the getSkuIdFromOptions implementation.

3. Add to Cart​

Add the resolved child product to cart using the SDK:

import { manageCarts, getCartId } from '@epcc-sdk/sdks-shopper';

const cartId = getCartId();

await manageCarts({
path: { cartID: cartId },
body: {
data: {
type: 'cart_item',
id: childId, // Must be child product ID, not parent!
quantity: 1
}
}
});

Key Points​

  • Validate first - Check all options are selected before lookup
  • Child ID only - Never attempt to add parent product to cart
  • Handle errors - Invalid combinations and out of stock scenarios
  • Loading states - Show feedback during async operations
  • Inventory checks - Optional but recommended for better UX

Next Steps​

With selection implemented:

References​

Ask External AI