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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user