Mercurial > public > simoleon
annotate Simoleon/Conversion.swift @ 19:94fd7ac93060
Redesign
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sun, 18 Jul 2021 20:00:05 +0100 |
parents | |
children | c3dda63f50ed |
rev | line source |
---|---|
19
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // Conversion.swift |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // Simoleon |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 18/07/2021. |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 import Alamofire |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 struct Conversion: View { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
12 @State private var mainCurrency = "USD" |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
13 @State private var secondaryCurrency = "GBP" |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 @State private var amountToConvert = "1000" |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 @State private var price: Double = 1.00 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 @State private var showingConversion = false |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
17 @State private var showingCurrencySelector = false |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 @State private var selectingMainCurrency = false |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 @State private var currencyPairNotFound = false |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 let currencyMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json") |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
23 var body: some View { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
24 ScrollView(showsIndicators: false) { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
25 VStack(alignment: .leading) { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
26 HStack { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
27 Button(action: { selectingMainCurrency = true; showingCurrencySelector = true }) { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
28 CurrencyButton(currency: $mainCurrency) |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
29 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
30 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
31 Button(action: { selectingMainCurrency = false; showingCurrencySelector = true }) { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
32 CurrencyButton(currency: $secondaryCurrency) |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
33 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
34 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
35 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
36 ConversionBox( |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
37 mainCurrency: $mainCurrency, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
38 secondaryCurrency: $secondaryCurrency, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
39 amountToConvert: $amountToConvert, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
40 price: $price, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
41 showingConversion: $showingConversion, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
42 showingCurrencySelector: $showingCurrencySelector, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
43 currencyPairNotFound: $currencyPairNotFound |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
44 ) |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
45 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
46 .padding() |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
47 .onAppear { requestApi(mainCurrency, secondaryCurrency) } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
48 .onChange(of: showingCurrencySelector, perform: { showingCurrencySelector in |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
49 if !showingCurrencySelector { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
50 requestApi(mainCurrency, secondaryCurrency) |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
51 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
52 }) |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
53 .sheet(isPresented: $showingCurrencySelector) { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
54 CurrencySelector( |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 mainCurrencySelected: $mainCurrency, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
56 secondaryCurrencySelected: $secondaryCurrency, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 showingCurrencySelector: $showingCurrencySelector, |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
58 selectingMainCurrency: $selectingMainCurrency |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
59 ) |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
60 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 .navigationBarHidden(true) |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
63 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
64 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
65 private func requestApi(_ mainCurrency: String, _ secondaryCurrency: String) { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
66 let url = "https://api.1forge.com/quotes?pairs=\(mainCurrency)/\(secondaryCurrency)&api_key=BFWeJQ3jJtqqpDv5ArNis59pAlFcQ4KF" |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
67 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
68 AF.request(url).responseDecodable(of: [CurrencyQuoteModel].self) { response in |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
69 self.showingConversion = false |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
70 self.currencyPairNotFound = false |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
71 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
72 if let currencyQuotes = response.value { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
73 if let price = currencyQuotes.first?.price { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
74 self.price = price |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
75 self.showingConversion = true |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
76 } else { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
77 self.currencyPairNotFound = true |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
78 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
79 } else { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
80 // Handle error |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
81 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
82 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
83 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
84 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
85 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
86 |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
87 struct Conversion_Previews: PreviewProvider { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
88 static var previews: some View { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
89 NavigationView { |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
90 Conversion() |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
91 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
92 } |
94fd7ac93060
Redesign
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
93 } |