diff --git a/AboTracker.xcodeproj/xcuserdata/keyvanatashfaraz.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/AboTracker.xcodeproj/xcuserdata/keyvanatashfaraz.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..adc62a6 --- /dev/null +++ b/AboTracker.xcodeproj/xcuserdata/keyvanatashfaraz.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,6 @@ + + + diff --git a/AboTracker/Subscription.swift b/AboTracker/Subscription.swift index eb40f52..819a10e 100644 --- a/AboTracker/Subscription.swift +++ b/AboTracker/Subscription.swift @@ -15,6 +15,10 @@ import UIKit self.colorData = try? NSKeyedArchiver.archivedData(withRootObject: color, requiringSecureCoding: false) } + func setColor(c: Color) { + colorData = try? NSKeyedArchiver.archivedData(withRootObject: c, requiringSecureCoding: false) + } + func getColor() -> Color? { guard let colorData = self.colorData else { return nil } do { diff --git a/AboTracker/views/AddSubscriptionView.swift b/AboTracker/views/AddSubscriptionView.swift index ccf9499..ceb87f3 100644 --- a/AboTracker/views/AddSubscriptionView.swift +++ b/AboTracker/views/AddSubscriptionView.swift @@ -4,7 +4,7 @@ import SwiftData struct AddSubscriptionView: View { @Environment(\.presentationMode) var presentationMode @Environment(\.modelContext) private var modelContext - @Query var subs: [Subscription] + @Binding var subscription: Subscription? @State private var name: String = "" @State private var payments: [Payment] = [Payment(amount: 0, intervall: .monthly, startDate: Date())] @@ -49,14 +49,27 @@ struct AddSubscriptionView: View { } Section { - Button("Add Subscription") { - let newSubscription = Subscription(name: name, payments: payments, color: color) - modelContext.insert(newSubscription) + Button(subscription == nil ? "Add Subscription" : "Save Subscription") { + if let existingSubscription = subscription { + existingSubscription.name = name + existingSubscription.payments = payments + existingSubscription.setColor(c: color) + } else { + let newSubscription = Subscription(name: name, payments: payments, color: color) + modelContext.insert(newSubscription) + } presentationMode.wrappedValue.dismiss() } } } - .navigationTitle("Add Subscription") + .navigationTitle(subscription == nil ? "Add Subscription" : "Edit Subscription") + .onAppear { + if let existingSubscription = subscription { + name = existingSubscription.name + payments = existingSubscription.payments + color = existingSubscription.getColor() ?? .blue + } + } #if os(iOS) .navigationBarItems(trailing: Button("Cancel") { presentationMode.wrappedValue.dismiss() diff --git a/AboTracker/views/HomeView.swift b/AboTracker/views/HomeView.swift index b454b27..54255f3 100644 --- a/AboTracker/views/HomeView.swift +++ b/AboTracker/views/HomeView.swift @@ -5,7 +5,8 @@ struct HomeView: View { @Environment(\.modelContext) private var modelContext @Query var subs: [Subscription] @State private var showAddSubscriptionSheet = false - + @State private var selectedSubscription: Subscription? + var body: some View { NavigationView { VStack { @@ -29,6 +30,10 @@ struct HomeView: View { } .listRowBackground(sub.getColorOrAccent().opacity(0.2)) .cornerRadius(8) + .onTapGesture { + selectedSubscription = sub + showAddSubscriptionSheet = true + } } .onDelete(perform: deleteSubscription) @@ -56,6 +61,7 @@ struct HomeView: View { } ToolbarItem(placement: .navigationBarTrailing) { Button(action: { + selectedSubscription = nil showAddSubscriptionSheet.toggle() }) { Image(systemName: "plus") @@ -64,6 +70,7 @@ struct HomeView: View { #elseif os(macOS) ToolbarItem(placement: .primaryAction) { Button(action: { + selectedSubscription = nil showAddSubscriptionSheet.toggle() }) { Image(systemName: "plus") @@ -72,7 +79,7 @@ struct HomeView: View { #endif } .sheet(isPresented: $showAddSubscriptionSheet) { - AddSubscriptionView() + AddSubscriptionView(subscription: $selectedSubscription) } } }