Mercurial > public > simoleon
annotate Simoleon/UI/ConversionBox.swift @ 170:f4e0c414cf6d
minor UI changes
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Thu, 23 Sep 2021 15:14:48 +0200 |
parents | 1940db1ef321 |
children |
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) |
167
1940db1ef321
Minor changes
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
161
diff
changeset
|
38 .padding(.top, 1) |
160
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
39 } else { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
40 ProgressView() |
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 } |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
43 .toolbar { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
44 ToolbarItem(placement: .navigationBarTrailing) { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
45 if isEditing { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
46 Button(action: { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
47 UIApplication.shared.dismissKeyboard() |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
48 isEditing = false |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
49 }) { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
50 Text("Done") |
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 |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
57 private func convert() -> Double { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
58 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
|
59 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
|
60 |
160
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
61 return amount * price |
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 |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
65 struct ConversionBox_Previews: PreviewProvider { |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
66 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
|
67 ConversionBox(currencyConversion: CurrencyConversion()) |
160
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
68 } |
0c589138a6f3
Implement Conversion Box
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
156
diff
changeset
|
69 } |