iOS: 'Anlegen & fertig' fuers Einzelstueck + Speichern-Nachfrage beim Zurueck
1) Im Einzelstueck-Anlegen gibt es jetzt 'Anlegen & fertig' - das schliesst in einem Tap bis zur Produktliste zurueck (statt Sheet schliessen + nochmal zurueck). 'Anlegen' bleibt fuer mehrere Stuecke nacheinander. 2) Beim Zurueck aus der Produkt-Detailansicht wird bei ungespeicherten Stammdaten-Aenderungen nachgefragt (Speichern/Verwerfen); ohne Aenderung direkt zurueck. Fussnote stellt klar: Foto und Lagerort-Bedarf speichern sofort. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -76,6 +76,8 @@ struct DateRow: View {
|
||||
struct ProductItemsSection: View {
|
||||
let product: Product
|
||||
var onChanged: () async -> Void
|
||||
/// Bis zur Liste schließen (für „Anlegen & fertig").
|
||||
var onFinish: (() -> Void)? = nil
|
||||
|
||||
@State private var items: [Item] = []
|
||||
@State private var showAdd = false
|
||||
@@ -102,7 +104,8 @@ struct ProductItemsSection: View {
|
||||
.task(id: product.id) { await reload() }
|
||||
.sheet(isPresented: $showAdd) {
|
||||
NavigationStack {
|
||||
ItemAddSheet(productId: product.id) { await refresh() }
|
||||
ItemAddSheet(productId: product.id, onDone: { await refresh() },
|
||||
onFinish: onFinish.map { finish in { showAdd = false; finish() } })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -436,6 +439,8 @@ struct ItemEditView: View {
|
||||
struct ItemAddSheet: View {
|
||||
let productId: Int
|
||||
var onDone: () async -> Void
|
||||
/// Wenn gesetzt: „Anlegen & fertig" schließt bis zur Liste (nicht nur das Sheet).
|
||||
var onFinish: (() -> Void)? = nil
|
||||
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
@@ -514,7 +519,11 @@ struct ItemAddSheet: View {
|
||||
|
||||
if let error { Section { Text(error).foregroundStyle(.red).font(.callout) } }
|
||||
Section {
|
||||
Button(busy ? "Anlegen…" : "Anlegen") { Task { await create() } }.disabled(busy)
|
||||
Button(busy ? "Anlegen…" : "Anlegen") { Task { await create(finish: false) } }.disabled(busy)
|
||||
if onFinish != nil {
|
||||
Button(busy ? "Anlegen…" : "Anlegen & fertig") { Task { await create(finish: true) } }
|
||||
.disabled(busy)
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Einzelstücke anlegen")
|
||||
@@ -575,7 +584,7 @@ struct ItemAddSheet: View {
|
||||
: "Übernommen: \(teile.joined(separator: ", "))."
|
||||
}
|
||||
|
||||
private func create() async {
|
||||
private func create(finish: Bool) async {
|
||||
busy = true; defer { busy = false }; error = nil
|
||||
do {
|
||||
var sid = shopId
|
||||
@@ -598,7 +607,7 @@ struct ItemAddSheet: View {
|
||||
filename: docName.isEmpty ? "beleg" : docName, contentType: docType)
|
||||
}
|
||||
await onDone()
|
||||
dismiss()
|
||||
if finish, let onFinish { onFinish() } else { dismiss() }
|
||||
} catch { self.error = error.localizedDescription }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user