Mercurial > public > simoleon
annotate Simoleon/Settings.swift @ 25:933d9ab04374
Fixes Cloudkit sync
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Tue, 20 Jul 2021 12:23:32 +0100 |
parents | bda6a55d027a |
children | d95582268b44 |
rev | line source |
---|---|
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // Settings.swift |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // Simoleon |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 19/07/2021. |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 struct Settings: View { |
23
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
11 @Environment(\.managedObjectContext) private var viewContext |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
12 @FetchRequest(sortDescriptors: []) private var userSettings: FetchedResults<UserSettings> |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
13 @State private var selectedCurrencyPair = "USD/GBP" |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 let currencyPairs: [String] = parseJson("CurrencyPairs.json") |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 var body: some View { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
17 List { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 Section(header: Text("Preferences")) { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 Picker("Default currency", selection: $selectedCurrencyPair) { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 ForEach(currencyPairs.sorted(), id: \.self) { currencyPair in |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 Text(currencyPair) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
23 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
24 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
25 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
26 Section(header: Text("Stay in touch")) { |
23
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
27 Link(destination: URL(string: "https://itunes.apple.com/app/id1576390953?action=write-review")!) { |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
28 HStack { |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
29 Image(systemName: "heart.fill") |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
30 .foregroundColor(Color(.systemRed)) |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
31 .imageScale(.large) |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
32 |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
33 Text("Rate Simoleon") |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
34 } |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
35 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
36 |
25
933d9ab04374
Fixes Cloudkit sync
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
37 Link(destination: URL(string: "https://twitter.com/dennisconcep")!) { |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
38 HStack { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
39 Image("TwitterLogo") |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
40 .resizable() |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
41 .frame(width: 30, height: 30) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
42 |
25
933d9ab04374
Fixes Cloudkit sync
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
43 Text("Developer's Twitter") |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
44 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
45 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
46 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
47 Link(destination: URL(string: "https://dennistech.io/contact")!) { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
48 HStack { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
49 Image(systemName: "envelope.circle.fill") |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
50 .renderingMode(.original) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
51 .imageScale(.large) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
52 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
53 Text("Contact") |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
54 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
56 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
58 Section(header: Text("About")) { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
59 Link("Website", destination: URL(string: "https://dennistech.io")!) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
60 Link("Privacy Policy", destination: URL(string: "https://dennistech.io")!) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 } |
24
bda6a55d027a
Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
23
diff
changeset
|
63 .onChange(of: selectedCurrencyPair, perform: { selectedCurrencyPair in |
bda6a55d027a
Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
23
diff
changeset
|
64 setDefaultCurrency() |
bda6a55d027a
Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
23
diff
changeset
|
65 }) |
23
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
66 .onAppear(perform: fetchUserSettings) |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
67 .listStyle(InsetGroupedListStyle()) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
68 .navigationTitle("Settings") |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
69 .if(UIDevice.current.userInterfaceIdiom == .phone) { content in |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
70 NavigationView { content } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
71 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
72 } |
23
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
73 |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
74 /* |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
75 1) Fetch default currency from User Settings |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
76 2) Change State var currencyPair |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
77 */ |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
78 private func fetchUserSettings() { |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
79 if let userSettings = userSettings.first { |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
80 self.selectedCurrencyPair = userSettings.defaultCurrency ?? "USD/GBP" |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
81 } |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
82 } |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
83 |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
84 private func setDefaultCurrency() { |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
85 if self.userSettings.isEmpty { /// If it's empty -> add record |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
86 let userSettings = UserSettings(context: viewContext) |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
87 userSettings.defaultCurrency = selectedCurrencyPair |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
88 |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
89 do { |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
90 try viewContext.save() |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
91 } catch { |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
92 print(error.localizedDescription) |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
93 } |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
94 } else { /// If not, update record |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
95 self.userSettings.first?.defaultCurrency = selectedCurrencyPair |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
96 try? viewContext.save() |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
97 } |
699b5bb619db
UserSettings CoreData implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
98 } |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
99 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
100 |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
101 struct Settings_Previews: PreviewProvider { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
102 static var previews: some View { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
103 Settings() |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
104 } |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
105 } |