App: sichtbarer Knopf "Anlegen & NFC-Tag beschreiben" im Anlege-Formular
Gewuenscht war ein Knopf, den man sieht. Gebaut war ein Schritt, der erst NACH dem Antippen von "Anlegen" kam - im Formular also nichts zu sehen. Und er kam nicht einmal dann: await onDone() laedt die Elternansicht neu, dabei wird das Anlege-Blatt abgeraeumt, und jeder Zustand, den man danach setzt, laeuft ins Leere. Deshalb war von dem Schritt nie etwas zu sehen. Jetzt steht "Anlegen & NFC-Tag beschreiben" neben "Anlegen", mit Wellensymbol und nur bei Anzahl 1 (ein Tag gehoert zu genau einem Stueck; bei mehr sagt ein Hinweis, warum er fehlt). Frueher kann der Knopf nicht stehen: Die UID vergibt der Server erst beim Anlegen, vorher gibt es nichts zu schreiben. Das Neuladen holt jetzt "Fertig" im Tag-Schritt nach, statt vorher zu laufen. Diesmal in der laufenden App geprueft, nicht nur uebersetzt: Backend lokal auf SQLite, Testartikel angelegt, Ablauf im Simulator durchgespielt. Der Knopf erscheint, legt das Stueck an und fuehrt zum Tag-Schritt mit der richtigen UID und vorrania://i/<UID> als Nutzlast. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
75899714b3
commit
1e8c4b2797
@@ -933,6 +933,22 @@ struct ItemAddSheet: View {
|
||||
Button(busy ? "Anlegen…" : "Anlegen & fertig") { Task { await create(finish: true) } }
|
||||
.disabled(busy)
|
||||
}
|
||||
// Der Knopf steht hier und nicht weiter oben, weil ein Tag erst
|
||||
// beschrieben werden kann, wenn das Stueck existiert: Die UID
|
||||
// vergibt der Server beim Anlegen. Deshalb eine Taste, die
|
||||
// beides tut - sichtbar an der Stelle, wo man sie sucht.
|
||||
if count == 1, NFCDienst.verfuegbar {
|
||||
Button { Task { await create(finish: false, tagDanach: true) } } label: {
|
||||
Label(busy ? "Anlegen…" : "Anlegen & NFC-Tag beschreiben",
|
||||
systemImage: "wave.3.right")
|
||||
}
|
||||
.disabled(busy)
|
||||
}
|
||||
} footer: {
|
||||
if NFCDienst.verfuegbar && count > 1 {
|
||||
Text("Ein NFC-Tag gehört zu genau einem Stück. Bei Anzahl 1 lässt "
|
||||
+ "er sich hier gleich mit beschreiben.")
|
||||
}
|
||||
}
|
||||
}
|
||||
.navigationTitle("Einzelstücke anlegen")
|
||||
@@ -975,7 +991,16 @@ struct ItemAddSheet: View {
|
||||
.navigationDestination(isPresented: $nfcPush) {
|
||||
if let stueck = nfcItem {
|
||||
NFCSchreibenView(item: stueck, onFertig: {
|
||||
if nfcFinish, let onFinish { onFinish() } else { dismiss() }
|
||||
// Jetzt erst auffrischen: vorher raeumte das Neuladen der
|
||||
// Elternansicht dieses Blatt samt Tag-Schritt ab.
|
||||
Task {
|
||||
await onDone()
|
||||
// Erst den Schub verlassen, dann das Blatt: Solange der
|
||||
// Tag-Schritt oben liegt, greift dismiss() auf ihn und
|
||||
// nicht auf das Blatt darunter.
|
||||
nfcPush = false
|
||||
if nfcFinish, let onFinish { onFinish() } else { dismiss() }
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1010,7 +1035,7 @@ struct ItemAddSheet: View {
|
||||
: "Übernommen: \(teile.joined(separator: ", "))."
|
||||
}
|
||||
|
||||
private func create(finish: Bool) async {
|
||||
private func create(finish: Bool, tagDanach: Bool = false) async {
|
||||
busy = true; defer { busy = false }; error = nil
|
||||
do {
|
||||
var sid = shopId
|
||||
@@ -1032,17 +1057,19 @@ struct ItemAddSheet: View {
|
||||
itemId: first.id, data: data,
|
||||
filename: docName.isEmpty ? "beleg" : docName, contentType: docType)
|
||||
}
|
||||
await onDone()
|
||||
// Genau EIN Stueck: gleich den Tag beschreiben, statt das Stueck
|
||||
// hinterher in der Liste wiederzusuchen. Bei mehreren koennte die
|
||||
// App nicht wissen, welches davon gerade am Tag haengt - dort
|
||||
// bleibt es wie bisher. Ohne NFC im Geraet (iPad) ebenso.
|
||||
if created.count == 1, NFCDienst.verfuegbar {
|
||||
// Weiter zum Tag-Schritt - und zwar BEVOR onDone() laeuft.
|
||||
//
|
||||
// onDone() laedt die Elternansicht neu, und dabei wird dieses Blatt
|
||||
// abgeraeumt: Jeder Zustand, den man danach setzt, laeuft ins Leere.
|
||||
// Genau daran ist der Schritt vorher unsichtbar gescheitert. Das
|
||||
// Neuladen holt deshalb „Fertig" im Tag-Schritt nach.
|
||||
if tagDanach, created.count == 1, NFCDienst.verfuegbar {
|
||||
nfcFinish = finish
|
||||
nfcItem = created[0]
|
||||
nfcPush = true
|
||||
return // Schliessen uebernimmt „Fertig" im Tag-Schritt
|
||||
return
|
||||
}
|
||||
await onDone()
|
||||
if finish, let onFinish { onFinish() } else { dismiss() }
|
||||
} catch { self.error = error.localizedDescription }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user