Mercurial > public > simoleon
annotate Simoleon/ConversionView.swift @ 159:35628bac01f5
Fix a bug that selected wrong symbol in pair
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sat, 28 Aug 2021 19:18:50 +0100 |
parents | 8c3bbd640103 |
children | 0c589138a6f3 |
rev | line source |
---|---|
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // ConversionView.swift |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // Simoleon |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 18/07/2021. |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 import Purchases |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 struct ConversionView: View { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
12 var showNavigationView: Bool? |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
13 @State var currencyPair: CurrencyPairModel |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 // Conversion |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 @State private var showingConversion = false |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
17 @State private var amountIsEditing = false |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 @State private var amountToConvert = "" |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 @State private var price: Double = 0 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 var body: some View { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 ScrollView(showsIndicators: false) { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
23 VStack(alignment: .leading) { |
159
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
24 HStack { |
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
25 CurrencySelector(currencyPair: currencyPair) |
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
26 FavoriteButton(currencyPair: currencyPair) |
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
27 } |
157
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
28 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
29 .padding() |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
30 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
31 .onAppear(perform: createUrlAndRequest) |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
32 .navigationTitle("Convert") |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
33 .toolbar { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
34 ToolbarItem(placement: .navigationBarTrailing) { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
35 if amountIsEditing { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
36 Button(action: { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
37 UIApplication.shared.dismissKeyboard() |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
38 amountIsEditing = false |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
39 }) { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
40 Text("Done") |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
41 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
42 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
43 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
44 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
45 .if(UIDevice.current.userInterfaceIdiom == .phone && showNavigationView ?? true) { content in |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
46 NavigationView { content } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
47 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
48 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
49 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
50 private func createUrlAndRequest() { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
51 showingConversion = false |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
52 let baseUrl = readConfigVariable(withKey: "API_URL")! |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
53 let apiKey = readConfigVariable(withKey: "API_KEY")! |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
54 let currencyPair = "\(currencyPair.baseSymbol)/\(currencyPair.quoteSymbol)" |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 let url = "\(baseUrl)quotes?pairs=\(currencyPair)&api_key=\(apiKey)" |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
56 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 httpRequest(url: url, model: [CurrencyQuoteModel].self) { response in |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
58 if let price = response.first?.price { |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
59 self.price = price |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
60 showingConversion = true |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
63 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
64 } |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
65 |
8c3bbd640103
Implement Currency Selector
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
66 |
159
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
67 struct ConversionView_Previews: PreviewProvider { |
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
68 static var previews: some View { |
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
69 ConversionView(showNavigationView: true, currencyPair: CurrencyPairModel(baseSymbol: "USD", quoteSymbol: "EUR")) |
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
70 } |
35628bac01f5
Fix a bug that selected wrong symbol in pair
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
157
diff
changeset
|
71 } |