Mercurial > public > simoleon
diff Simoleon/Settings.swift @ 27:d95582268b44
Fix bug CoreData and minor UI changes
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Wed, 21 Jul 2021 12:36:10 +0100 |
parents | 933d9ab04374 |
children | 4f862c618b44 |
line wrap: on
line diff
--- a/Simoleon/Settings.swift Tue Jul 20 12:23:37 2021 +0100 +++ b/Simoleon/Settings.swift Wed Jul 21 12:36:10 2021 +0100 @@ -9,14 +9,14 @@ struct Settings: View { @Environment(\.managedObjectContext) private var viewContext - @FetchRequest(sortDescriptors: []) private var userSettings: FetchedResults<UserSettings> - @State private var selectedCurrencyPair = "USD/GBP" + @FetchRequest(sortDescriptors: []) private var defaultCurrency: FetchedResults<DefaultCurrency> + @State private var selectedDefaultCurrency = "" let currencyPairs: [String] = parseJson("CurrencyPairs.json") var body: some View { List { Section(header: Text("Preferences")) { - Picker("Default currency", selection: $selectedCurrencyPair) { + Picker("Default currency", selection: $selectedDefaultCurrency) { ForEach(currencyPairs.sorted(), id: \.self) { currencyPair in Text(currencyPair) } @@ -60,10 +60,7 @@ Link("Privacy Policy", destination: URL(string: "https://dennistech.io")!) } } - .onChange(of: selectedCurrencyPair, perform: { selectedCurrencyPair in - setDefaultCurrency() - }) - .onAppear(perform: fetchUserSettings) + .onAppear(perform: setCurrency) .listStyle(InsetGroupedListStyle()) .navigationTitle("Settings") .if(UIDevice.current.userInterfaceIdiom == .phone) { content in @@ -71,28 +68,26 @@ } } - /* - 1) Fetch default currency from User Settings - 2) Change State var currencyPair - */ - private func fetchUserSettings() { - if let userSettings = userSettings.first { - self.selectedCurrencyPair = userSettings.defaultCurrency ?? "USD/GBP" + private func setCurrency() { + if selectedDefaultCurrency == "" { + self.selectedDefaultCurrency = defaultCurrency.first?.pair ?? "USD/GBP" + } else { + setCoreData() } } - private func setDefaultCurrency() { - if self.userSettings.isEmpty { /// If it's empty -> add record - let userSettings = UserSettings(context: viewContext) - userSettings.defaultCurrency = selectedCurrencyPair + private func setCoreData() { + if self.defaultCurrency.isEmpty { // If it's empty -> add record + let defaultCurrency = DefaultCurrency(context: viewContext) + defaultCurrency.pair = selectedDefaultCurrency do { try viewContext.save() } catch { print(error.localizedDescription) } - } else { /// If not, update record - self.userSettings.first?.defaultCurrency = selectedCurrencyPair + } else { // If not, update record + self.defaultCurrency.first?.pair = selectedDefaultCurrency try? viewContext.save() } }