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