App: Folgeblatt nach dem Anlegen ging beim ersten Mal sofort wieder zu
Zwei sheet-Modifikatoren hingen am selben View: einzelstueckeNachAnlegen und
mengeNachAnlegen, beide in ea7a42a nebeneinandergesetzt. Zwei Praesentationen
am selben View vertragen sich in SwiftUI nicht zuverlaessig - eine davon wird
verschluckt, und genau deshalb hielt das Blatt erst im zweiten Anlauf.
Jetzt ein einziger Modifikator, der innen verzweigt: Einzelstuecke oder Menge
je Lagerort, je nach Verwaltungsart. Statt zweier Zustaende nur noch einer.
In der laufenden App geprueft, beide Zweige einzeln: Gegenstand mit
Einzelstuecken angelegt -> "Einzelstuecke anlegen" bleibt beim ERSTEN Mal
offen; Gegenstand mit Menge je Lagerort angelegt -> "Menge hinzufuegen"
ebenso.
Dabei nebenbei bestaetigt: Ein Gegenstand ohne Kategorie bekommt vom Server
tracking="food" und damit zu Recht gar keinen Folgeschritt - die
Verwaltungsart allein macht noch keinen Gegenstand.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
1e8c4b2797
commit
83f7134459
+13
-16
@@ -776,27 +776,24 @@ extension View {
|
||||
/// Die Bindung wird erst im `onDismiss` des Formulars gesetzt: Beides im
|
||||
/// selben Zug zu setzen verschluckt SwiftUI, weil das zweite Sheet dann
|
||||
/// erscheinen soll, waehrend das erste noch verschwindet.
|
||||
func einzelstueckeNachAnlegen(_ artikel: Binding<Product?>) -> some View {
|
||||
/// Je nach Verwaltungsart geht es zu den Einzelstuecken oder zur Menge je
|
||||
/// Lagerort. Beides haengt an EINEM sheet-Modifikator, nicht an zweien:
|
||||
/// Zwei Praesentationen am selben View vertragen sich in SwiftUI nicht
|
||||
/// zuverlaessig - dann schliesst sich das Blatt beim ersten Mal sofort
|
||||
/// wieder und erst der zweite Anlauf haelt.
|
||||
func nachAnlegen(_ artikel: Binding<Product?>) -> some View {
|
||||
sheet(item: artikel) { p in
|
||||
NavigationStack {
|
||||
ItemAddSheet(productId: p.id,
|
||||
onDone: {},
|
||||
onFinish: { artikel.wrappedValue = nil })
|
||||
if fuehrtEinzelstuecke(p) {
|
||||
ItemAddSheet(productId: p.id,
|
||||
onDone: {},
|
||||
onFinish: { artikel.wrappedValue = nil })
|
||||
} else {
|
||||
MengeNachAnlegenSheet(product: p) { artikel.wrappedValue = nil }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Dasselbe fuer Gegenstaende, die nur als Menge je Lagerort gefuehrt
|
||||
/// werden: direkt zu „davon habe ich zwoelf Stueck", statt den gerade
|
||||
/// angelegten Artikel hinterher wiederzusuchen.
|
||||
///
|
||||
/// Gleiche Reihenfolge-Regel wie oben – die Bindung erst im `onDismiss`
|
||||
/// des Formulars setzen.
|
||||
func mengeNachAnlegen(_ artikel: Binding<Product?>) -> some View {
|
||||
sheet(item: artikel) { p in
|
||||
NavigationStack { MengeNachAnlegenSheet(product: p) { artikel.wrappedValue = nil } }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Hat dieser Artikel ueberhaupt Einzelstuecke? Nur Gegenstaende, die je Stueck
|
||||
|
||||
@@ -409,8 +409,8 @@ struct ProductListView: View {
|
||||
@State private var showNew = false
|
||||
// Der gerade angelegte Artikel, bis sich das Formular geschlossen hat.
|
||||
@State private var angelegt: Product?
|
||||
@State private var einzelstueckeFuer: Product?
|
||||
@State private var mengeFuer: Product?
|
||||
/// Der gerade angelegte Artikel, bis der Folgeschritt dafuer durch ist.
|
||||
@State private var nachAnlegenFuer: Product?
|
||||
|
||||
enum SortMode: String, CaseIterable, Identifiable {
|
||||
case nameAsc = "Name A–Z"
|
||||
@@ -538,8 +538,9 @@ struct ProductListView: View {
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: $showNew, onDismiss: {
|
||||
if fuehrtEinzelstuecke(angelegt) { einzelstueckeFuer = angelegt }
|
||||
else if fuehrtMengeJeLagerort(angelegt) { mengeFuer = angelegt }
|
||||
if fuehrtEinzelstuecke(angelegt) || fuehrtMengeJeLagerort(angelegt) {
|
||||
nachAnlegenFuer = angelegt
|
||||
}
|
||||
angelegt = nil
|
||||
}) {
|
||||
NavigationStack {
|
||||
@@ -559,8 +560,7 @@ struct ProductListView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.einzelstueckeNachAnlegen($einzelstueckeFuer)
|
||||
.mengeNachAnlegen($mengeFuer)
|
||||
.nachAnlegen($nachAnlegenFuer)
|
||||
.task { categories = (try? await APIClient.shared.categories()) ?? [] }
|
||||
// Bei jedem Erscheinen neu laden – auch beim Zurückkommen aus der
|
||||
// Detailansicht, damit ein dort geänderter Bestand (z.B. neu angelegte
|
||||
|
||||
@@ -122,8 +122,8 @@ struct ScanTabView: View {
|
||||
@State private var showNew = false
|
||||
// Der gerade angelegte Artikel, bis sich das Formular geschlossen hat.
|
||||
@State private var angelegt: Product?
|
||||
@State private var einzelstueckeFuer: Product?
|
||||
@State private var mengeFuer: Product?
|
||||
/// Der gerade angelegte Artikel, bis der Folgeschritt dafuer durch ist.
|
||||
@State private var nachAnlegenFuer: Product?
|
||||
@State private var showKassenzettel = false
|
||||
|
||||
var body: some View {
|
||||
@@ -182,8 +182,9 @@ struct ScanTabView: View {
|
||||
.navigationTitle("Scannen")
|
||||
.fullScreenCover(isPresented: $showKassenzettel) { KassenzettelView() }
|
||||
.sheet(isPresented: $showNew, onDismiss: {
|
||||
if fuehrtEinzelstuecke(angelegt) { einzelstueckeFuer = angelegt }
|
||||
else if fuehrtMengeJeLagerort(angelegt) { mengeFuer = angelegt }
|
||||
if fuehrtEinzelstuecke(angelegt) || fuehrtMengeJeLagerort(angelegt) {
|
||||
nachAnlegenFuer = angelegt
|
||||
}
|
||||
angelegt = nil
|
||||
}) {
|
||||
NavigationStack {
|
||||
@@ -193,8 +194,7 @@ struct ScanTabView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.einzelstueckeNachAnlegen($einzelstueckeFuer)
|
||||
.mengeNachAnlegen($mengeFuer)
|
||||
.nachAnlegen($nachAnlegenFuer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user