feat: implement category flags, drop global tables, fix sidebar sticky layout
All checks were successful
Staging Build / build (push) Successful in 2m48s
All checks were successful
Staging Build / build (push) Successful in 2m48s
This commit is contained in:
@@ -593,31 +593,54 @@ export function OrderWizard({
|
||||
function selectProduct(catId: string, productId: string) {
|
||||
setSelections(prev => {
|
||||
const cat = categories.find(c => c.id === catId)
|
||||
|
||||
// Build updated selection for this category
|
||||
let updatedCatSel: CategorySelection
|
||||
if (cat?.allow_multiselect) {
|
||||
const currentIds = prev[catId]?.productIds || []
|
||||
const nextIds = currentIds.includes(productId)
|
||||
? currentIds.filter(id => id !== productId)
|
||||
: [...currentIds, productId]
|
||||
return {
|
||||
...prev,
|
||||
[catId]: {
|
||||
productId: nextIds[0] || null,
|
||||
productIds: nextIds,
|
||||
moduleIds: prev[catId]?.moduleIds || []
|
||||
}
|
||||
updatedCatSel = {
|
||||
productId: nextIds[0] || null,
|
||||
productIds: nextIds,
|
||||
moduleIds: prev[catId]?.moduleIds || []
|
||||
}
|
||||
} else {
|
||||
const isCurrentlyChecked = prev[catId]?.productId === productId
|
||||
const nextId = isCurrentlyChecked ? null : productId
|
||||
return {
|
||||
...prev,
|
||||
[catId]: {
|
||||
productId: nextId,
|
||||
productIds: nextId ? [nextId] : [],
|
||||
moduleIds: []
|
||||
}
|
||||
updatedCatSel = {
|
||||
productId: nextId,
|
||||
productIds: nextId ? [nextId] : [],
|
||||
moduleIds: []
|
||||
}
|
||||
}
|
||||
|
||||
// If this category resets others, rebuild all other categories to their initial state
|
||||
if (cat?.resets_others) {
|
||||
const resetSels: Record<string, CategorySelection> = {}
|
||||
categories.forEach(c => {
|
||||
if (c.id === catId) {
|
||||
resetSels[c.id] = updatedCatSel
|
||||
} else {
|
||||
const isVisible = selectedBillingInterval === 'one_time' ? c.show_in_kauf !== false : c.show_in_abo !== false
|
||||
if (!isVisible || c.allow_multiselect || c.preselect === false) {
|
||||
resetSels[c.id] = { productId: null, productIds: [], moduleIds: [] }
|
||||
} else {
|
||||
const first = products.find(p =>
|
||||
p.category_id === c.id &&
|
||||
(selectedBillingInterval === 'one_time' ? p.show_in_kauf !== false : p.show_in_abo !== false)
|
||||
)
|
||||
resetSels[c.id] = { productId: first?.id ?? null, productIds: first ? [first.id] : [], moduleIds: [] }
|
||||
}
|
||||
}
|
||||
})
|
||||
// Also reset module quantities for other categories
|
||||
setModuleQuantities({})
|
||||
return resetSels
|
||||
}
|
||||
|
||||
return { ...prev, [catId]: updatedCatSel }
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user