iOS: Umschalter Lebensmittel/Gegenstand im Artikelformular

Gleiche Idee wie im Web: ein Typ-Umschalter filtert die Kategorieauswahl, statt
Werkzeug & Co. zwischen den Lebensmittel-Kategorien zu suchen. Im Anlege-Formular
blenden sich zudem die Lebensmittel-Felder (Gruppe, Einheit, MHD) aus, wenn
"Gegenstand" gewaehlt ist. Die Detailansicht filtert die Kategorieliste auf den
Typ des Artikels. CategoryPicker bekam dafuer einen optionalen Typ-Filter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-25 23:40:32 +02:00
parent 8d75ad63ce
commit c532492286
3 changed files with 71 additions and 37 deletions

View File

@@ -7,6 +7,8 @@ import SwiftUI
struct CategoryPicker: View {
let categories: [CategoryItem]
@Binding var selection: Int?
/// Nur Kategorien dieses Typs zeigen ("food"/"object"); nil = alle.
var tracking: String? = nil
var body: some View {
Picker("Kategorie", selection: $selection) {
@@ -18,17 +20,23 @@ struct CategoryPicker: View {
}
}
private var gefiltert: [CategoryItem] {
guard let tracking else { return categories }
return categories.filter { $0.tracking == tracking }
}
private func flattened() -> [(item: CategoryItem, depth: Int)] {
let ids = Set(categories.map(\.id))
let quelle = gefiltert
let ids = Set(quelle.map(\.id))
var result: [(CategoryItem, Int)] = []
func walk(_ node: CategoryItem, _ depth: Int) {
result.append((node, depth))
for child in categories.filter({ $0.parentId == node.id }) {
for child in quelle.filter({ $0.parentId == node.id }) {
walk(child, depth + 1)
}
}
for root in categories.filter({ $0.parentId == nil || !ids.contains($0.parentId!) }) {
for root in quelle.filter({ $0.parentId == nil || !ids.contains($0.parentId!) }) {
walk(root, 0)
}
return result