App: "Einzelstuecke anlegen" schloss sich beim ersten Mal sofort wieder
Artikel oeffnen, "Einzelstuecke anlegen" tippen - das Blatt ging kurz auf und
sofort wieder zu. Erst der zweite Versuch hielt. Danach blieb es stabil, bis
man den Artikel neu oeffnete.
Das Blatt hing an der Section, nicht am Formular. Genau davor warnt
ProductDetailView:368 seit laengerem im eigenen Kommentar - die Mengen-Sheets
wurden deshalb schon auf die Form-Ebene gelegt. Fuer die Einzelstuecke wurde
das nie nachgezogen.
Jetzt gibt ProductItemsSection das Blatt nach oben ab: Die Bindung gehoert
ProductDetailView, gezeigt wird es neben den Mengen-Sheets. Weil damit der
Rueckruf in den Abschnitt wegfaellt, bekommt er einen Nachlade-Zaehler - die
Elternansicht zaehlt ihn nach dem Anlegen hoch, und die Liste frischt auf.
Im Simulator vorher reproduziert und nachher geprueft: Erster Tipp nach dem
Oeffnen laesst das Blatt stehen, und ein angelegtes Stueck erscheint sofort
in der Liste ("Einzelstuecke (1)").
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
9f5d0a2310
commit
04f8c1fccd
@@ -78,9 +78,14 @@ struct ProductItemsSection: View {
|
|||||||
var onChanged: () async -> Void
|
var onChanged: () async -> Void
|
||||||
/// Bis zur Liste schließen (für „Anlegen & fertig").
|
/// Bis zur Liste schließen (für „Anlegen & fertig").
|
||||||
var onFinish: (() -> Void)? = nil
|
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 items: [Item] = []
|
||||||
@State private var showAdd = false
|
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
Section("Einzelstücke (\(items.count))") {
|
Section("Einzelstücke (\(items.count))") {
|
||||||
@@ -97,17 +102,15 @@ struct ProductItemsSection: View {
|
|||||||
if items.isEmpty {
|
if items.isEmpty {
|
||||||
Text("Noch keine Einzelstücke.").foregroundStyle(.secondary)
|
Text("Noch keine Einzelstücke.").foregroundStyle(.secondary)
|
||||||
}
|
}
|
||||||
Button { showAdd = true } label: {
|
Button { anlegen = true } label: {
|
||||||
Label("Einzelstücke anlegen", systemImage: "plus")
|
Label("Einzelstücke anlegen", systemImage: "plus")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.task(id: product.id) { await reload() }
|
.task(id: "\(product.id)-\(nachladen)") { await reload() }
|
||||||
.sheet(isPresented: $showAdd) {
|
// Kein .sheet hier. Aus einem Abschnitt heraus gezeigt, schloss es sich
|
||||||
NavigationStack {
|
// beim ERSTEN Oeffnen sofort wieder und hielt erst beim zweiten Versuch;
|
||||||
ItemAddSheet(productId: product.id, onDone: { await refresh() },
|
// ProductDetailView hat die Mengen-Blaetter aus genau diesem Grund
|
||||||
onFinish: onFinish.map { finish in { showAdd = false; finish() } })
|
// laengst auf die Form-Ebene gelegt. Hier stand es nur nie nach.
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func untertitel(_ it: Item) -> String {
|
private func untertitel(_ it: Item) -> String {
|
||||||
|
|||||||
@@ -46,6 +46,9 @@ struct ProductDetailView: View {
|
|||||||
// Mengen-Bestand (Menge je Lagerort): Sheet + Entnahme-Statistik werden hier
|
// Mengen-Bestand (Menge je Lagerort): Sheet + Entnahme-Statistik werden hier
|
||||||
// gehalten und auf Form-Ebene präsentiert, damit das Sheet stabil aufgeht.
|
// gehalten und auf Form-Ebene präsentiert, damit das Sheet stabil aufgeht.
|
||||||
@State private var objectSheet: ObjectStockSheet?
|
@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?
|
@State private var objectRemovals: RemovalSummary?
|
||||||
|
|
||||||
private let labels = ["", "Glas", "Tüte", "Flasche", "Dose", "Tube", "Becher", "Beutel", "Karton"]
|
private let labels = ["", "Glas", "Tüte", "Flasche", "Dose", "Tube", "Becher", "Beutel", "Karton"]
|
||||||
@@ -98,7 +101,9 @@ struct ProductDetailView: View {
|
|||||||
|
|
||||||
if current.isObject && current.isIndividual {
|
if current.isObject && current.isIndividual {
|
||||||
ProductItemsSection(product: current, onChanged: { await reload() },
|
ProductItemsSection(product: current, onChanged: { await reload() },
|
||||||
onFinish: { dismiss() })
|
onFinish: { dismiss() },
|
||||||
|
nachladen: itemsNachladen,
|
||||||
|
anlegen: $itemsAnlegen)
|
||||||
} else if current.isObject && !current.isBulk {
|
} else if current.isObject && !current.isBulk {
|
||||||
// Menge je Lagerort (Verbrauchsgegenstände laufen als Charge, s.u.).
|
// Menge je Lagerort (Verbrauchsgegenstände laufen als Charge, s.u.).
|
||||||
ObjectStockSection(product: current, locations: locations, lots: lots,
|
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
|
// Mengen-Sheets auf der stabilen Form-Ebene (nicht im Abschnitt), sonst
|
||||||
// schloss sich das Fenster beim ersten Öffnen sofort wieder.
|
// schloss sich das Fenster beim ersten Öffnen sofort wieder.
|
||||||
.sheet(item: $objectSheet) { welche in
|
.sheet(item: $objectSheet) { welche in
|
||||||
|
|||||||
Reference in New Issue
Block a user