annotate Simoleon/Helpers/CurrencyRow.swift @ 11:a62e5e4a4f02

Implementing networking
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Tue, 13 Jul 2021 12:14:42 +0100
parents ed35ef4738b9
children cdc5f728b105
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)
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
17 .rectangleModifier(Color("Shadow"), 100)
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)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 .rectangleModifier(Color(.systemBackground), 100)
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")
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
40 Text("\(currencyQuote.bid!, specifier: "%.4f")")
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 .fontWeight(.semibold)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 }
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 .padding(.trailing)
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 VStack(alignment: .leading) {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 Text("Ask")
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
48 Text("\(currencyQuote.ask!, specifier: "%.4f")")
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 .fontWeight(.semibold)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51 }
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
52
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
53 Spacer()
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54 }
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
55 .padding(.horizontal)
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 )
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
57 .offset(x: -10.0, y: -120.0)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
58 .padding(.bottom, -120)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
59 }
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
60 .padding(.leading, 10)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
61 .padding(.horizontal)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
62 }
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
63 }
11
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
64 extension RoundedRectangle {
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
65 func rectangleModifier(_ colour: Color, _ height: CGFloat) -> some View {
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
66 self
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
67 .strokeBorder(Color("Border"), lineWidth: 2)
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
68 .background(RoundedRectangle(cornerRadius: 10).foregroundColor(colour))
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
69 .frame(height: height)
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
70
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
71 }
a62e5e4a4f02 Implementing networking
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 10
diff changeset
72 }
6
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
73
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
74 struct CurrencyRow_Previews: PreviewProvider {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
75 static var previews: some View {
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
76 let currencyQuote: CurrencyQuoteModel = parseJson("CurrencyQuoteData.json")
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
77
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
78 CurrencyRow(currencyQuote: currencyQuote)
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
79 }
3d6f56b0d4ed Implementing first UI layout
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
80 }