annotate Simoleon/Helpers/CurrencyRow.swift @ 14:03ce7421c6f4

Minor UI updates
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Wed, 14 Jul 2021 10:06:37 +0100
parents cdc5f728b105
children a02f463aa906
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // CurrencyRow.swift
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // Simoleon
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 11/07/2021.
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10 struct CurrencyRow: View {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 var currencyQuote: CurrencyQuoteModel
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
12 let currenciesMetadata: [String: CurrencyMetadataModel] = parseJson("CurrencyMetadata.json")
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 var body: some View {
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
15 VStack(alignment: .leading) {
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16 RoundedRectangle(cornerRadius: 10)
14
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
17 .rectangleModifier(Color("Shadow"), 80)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 RoundedRectangle(cornerRadius: 10)
14
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
20 .rectangleModifier(Color(.systemBackground), 80)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 .overlay(
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22 HStack {
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
23 let symbols = currencyQuote.symbol!.split(separator: "/")
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
24 let mainCurrencyFlag = currenciesMetadata[String(symbols[0])]!.flag
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
25 let secondaryCurrencyFlag = currenciesMetadata[String(symbols[1])]!.flag
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
27 FlagPair(mainCurrencyFlag: mainCurrencyFlag, secondaryCurrencyFlag: secondaryCurrencyFlag)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
28
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
29 VStack(alignment: .leading) {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
30 Text("\(String(symbols[0]))")
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
31 .fontWeight(.semibold)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 Text("\(String(symbols[1]))")
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 .fontWeight(.semibold)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 }
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 .padding(.horizontal)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 VStack(alignment: .leading) {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 Text("Bid")
13
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
40 let bid = currencyQuote.bid!
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
41 Text("\(bid, specifier: createSpecifier(bid))")
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 .fontWeight(.semibold)
13
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
43 .lineLimit(1)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 }
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46 .padding(.trailing)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 VStack(alignment: .leading) {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 Text("Ask")
13
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
50 let ask = currencyQuote.ask!
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
51 Text("\(ask, specifier: createSpecifier(ask))")
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 .fontWeight(.semibold)
13
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
53 .lineLimit(1)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
55 }
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
56
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
57 Spacer()
14
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
58
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
59 }
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
60 .padding(.horizontal)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
61 )
14
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
62 .offset(x: -6.0, y: -95.0)
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
63 .padding(.bottom, -95)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
64 }
14
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
65 .padding(.leading, 6)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
66 .padding(.horizontal)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
67 }
13
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
68
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
69 /*
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
70 Choose how many decimals depending on whether the price is hundreds, thousands, etc
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
71 */
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
72
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
73 private func createSpecifier(_ amount: Float) -> String {
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
74 if amount >= 10 {
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
75 return "%.2f"
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
76 } else {
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
77 return "%.4f"
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
78 }
cdc5f728b105 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 11
diff changeset
79 }
14
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
80
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
81 /*
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
82 Convert unix time into human readable
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
83 */
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
84 private func convertUnixTime(_ timestamp: Int) -> String {
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
85 let now = Date()
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
86 let convertedDate = Date(timeIntervalSince1970: TimeInterval(timestamp))
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
87 let formatter = DateComponentsFormatter()
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
88 formatter.unitsStyle = .abbreviated
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
89
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
90 return formatter.string(from: convertedDate, to: now)!
03ce7421c6f4 Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 13
diff changeset
91 }
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
92 }
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
93 extension RoundedRectangle {
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
94 func rectangleModifier(_ colour: Color, _ height: CGFloat) -> some View {
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
95 self
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
96 .strokeBorder(Color("Border"), lineWidth: 2)
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
97 .background(RoundedRectangle(cornerRadius: 10).foregroundColor(colour))
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
98 .frame(height: height)
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
99
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
100 }
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
101 }
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
102
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
103 struct CurrencyRow_Previews: PreviewProvider {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
104 static var previews: some View {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
105 let currencyQuote: CurrencyQuoteModel = parseJson("CurrencyQuoteData.json")
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
106
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
107 CurrencyRow(currencyQuote: currencyQuote)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
108 }
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
109 }