Mercurial > public > simoleon
annotate Simoleon/Favorites.swift @ 95:04feeb708833
Minor UI updates
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Tue, 03 Aug 2021 15:02:40 +0100 |
parents | 529feb1fc8d5 |
children | 87f02d4f9c26 |
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)], |
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
14 animation: .default) private var favorite: 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 { |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
18 if favorite.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) |
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
22 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
|
23 .padding(.top, 5) |
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
24 } |
84
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
25 .multilineTextAlignment(.center) |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
26 .foregroundColor(.secondary) |
84
98852b65438c
Changed placeholder when Core Data is empty
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
75
diff
changeset
|
27 .padding(.horizontal, 50) |
27
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
28 } else { |
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
29 List { |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
30 ForEach(favorite) { favorite in |
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
31 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
|
32 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
|
33 } |
d95582268b44
Fix bug CoreData and minor UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
24
diff
changeset
|
34 } |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
35 .onDelete(perform: removeFromFavorites) |
24
bda6a55d027a
Add Conversion to Favourites
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
22
diff
changeset
|
36 } |
30
f76d0e26c178
Add localisation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
29
diff
changeset
|
37 .listStyle(PlainListStyle()) |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
38 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
39 } |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
40 .navigationTitle("Favorites") |
22
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
41 .toolbar { |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
42 #if os(iOS) |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
43 EditButton() |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
44 #endif |
3596690dda73
Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
21
diff
changeset
|
45 } |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
46 .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
|
47 NavigationView { content } |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
48 } |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
49 .onAppear { |
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
50 #if DEBUG |
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
51 generateFavoritesToScreenshots() |
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
52 #endif |
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
53 } |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
54 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
56 private func removeFromFavorites(offsets: IndexSet) { |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 withAnimation { |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
58 offsets.map { favorite[$0] }.forEach(viewContext.delete) |
47
75c1a05176f6
Refactor code
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
43
diff
changeset
|
59 |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
60 do { |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 try viewContext.save() |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 } catch { |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
63 let nsError = error as NSError |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
64 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
65 } |
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 } |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
68 |
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
69 #if DEBUG |
93
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
70 private func generateFavoritesToScreenshots() { |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
71 if favorite.isEmpty { |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
72 let favoriteCurrencies = [ |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
73 "EUR/USD", "BTC/USD", "USD/HKD", "USD/JPY", "AUD/USD", |
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
74 "XAU/GBP", "DASH/ETH", "EUR/USD", "XAG/CAD" |
93
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
75 ] |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
76 |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
77 for favoriteCurrency in favoriteCurrencies { |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
78 let favorite = Favorite(context: viewContext) |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
79 favorite.currencyPair = favoriteCurrency |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
80 |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
81 do { |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
82 try viewContext.save() |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
83 } catch { |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
84 let nsError = error as NSError |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
85 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
|
86 } |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
87 } |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
88 } |
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
89 } |
95
04feeb708833
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
93
diff
changeset
|
90 #endif |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
91 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
92 |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
93 struct Favorites_Previews: PreviewProvider { |
21
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
94 static var previews: some View { |
53
b0bce2c8e4a9
Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
47
diff
changeset
|
95 Favorites() |
93
529feb1fc8d5
Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
84
diff
changeset
|
96 .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
|
97 } |
c3dda63f50ed
Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
98 } |