Mercurial > public > simoleon
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 |
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 } |