comparison Simoleon/Conversion.swift @ 24:bda6a55d027a

Add Conversion to Favourites
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Tue, 20 Jul 2021 10:24:21 +0100
parents 699b5bb619db
children 933d9ab04374
comparison
equal deleted inserted replaced
23:699b5bb619db 24:bda6a55d027a
7 7
8 import SwiftUI 8 import SwiftUI
9 import Alamofire 9 import Alamofire
10 10
11 struct Conversion: View { 11 struct Conversion: View {
12 @Environment(\.managedObjectContext) private var viewContext 12 var fetchUserSettings: Bool
13 @FetchRequest(sortDescriptors: []) private var userSettings: FetchedResults<UserSettings> 13 @State var currencyPair: String
14 14
15 @State private var currencyPair = "USD/GBP"
16 @State private var amountToConvert = "1000" 15 @State private var amountToConvert = "1000"
17 @State private var price: Double = 1.00 16 @State private var price: Double = 1.00
18 @State private var showingConversion = false 17 @State private var showingConversion = false
19 @State private var showingCurrencySelector = false 18 @State private var showingCurrencySelector = false
20 @State private var isEditing = false 19 @State private var isEditing = false
21 20
21 @Environment(\.managedObjectContext) private var viewContext
22 @FetchRequest(sortDescriptors: []) private var userSettings: FetchedResults<UserSettings>
22 let currencyMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json") 23 let currencyMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json")
23 24
24 var body: some View { 25 var body: some View {
25 ScrollView(showsIndicators: false) { 26 ScrollView(showsIndicators: false) {
26 VStack(alignment: .leading) { 27 VStack(alignment: .leading) {
44 isEditing: $isEditing 45 isEditing: $isEditing
45 ) 46 )
46 } 47 }
47 .padding() 48 .padding()
48 .onAppear { 49 .onAppear {
49 fetchUserSettings() 50 if fetchUserSettings {
51 fetchingUserSettings()
52 }
53
50 request(currencyPair) 54 request(currencyPair)
51 } 55 }
52 .onChange(of: showingCurrencySelector, perform: { showingCurrencySelector in 56 .onChange(of: showingCurrencySelector, perform: { showingCurrencySelector in
53 if !showingCurrencySelector { 57 if !showingCurrencySelector {
54 request(currencyPair) 58 request(currencyPair)
67 isEditing = false 71 isEditing = false
68 }) 72 })
69 } 73 }
70 } 74 }
71 } 75 }
72 .if(UIDevice.current.userInterfaceIdiom == .phone) { content in 76 .if(UIDevice.current.userInterfaceIdiom == .phone && fetchUserSettings) { content in
73 NavigationView { content } 77 NavigationView { content }
74 } 78 }
75 } 79 }
76 80
77 private func request(_ currencyPair: String) { 81 private func request(_ currencyPair: String) {
90 94
91 /* 95 /*
92 1) Fetch default currency from User Settings 96 1) Fetch default currency from User Settings
93 2) Change State var currencyPair 97 2) Change State var currencyPair
94 */ 98 */
95 private func fetchUserSettings() { 99 private func fetchingUserSettings() {
96 if let userSettings = userSettings.first { 100 if let userSettings = userSettings.first {
97 self.currencyPair = userSettings.defaultCurrency ?? "USD/GBP" 101 self.currencyPair = userSettings.defaultCurrency ?? "USD/GBP"
98 } 102 }
99 } 103 }
100 } 104 }
101 105
102 106
103 struct Conversion_Previews: PreviewProvider { 107 struct Conversion_Previews: PreviewProvider {
104 static var previews: some View { 108 static var previews: some View {
105 Conversion() 109 Conversion(fetchUserSettings: true, currencyPair: "USD/GBP")
106 } 110 }
107 } 111 }