Mercurial > public > simoleon
annotate Simoleon/Helpers/CurrencyRow.swift @ 15:a02f463aa906
Testing three column ipad navigation
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Thu, 15 Jul 2021 10:58:29 +0100 |
parents | 03ce7421c6f4 |
children | aec2e86e5dbd |
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 { |
15
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
15 RoundedRectangle(cornerRadius: 10) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
16 .rectangleModifier(Color(.systemBackground), 80) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
17 .overlay( |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
18 HStack { |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
19 let symbols = currencyQuote.symbol!.split(separator: "/") |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
20 let mainCurrencyFlag = currenciesMetadata[String(symbols[0])]!.flag |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
21 let secondaryCurrencyFlag = currenciesMetadata[String(symbols[1])]!.flag |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
22 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
23 FlagPair(mainCurrencyFlag: mainCurrencyFlag, secondaryCurrencyFlag: secondaryCurrencyFlag) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
24 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
25 VStack(alignment: .leading) { |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
26 Text("\(String(symbols[0]))") |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
27 .fontWeight(.semibold) |
6
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
28 |
15
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
29 Text("\(String(symbols[1]))") |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
30 .fontWeight(.semibold) |
6
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
31 } |
11
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
32 .padding(.horizontal) |
15
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
33 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
34 VStack(alignment: .leading) { |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
35 Text("Bid") |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
36 let bid = currencyQuote.bid! |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
37 Text("\(bid, specifier: createSpecifier(bid))") |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
38 .fontWeight(.semibold) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
39 .lineLimit(1) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
40 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
41 } |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
42 .padding(.trailing) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
43 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
44 VStack(alignment: .leading) { |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
45 Text("Ask") |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
46 let ask = currencyQuote.ask! |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
47 Text("\(ask, specifier: createSpecifier(ask))") |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
48 .fontWeight(.semibold) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
49 .lineLimit(1) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
50 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
51 } |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
52 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
53 Spacer() |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
54 |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
55 } |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
56 .padding(.horizontal) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
57 ) |
a02f463aa906
Testing three column ipad navigation
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
14
diff
changeset
|
58 .padding(.horizontal) |
6
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
59 } |
13
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
60 |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
61 /* |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
62 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
|
63 */ |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
64 |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
65 private func createSpecifier(_ amount: Float) -> String { |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
66 if amount >= 10 { |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
67 return "%.2f" |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
68 } else { |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
69 return "%.4f" |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
70 } |
cdc5f728b105
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
11
diff
changeset
|
71 } |
14
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
72 |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
73 /* |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
74 Convert unix time into human readable |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
75 */ |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
76 private func convertUnixTime(_ timestamp: Int) -> String { |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
77 let now = Date() |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
78 let convertedDate = Date(timeIntervalSince1970: TimeInterval(timestamp)) |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
79 let formatter = DateComponentsFormatter() |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
80 formatter.unitsStyle = .abbreviated |
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 return formatter.string(from: convertedDate, to: now)! |
03ce7421c6f4
Minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
13
diff
changeset
|
83 } |
6
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
84 } |
11
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
85 extension RoundedRectangle { |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
86 func rectangleModifier(_ colour: Color, _ height: CGFloat) -> some View { |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
87 self |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
88 .strokeBorder(Color("Border"), lineWidth: 2) |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
89 .background(RoundedRectangle(cornerRadius: 10).foregroundColor(colour)) |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
90 .frame(height: height) |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
91 |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
92 } |
a62e5e4a4f02
Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
10
diff
changeset
|
93 } |
6
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
94 |
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
95 struct CurrencyRow_Previews: PreviewProvider { |
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
96 static var previews: some View { |
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
97 let currencyQuote: CurrencyQuoteModel = parseJson("CurrencyQuoteData.json") |
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
98 |
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
99 CurrencyRow(currencyQuote: currencyQuote) |
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
100 } |
3d6f56b0d4ed
Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
101 } |