diff --git a/ios/Sources/ItemViews.swift b/ios/Sources/ItemViews.swift index ce9792d..f409e50 100644 --- a/ios/Sources/ItemViews.swift +++ b/ios/Sources/ItemViews.swift @@ -78,9 +78,14 @@ struct ProductItemsSection: View { var onChanged: () async -> Void /// Bis zur Liste schließen (für „Anlegen & fertig"). var onFinish: (() -> Void)? = nil + /// Hochzaehlen laedt die Liste neu. Noetig, seit das Anlege-Blatt oben + /// haengt: Von dort kommt kein Rueckruf mehr in diesen Abschnitt. + var nachladen: Int = 0 + /// Oeffnet das Anlege-Blatt. Die Bindung gehoert der Elternansicht - das + /// Blatt wird dort gezeigt, nicht hier (siehe unten). + @Binding var anlegen: Bool @State private var items: [Item] = [] - @State private var showAdd = false var body: some View { Section("Einzelstücke (\(items.count))") { @@ -97,17 +102,15 @@ struct ProductItemsSection: View { if items.isEmpty { Text("Noch keine Einzelstücke.").foregroundStyle(.secondary) } - Button { showAdd = true } label: { + Button { anlegen = true } label: { Label("Einzelstücke anlegen", systemImage: "plus") } } - .task(id: product.id) { await reload() } - .sheet(isPresented: $showAdd) { - NavigationStack { - ItemAddSheet(productId: product.id, onDone: { await refresh() }, - onFinish: onFinish.map { finish in { showAdd = false; finish() } }) - } - } + .task(id: "\(product.id)-\(nachladen)") { await reload() } + // Kein .sheet hier. Aus einem Abschnitt heraus gezeigt, schloss es sich + // beim ERSTEN Oeffnen sofort wieder und hielt erst beim zweiten Versuch; + // ProductDetailView hat die Mengen-Blaetter aus genau diesem Grund + // laengst auf die Form-Ebene gelegt. Hier stand es nur nie nach. } private func untertitel(_ it: Item) -> String { diff --git a/ios/Sources/ProductDetailView.swift b/ios/Sources/ProductDetailView.swift index 9fffda1..678b433 100644 --- a/ios/Sources/ProductDetailView.swift +++ b/ios/Sources/ProductDetailView.swift @@ -46,6 +46,9 @@ struct ProductDetailView: View { // 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 itemsAnlegen = false + /// Hochzaehlen laesst den Einzelstueck-Abschnitt neu laden. + @State private var itemsNachladen = 0 @State private var objectRemovals: RemovalSummary? private let labels = ["", "Glas", "Tüte", "Flasche", "Dose", "Tube", "Becher", "Beutel", "Karton"] @@ -98,7 +101,9 @@ struct ProductDetailView: View { if current.isObject && current.isIndividual { ProductItemsSection(product: current, onChanged: { await reload() }, - onFinish: { dismiss() }) + onFinish: { dismiss() }, + nachladen: itemsNachladen, + anlegen: $itemsAnlegen) } else if current.isObject && !current.isBulk { // Menge je Lagerort (Verbrauchsgegenstände laufen als Charge, s.u.). ObjectStockSection(product: current, locations: locations, lots: lots, @@ -365,6 +370,18 @@ struct ProductDetailView: View { } } } + // Aus demselben Grund wie die Mengen-Sheets darunter: aus dem Abschnitt + // heraus gezeigt, schloss sich dieses Blatt beim ersten Oeffnen sofort + // wieder und hielt erst beim zweiten Versuch. + .sheet(isPresented: $itemsAnlegen) { + NavigationStack { + ItemAddSheet( + productId: current.id, + onDone: { itemsNachladen += 1; await reload() }, + onFinish: { itemsAnlegen = false; dismiss() } + ) + } + } // 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