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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }