@@ -722,7 +823,8 @@ export default function OrderForm({
{selectedProduct.variations?.map((variation) => {
const variationLabel = Object.entries(variation.attributes)
- .map(([key, value]) => `${key}: ${value}`)
+ .map(([key, value]) => `${key}: ${value || ''}`)
+ .filter(([_, value]) => value) // Remove empty values
.join(', ');
return (
@@ -730,22 +832,36 @@ export default function OrderForm({
key={variation.id}
type="button"
onClick={() => {
- // Add variation as separate cart item
- setItems(prev => [
- ...prev,
- {
- product_id: selectedProduct.id,
- variation_id: variation.id,
- name: selectedProduct.name,
- variation_name: variationLabel,
- price: variation.price,
- regular_price: variation.regular_price,
- sale_price: variation.sale_price,
- qty: 1,
- virtual: selectedProduct.virtual,
- downloadable: selectedProduct.downloadable,
- }
- ]);
+ // Check if this product+variation already exists
+ const existingIndex = items.findIndex(
+ item => item.product_id === selectedProduct.id && item.variation_id === variation.id
+ );
+
+ if (existingIndex !== -1) {
+ // Increment quantity of existing item
+ setItems(prev => prev.map((item, idx) =>
+ idx === existingIndex
+ ? { ...item, qty: item.qty + 1 }
+ : item
+ ));
+ } else {
+ // Add new cart item
+ setItems(prev => [
+ ...prev,
+ {
+ product_id: selectedProduct.id,
+ variation_id: variation.id,
+ name: selectedProduct.name,
+ variation_name: variationLabel,
+ price: variation.price,
+ regular_price: variation.regular_price,
+ sale_price: variation.sale_price,
+ qty: 1,
+ virtual: selectedProduct.virtual,
+ downloadable: selectedProduct.downloadable,
+ }
+ ]);
+ }
setShowVariationDrawer(false);
setSelectedProduct(null);
setSearchQ('');
diff --git a/admin-spa/src/routes/Products/index.tsx b/admin-spa/src/routes/Products/index.tsx
index 643cc01..cf18350 100644
--- a/admin-spa/src/routes/Products/index.tsx
+++ b/admin-spa/src/routes/Products/index.tsx
@@ -247,7 +247,8 @@ export default function Products() {
-
+
+
{/* Status Filter */}