/ BalanceKit / EditFoodView.swift
EditFoodView.swift
1 // 2 // EditFoodView.swift 3 // BalanceKit 4 // 5 // Created by Alexander Kunau on 12.07.25. 6 // 7 8 import SwiftUI 9 10 struct EditFoodView: View { 11 @Environment(\.dismiss) private var dismiss 12 @ObservedObject var dataManager: FoodDataManager 13 14 var foodItem: FoodItem 15 16 @State private var name: String 17 @State private var calories: String 18 @State private var protein: String 19 @State private var carbs: String 20 @State private var fat: String 21 @State private var date: Date 22 @State private var mealType: MealType 23 24 // Initialisierung mit dem zu bearbeitenden FoodItem 25 init(dataManager: FoodDataManager, foodItem: FoodItem) { 26 self.dataManager = dataManager 27 self.foodItem = foodItem 28 29 // Initialisiere die State-Variablen mit den Werten des FoodItems 30 _name = State(initialValue: foodItem.name) 31 _calories = State(initialValue: String(foodItem.calories)) 32 _protein = State(initialValue: String(format: "%.1f", foodItem.protein)) 33 _carbs = State(initialValue: String(format: "%.1f", foodItem.carbs)) 34 _fat = State(initialValue: String(format: "%.1f", foodItem.fat)) 35 _date = State(initialValue: foodItem.date) 36 _mealType = State(initialValue: foodItem.mealType) 37 } 38 39 var body: some View { 40 NavigationStack { 41 Form { 42 Section(header: Text("Nahrungsmittel-Details")) { 43 TextField("Name", text: $name) 44 45 TextField("Kalorien", text: $calories) 46 .keyboardType(.numberPad) 47 48 TextField("Protein (g)", text: $protein) 49 .keyboardType(.decimalPad) 50 51 TextField("Kohlenhydrate (g)", text: $carbs) 52 .keyboardType(.decimalPad) 53 54 TextField("Fett (g)", text: $fat) 55 .keyboardType(.decimalPad) 56 } 57 58 Section(header: Text("Zeitpunkt")) { 59 DatePicker("Datum & Zeit", selection: $date) 60 61 Picker("Mahlzeit", selection: $mealType) { 62 ForEach(MealType.allCases, id: \.self) { type in 63 Label(type.rawValue, systemImage: type.icon).tag(type) 64 } 65 } 66 } 67 } 68 .navigationTitle("Eintrag bearbeiten") 69 .navigationBarTitleDisplayMode(.inline) 70 .toolbar { 71 ToolbarItem(placement: .cancellationAction) { 72 Button("Abbrechen") { 73 dismiss() 74 } 75 } 76 77 ToolbarItem(placement: .confirmationAction) { 78 Button("Speichern") { 79 saveChanges() 80 } 81 } 82 } 83 } 84 } 85 86 private func saveChanges() { 87 // Konvertiere die Texteingaben in die richtigen Typen 88 guard let caloriesInt = Int(calories), 89 let proteinDouble = Double(protein.replacingOccurrences(of: ",", with: ".")), 90 let carbsDouble = Double(carbs.replacingOccurrences(of: ",", with: ".")), 91 let fatDouble = Double(fat.replacingOccurrences(of: ",", with: ".")) else { 92 // Hier könnte eine Fehlerbehandlung stehen 93 return 94 } 95 96 // Aktualisiere das FoodItem über den DataManager 97 dataManager.updateFoodItem( 98 id: foodItem.id, 99 name: name, 100 calories: caloriesInt, 101 protein: proteinDouble, 102 carbs: carbsDouble, 103 fat: fatDouble, 104 date: date, 105 mealType: mealType 106 ) 107 108 dismiss() 109 } 110 }