iOS: Mengen-Sheet auf Form-Ebene praesentieren (erstes Oeffnen bleibt offen)
Das Menge-hinzufuegen/umlagern/entfernen-Sheet ging beim ersten Antippen sofort wieder zu: das spaet fertige Laden der Entnahme-Statistik (.task im Abschnitt) riss das gerade praesentierte Sheet weg. ObjectStockSection ist jetzt zustands- los (bekommt removals + Sheet-Binding); Sheet und Statistik-Laden liegen in der Detailansicht auf der stabilen Form-Ebene bzw. im reload(). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -38,6 +38,10 @@ struct ProductDetailView: View {
|
||||
@State private var fieldValues: [String: String] = [:]
|
||||
|
||||
@State private var editLot: Lot?
|
||||
// Mengen-Bestand (Menge je Lagerort): Sheet + Entnahme-Statistik werden hier
|
||||
// gehalten und auf Form-Ebene präsentiert, damit das Sheet stabil aufgeht.
|
||||
@State private var objectSheet: ObjectStockSheet?
|
||||
@State private var objectRemovals: RemovalSummary?
|
||||
|
||||
private let labels = ["", "Glas", "Tüte", "Flasche", "Dose", "Tube", "Becher", "Beutel", "Karton"]
|
||||
|
||||
@@ -92,7 +96,7 @@ struct ProductDetailView: View {
|
||||
} else if current.isObject && !current.isBulk {
|
||||
// Menge je Lagerort (Verbrauchsgegenstände laufen als Charge, s.u.).
|
||||
ObjectStockSection(product: current, locations: locations, lots: lots,
|
||||
onChanged: { await reload() })
|
||||
removals: objectRemovals, sheet: $objectSheet)
|
||||
} else {
|
||||
// Lebensmittel und Verbrauchsgegenstände: Vorrat aus den Chargen.
|
||||
Section("Bestand") {
|
||||
@@ -287,6 +291,25 @@ struct ProductDetailView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Mengen-Sheets auf der stabilen Form-Ebene (nicht im Abschnitt), sonst
|
||||
// schloss sich das Fenster beim ersten Öffnen sofort wieder.
|
||||
.sheet(item: $objectSheet) { welche in
|
||||
NavigationStack {
|
||||
switch welche {
|
||||
case .add:
|
||||
ObjectAddSheet(product: current, locations: locations,
|
||||
einheit: current.unitName.isEmpty ? "Stück" : current.unitName,
|
||||
perform: { await reload() })
|
||||
case .relocate(let from):
|
||||
ObjectRelocateSheet(product: current, locations: locations, initialFrom: from,
|
||||
perform: { await reload() })
|
||||
case .remove(let loc):
|
||||
ObjectRemoveSheet(product: current, locations: locations,
|
||||
einheit: current.unitName.isEmpty ? "Stück" : current.unitName,
|
||||
initialLoc: loc, perform: { await reload() })
|
||||
}
|
||||
}
|
||||
}
|
||||
.task {
|
||||
fillForm()
|
||||
await reload()
|
||||
@@ -355,6 +378,12 @@ struct ProductDetailView: View {
|
||||
} else {
|
||||
fieldDefs = []
|
||||
}
|
||||
// Entnahme-Statistik nur für „Menge je Lagerort"-Gegenstände.
|
||||
if current.isObject && !current.isBulk && !current.isIndividual {
|
||||
objectRemovals = try? await APIClient.shared.productRemovals(id: current.id)
|
||||
} else {
|
||||
objectRemovals = nil
|
||||
}
|
||||
}
|
||||
|
||||
/// Verwaltungsart (individual/bulk) mitschicken, wenn sie umgestellt wurde.
|
||||
|
||||
Reference in New Issue
Block a user