iOS: getrennte Lebensmittel/Gegenstaende-Listen + anklickbarer Verlauf
Listen-Tab: zwei halbe Kacheln "Lebensmittel" und "Gegenstaende" (ProductListView mit fixedType, clientseitig ueber isObject gefiltert wie im Web); Neuanlage uebernimmt den Typ. Einzelstuecke bleiben unveraendert (reine Gegenstands-Welt). Verlauf und "Letzte Bewegungen" auf der Startseite: Tippen auf eine Bewegung oeffnet ueber den neuen Lader ProductByIdView das jeweilige Produkt. Der artikel-eigene Verlauf bleibt ohne Link. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -395,6 +395,42 @@ struct ProductDetailView: View {
|
||||
}
|
||||
}
|
||||
|
||||
/// Lädt ein Produkt anhand seiner ID nach und zeigt dann die Detailansicht –
|
||||
/// z.B. beim Antippen einer Bewegung im Verlauf oder auf der Startseite.
|
||||
struct ProductByIdView: View {
|
||||
let productId: Int
|
||||
|
||||
@State private var product: Product?
|
||||
@State private var error: String?
|
||||
|
||||
var body: some View {
|
||||
Group {
|
||||
if let product {
|
||||
ProductDetailView(product: product)
|
||||
} else if let error {
|
||||
VStack(spacing: 12) {
|
||||
Text(error).foregroundStyle(.red).font(.callout)
|
||||
.multilineTextAlignment(.center)
|
||||
Button("Erneut versuchen") { Task { await load() } }
|
||||
}
|
||||
.padding()
|
||||
} else {
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
.task { if product == nil { await load() } }
|
||||
}
|
||||
|
||||
private func load() async {
|
||||
do {
|
||||
product = try await APIClient.shared.product(id: productId)
|
||||
error = nil
|
||||
} catch {
|
||||
self.error = error.localizedDescription
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Menge und MHD einer Charge korrigieren.
|
||||
struct LotEditView: View {
|
||||
let lot: Lot
|
||||
|
||||
Reference in New Issue
Block a user