feat: reconstruct multiple devices from initialOrder items into basketItems for editing
All checks were successful
Staging Build / build (push) Successful in 2m47s

This commit is contained in:
DanielS
2026-07-10 01:10:39 +02:00
parent 4fa2daf212
commit 2f92213594

View File

@@ -98,7 +98,55 @@ export function OrderWizard({
const [selectedCompanyId, setSelectedCompanyId] = useState<string | null>(
initialOrder?.company_id ?? null
)
const [basketItems, setBasketItems] = useState<any[]>([])
const [basketItems, setBasketItems] = useState<any[]>(() => {
if (!initialOrder || !initialOrder.order_data?.items) return []
const groups: Record<string, any[]> = {}
initialOrder.order_data.items.forEach((item: any) => {
const devName = item.device_name || 'Kasse 1'
if (!groups[devName]) {
groups[devName] = []
}
groups[devName].push(item)
})
return Object.entries(groups).map(([deviceName, devItems]) => {
const selections: Record<string, CategorySelection> = {}
const moduleQuantities: Record<string, number> = {}
categories.forEach(cat => {
selections[cat.id] = { productId: null, productIds: [], moduleIds: [] }
})
devItems.forEach((item: any) => {
const catId = item.category_id
if (!selections[catId]) {
selections[catId] = { productId: null, productIds: [], moduleIds: [] }
}
const cat = categories.find(c => c.id === catId)
if (cat?.allow_multiselect) {
selections[catId].productIds = [...(selections[catId].productIds || []), item.product_id]
selections[catId].productId = selections[catId].productIds[0] || null
} else {
selections[catId].productId = item.product_id
selections[catId].productIds = [item.product_id]
}
item.selected_modules?.forEach((mod: any) => {
selections[catId].moduleIds.push(mod.module_id)
moduleQuantities[mod.module_id] = mod.quantity || 1
})
})
return {
deviceName,
selections,
moduleQuantities,
billingInterval: devItems[0]?.billing_interval || 'monthly'
}
})
})
const [deviceName, setDeviceName] = useState<string>('')
// Partner-Profil (Fallback)
@@ -223,18 +271,6 @@ export function OrderWizard({
const initInterval = initialOrder?.order_data?.billing_cycle ?? 'monthly'
const init: Record<string, CategorySelection> = {}
categories.forEach(cat => {
if (initialOrder) {
// Multi-select might have multiple items matching this category
const matchingItems = initialOrder.order_data?.items?.filter(i => i.category_id === cat.id) || []
if (matchingItems.length > 0) {
init[cat.id] = {
productId: matchingItems[0].product_id,
productIds: matchingItems.map(i => i.product_id),
moduleIds: matchingItems.flatMap(i => i.selected_modules?.map(m => m.module_id) ?? [])
}
return
}
}
const isVisible = initInterval === 'one_time' ? cat.show_in_kauf !== false : cat.show_in_abo !== false
if (!isVisible || cat.allow_multiselect || cat.preselect === false) {
init[cat.id] = { productId: null, productIds: [], moduleIds: [] }