annotate Simoleon/UI/ConversionBox.swift @ 162:f5de15e06c77

Refactor code
author Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
date Tue, 31 Aug 2021 13:04:28 +0100
parents 3913aff613e8
children 1940db1ef321
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
156
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
2 // ConversionBox.swift
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
3 // Simoleon
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
4 //
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
5 // Created by Dennis Concepción Martín on 18/07/2021.
156
84137052813d Refactor code
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
7
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
8 import SwiftUI
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
9
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
10 struct ConversionBox: View {
161
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
11 @ObservedObject var currencyConversion: CurrencyConversion
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
12 @State private var amount = ""
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
13 @State private var isEditing = false
161
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
14
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
15 let networkHelper = NetworkHelper()
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
16 let currencyDetails: [String: CurrencyModel] = try! readJson(from: "Currencies.json")
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
17
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
18 var body: some View {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
19 VStack(alignment: .leading) {
161
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
20 let baseCurrencyName = currencyDetails[currencyConversion.baseSymbol]!.name
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
21 Text("\(baseCurrencyName) (\(currencyConversion.baseSymbol))")
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
22 .font(.callout)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
23 .fontWeight(.semibold)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
24
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
25 ConversionTextfield(amount: $amount, isEditing: $isEditing)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
26 Divider()
161
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
27
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
28 let quoteCurrencyName = currencyDetails[currencyConversion.quoteSymbol]!.name
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
29 Text("\(quoteCurrencyName) (\(currencyConversion.quoteSymbol))")
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
30 .font(.callout)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
31 .fontWeight(.semibold)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
32
161
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
33 if currencyConversion.isShowing {
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
34 let conversion = convert()
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
35 Text("\(conversion, specifier: "%.2f")")
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
36 .font(Font.title.weight(.semibold))
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
37 .lineLimit(1)
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
38 } else {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
39 ProgressView()
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
40 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
41 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
42 .toolbar {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
43 ToolbarItem(placement: .navigationBarTrailing) {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
44 if isEditing {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
45 Button(action: {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
46 UIApplication.shared.dismissKeyboard()
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
47 isEditing = false
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
48 }) {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
49 Text("Done")
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
50 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
51 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
52 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
53 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
54 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
55
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
56 private func convert() -> Double {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
57 guard let amount = Double(amount) else { return 0 }
161
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
58 guard let price = currencyConversion.quote.price else { return 0 }
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
59
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
60 return amount * price
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
61 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
62 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
63
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
64 struct ConversionBox_Previews: PreviewProvider {
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
65 static var previews: some View {
161
3913aff613e8 Fix bug that didn't request API on symbol change
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 160
diff changeset
66 ConversionBox(currencyConversion: CurrencyConversion())
160
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
67 }
0c589138a6f3 Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents: 156
diff changeset
68 }