annotate Simoleon/Favorites.swift @ 151:bdedd0cc6cd1

Add test flag existence
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Thu, 19 Aug 2021 19:13:04 +0100
parents 23395b98a921
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
145
738fbd3ca671 Fix localization bugs
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 128
diff changeset
23 Text("Search a currency pair and add it to favorites.")
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())
148
23395b98a921 Add app preview interaction
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 145
diff changeset
39 .accessibilityIdentifier("FavoritesList")
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 }
53
b0bce2c8e4a9 Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 47
diff changeset
42 .navigationTitle("Favorites")
22
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
43 .toolbar {
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
44 #if os(iOS)
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
45 EditButton()
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
46 #endif
3596690dda73 Add Config files and implementing Settings
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 21
diff changeset
47 }
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 .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
49 NavigationView { content }
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50 }
95
04feeb708833 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 93
diff changeset
51 .onAppear {
128
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
52 #if SCREENSHOTS
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
53 generateFavoritesForScreenshots()
95
04feeb708833 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 93
diff changeset
54 #endif
04feeb708833 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 93
diff changeset
55 }
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
57
53
b0bce2c8e4a9 Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 47
diff changeset
58 private func removeFromFavorites(offsets: IndexSet) {
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
59 withAnimation {
128
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
60 offsets.map { favorites[$0] }.forEach(viewContext.delete)
47
75c1a05176f6 Refactor code
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 43
diff changeset
61
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
62 do {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
63 try viewContext.save()
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
64 } catch {
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
65 let nsError = error as NSError
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
66 fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
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 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
69 }
95
04feeb708833 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 93
diff changeset
70
128
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
71 #if SCREENSHOTS
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
72 /*
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
73 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
74 */
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
75 private func generateFavoritesForScreenshots() {
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
76 let favoriteCurrencies = [
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
77 "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
78 "XAU/GBP", "DASH/ETH", "EUR/USD", "XAG/CAD"
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
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
81 let coreDataCurrencyPairs = favorites.map { $0.currencyPair }
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
82
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
83 for favoriteCurrency in favoriteCurrencies {
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
84 if !coreDataCurrencyPairs.contains(favoriteCurrency) {
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
85 let favorites = Favorite(context: viewContext)
87f02d4f9c26 Add custom build configuration
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 95
diff changeset
86 favorites.currencyPair = favoriteCurrency
93
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 do {
529feb1fc8d5 Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 84
diff changeset
89 try viewContext.save()
529feb1fc8d5 Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 84
diff changeset
90 } catch {
529feb1fc8d5 Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 84
diff changeset
91 let nsError = error as NSError
529feb1fc8d5 Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 84
diff changeset
92 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
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 }
529feb1fc8d5 Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 84
diff changeset
96 }
95
04feeb708833 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 93
diff changeset
97 #endif
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
98 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
99
53
b0bce2c8e4a9 Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 47
diff changeset
100 struct Favorites_Previews: PreviewProvider {
21
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
101 static var previews: some View {
53
b0bce2c8e4a9 Refactor UK spelling to US
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 47
diff changeset
102 Favorites()
93
529feb1fc8d5 Added UI Tests for capture screenshots
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 84
diff changeset
103 .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
104 }
c3dda63f50ed Added Core Data and UI changes
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
105 }