Mercurial > public > simoleon
annotate Simoleon/Favorites.swift @ 140:fd19def1ce3f
Fix alignment problem in Russian
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Mon, 16 Aug 2021 21:19:56 +0100 |
parents | 87f02d4f9c26 |
children | 738fbd3ca671 |
rev | line source |
---|---|
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
2 // Favorites.swift |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // Simoleon |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 19/07/2021. |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
10 struct Favorites: View { |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 @Environment(\.managedObjectContext) private var viewContext |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
12 @FetchRequest( |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
13 sortDescriptors: [NSSortDescriptor(keyPath: \Favorite.currencyPair, ascending: true)], |
128
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
14 animation: .default) private var favorites: FetchedResults<Favorite> |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 var body: some View { |
27
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
17 VStack { |
128
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
18 if favorites.isEmpty { |
27
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
19 Group { |
84
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
20 Image(systemName: "star") |
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
21 .font(.title) |
128
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
22 |
84
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
23 Text("Search a currency pair and add it to favourites.") |
27
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
24 .padding(.top, 5) |
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
25 } |
84
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
26 .multilineTextAlignment(.center) |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
27 .foregroundColor(.secondary) |
84
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
28 .padding(.horizontal, 50) |
27
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
29 } else { |
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
30 List { |
128
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
31 ForEach(favorites) { favorite in |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
32 NavigationLink(destination: Conversion(showNavigationView: false, currencyPair: favorite.currencyPair)) { |
75
b6f8661300f2
Added isLocked to CurrencyPairs
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
53
diff
changeset
|
33 CurrencyRow(currencyPairName: favorite.currencyPair) |
27
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
34 } |
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
35 } |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
36 .onDelete(perform: removeFromFavorites) |
24
bda6a55d027a
Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
37 } |
30
f76d0e26c178
Add localisation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
29
diff
changeset
|
38 .listStyle(PlainListStyle()) |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
39 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
40 } |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
41 .navigationTitle("Favorites") |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
42 .toolbar { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
43 #if os(iOS) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
44 EditButton() |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
45 #endif |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
46 } |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
47 .if(UIDevice.current.userInterfaceIdiom == .phone) { content in |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
48 NavigationView { content } |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
49 } |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
50 .onAppear { |
128
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
51 #if SCREENSHOTS |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
52 generateFavoritesForScreenshots() |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
53 #endif |
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
54 } |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
56 |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
57 private func removeFromFavorites(offsets: IndexSet) { |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
58 withAnimation { |
128
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
59 offsets.map { favorites[$0] }.forEach(viewContext.delete) |
47
75c1a05176f6
Refactor code
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
43
diff
changeset
|
60 |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 do { |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 try viewContext.save() |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
63 } catch { |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
64 let nsError = error as NSError |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
65 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
66 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
67 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
68 } |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
69 |
128
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
70 #if SCREENSHOTS |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
71 /* |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
72 Save currencies to favourites to take screenshots for the App Store |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
73 */ |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
74 private func generateFavoritesForScreenshots() { |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
75 let favoriteCurrencies = [ |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
76 "EUR/USD", "BTC/USD", "USD/HKD", "USD/JPY", "AUD/USD", |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
77 "XAU/GBP", "DASH/ETH", "EUR/USD", "XAG/CAD" |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
78 ] |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
79 |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
80 let coreDataCurrencyPairs = favorites.map { $0.currencyPair } |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
81 |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
82 for favoriteCurrency in favoriteCurrencies { |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
83 if !coreDataCurrencyPairs.contains(favoriteCurrency) { |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
84 let favorites = Favorite(context: viewContext) |
87f02d4f9c26
Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
95
diff
changeset
|
85 favorites.currencyPair = favoriteCurrency |
93
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
86 |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
87 do { |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
88 try viewContext.save() |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
89 } catch { |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
90 let nsError = error as NSError |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
91 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
92 } |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
93 } |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
94 } |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
95 } |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
96 #endif |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
97 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
98 |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
99 struct Favorites_Previews: PreviewProvider { |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
100 static var previews: some View { |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
101 Favorites() |
93
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
102 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
103 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
104 } |