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
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 {
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 }