From 6821b4e8d99f0207bc940e9e103a180fff8e4d4b Mon Sep 17 00:00:00 2001 From: DanielS Date: Fri, 10 Jul 2026 00:20:32 +0200 Subject: [PATCH] fix: group success page order items by device name --- shop/app/order/success/page.tsx | 47 ++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/shop/app/order/success/page.tsx b/shop/app/order/success/page.tsx index 7eef6c5..6f57f86 100644 --- a/shop/app/order/success/page.tsx +++ b/shop/app/order/success/page.tsx @@ -49,6 +49,14 @@ export default async function OrderSuccessPage({ const o = order as Order const items = o.order_data?.items ?? [] + const groupedItems: Record = {} + items.forEach(item => { + const devName = item.device_name || 'Kasse 1' + if (!groupedItems[devName]) { + groupedItems[devName] = [] + } + groupedItems[devName].push(item) + }) const taxRate = o.order_data?.tax_rate ?? 19 const oneTimeItems = items.filter((item) => item.billing_interval === 'one_time') @@ -105,23 +113,30 @@ export default async function OrderSuccessPage({ - {/* Produkte */} -
- {items.map((item) => ( -
-
- {item.product_name} - - {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(item.base_price)} - - {item.billing_interval === 'one_time' ? 'einmalig' : '/ Monat'} - - + {/* Produkte gruppiert nach Gerät */} +
+ {Object.entries(groupedItems).map(([deviceName, devItems]) => ( +
+
+ Gerät: {deviceName}
- {item.selected_modules.map((mod) => ( -
- + {mod.module_name} - {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(mod.price)} + {devItems.map((item) => ( +
+
+ {item.product_name} + + {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(item.base_price)} + + {item.billing_interval === 'one_time' ? 'einmalig' : '/ Monat'} + + +
+ {item.selected_modules.map((mod) => ( +
+ + {mod.module_name} + {new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(mod.price)} +
+ ))}
))}