Mercurial > public > simoleon
annotate Simoleon/Helpers/CurrencyConversion.swift @ 185:2fc95efcb1ee
connect backend
author | Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com> |
---|---|
date | Wed, 22 Dec 2021 16:12:23 +0100 |
parents | |
children | 1ebd1c5dd302 |
rev | line source |
---|---|
185
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // CurrencyConversion.swift |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // Simoleon |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 21/12/21. |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 struct CurrencyConversion: View { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 var conversion: CurrencyConversionResponse |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
12 var currencyCode: String |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
13 @Binding var showConversion: Bool |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 var body: some View { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 VStack { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
17 RoundedRectangle(cornerRadius: 15) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 .frame(height: 60) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 .foregroundColor(Color(.secondarySystemBackground)) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 .overlay( |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 VStack { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 if showConversion { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
23 let amount = conversion.message.first!.amount |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
24 let formattedAmount = format(currency: amount) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
25 Text(formattedAmount) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
26 .font(.title2) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
27 } else { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
28 ProgressView() |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
29 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
30 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
31 .padding(.leading, 15) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
32 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
33 , alignment: .leading |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
34 ) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
35 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
36 if showConversion { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
37 let timestamp = conversion.message.first!.timestamp |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
38 Text("Last updated: \(converToDate(epoch: timestamp))") |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
39 .font(.caption) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
40 .opacity(0.6) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
41 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
42 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
43 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
44 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
45 // Format conversion to specific currency format |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
46 private func format(currency: Double) -> String { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
47 let formatter = NumberFormatter() |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
48 formatter.currencyCode = currencyCode |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
49 formatter.numberStyle = .currency |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
50 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
51 return formatter.string(from: NSNumber(value: currency))! |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
52 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
53 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
54 // COnvert epoch to date |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 private func converToDate(epoch: Int) -> String { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
56 let dateFormatter = DateFormatter() |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 dateFormatter.timeStyle = DateFormatter.Style.medium |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
58 dateFormatter.dateStyle = DateFormatter.Style.medium |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
59 let date = Date(timeIntervalSince1970: TimeInterval(epoch/1000)) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
60 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 return dateFormatter.string(from: date) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
63 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
64 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
65 struct CurrencyConversion_Previews: PreviewProvider { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
66 static var previews: some View { |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
67 CurrencyConversion( |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
68 conversion: |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
69 CurrencyConversionResponse( |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
70 message: [ |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
71 CurrencyConversionResult( |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
72 rate: 1.31, |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
73 timestamp: 1288282222000, |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
74 amount: 95.63 |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
75 ) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
76 ] |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
77 ), |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
78 currencyCode: "CHF", |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
79 showConversion: .constant(true) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
80 ) |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
81 } |
2fc95efcb1ee
connect backend
Dennis Concepcion Martin <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
82 } |