annotate LazyBear/Views/Global Helpers/StockItem.swift @ 357:eb97439e46cd

Implement ExtensiveList in HomeView
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Thu, 15 Apr 2021 23:37:25 +0200
parents 5ccceb527178
children f3cb5bdea8e5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
342
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
1 //
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
2 // StockItem.swift
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
3 // LazyBear
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
4 //
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 28/3/21.
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
6 //
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
7
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
8 import SwiftUI
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
9
357
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
10 enum OrientationView {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
11 case horizontal, vertical
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
12 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
13
342
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
14 struct StockItem: View {
346
80bfa88c6b0f Implementing Prop API
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 345
diff changeset
15 var company: QuoteModel
80bfa88c6b0f Implementing Prop API
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 345
diff changeset
16 var intradayPrices: [IntradayPricesModel]?
357
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
17 var orientation: OrientationView
342
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
18
357
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
19 var body: some View {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
20 if orientation == .vertical {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
21 return AnyView(VerticalStockRow(company: company, intradayPrices: intradayPrices))
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
22 } else {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
23 return AnyView(HorizontalStockRow(company: company, intradayPrices: intradayPrices))
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
24 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
25 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
26 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
27
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
28 struct StockItem_Previews: PreviewProvider {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
29 static var previews: some View {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
30 StockItem(
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
31 company: QuoteModel(companyName: "apple inc", symbol: "aapl", latestPrice: 130.3, changePercent: 0.03),
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
32 intradayPrices: [IntradayPricesModel(open: 130.3), IntradayPricesModel(open: 132.3)], orientation: .horizontal
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
33 )
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
34 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
35 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
36
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
37
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
38 struct VerticalStockRow: View {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
39 var company: QuoteModel
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
40 var intradayPrices: [IntradayPricesModel]?
342
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
41
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
42 var body: some View {
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
43 RoundedRectangle(cornerRadius: 20)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
44 .foregroundColor(Color(.secondarySystemBackground))
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
45 .aspectRatio(0.8, contentMode: .fit)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
46 .clipShape(RoundedRectangle(cornerRadius: 20))
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
47 .overlay(
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
48 VStack(alignment: .leading) {
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
49 Group {
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
50 Text(company.symbol.uppercased())
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
51 .fontWeight(.semibold)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
52 .padding(.top)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
53
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
54 Text(company.companyName.capitalized)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
55 .font(.callout)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
56 .fontWeight(.semibold)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
57 .opacity(0.6)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
58 .lineLimit(1)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
59
357
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
60 PriceView(latestPrice: company.latestPrice, changePercent: company.changePercent, align: .leading)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
61 .padding(.top)
342
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
62
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
63 }
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
64 .padding(.horizontal)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
65
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
66 Spacer()
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
67
349
5ccceb527178 Implementing new internal API
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 346
diff changeset
68 if let prices = intradayPrices?.compactMap { $0.open } {
342
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
69 LineView(data: prices)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
70 .foregroundColor(company.changePercent < 0 ? .red: .green)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
71 .padding(.vertical)
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
72 .clipped()
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
73 }
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
74
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
75 }
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
76 ,alignment: .leading
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
77 )
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
78 }
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
79 }
a6c49f1409f3 Implementing Watchlists
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
80
357
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
81
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
82 struct HorizontalStockRow: View {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
83 var company: QuoteModel
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
84 var intradayPrices: [IntradayPricesModel]?
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
85
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
86 var body: some View {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
87 HStack {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
88 VStack(alignment: .leading) {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
89 Text(company.symbol.uppercased())
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
90 .fontWeight(.semibold)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
91
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
92 Text(company.companyName.capitalized)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
93 .font(.callout)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
94 .fontWeight(.semibold)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
95 .opacity(0.6)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
96 .lineLimit(1)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
97 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
98
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
99 Spacer()
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
100 if let prices = intradayPrices?.compactMap { $0.open } {
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
101 LineView(data: prices)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
102 .foregroundColor(company.changePercent < 0 ? .red: .green)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
103 .frame(width: 80)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
104 .padding(.vertical, 10)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
105 .padding(.leading)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
106 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
107
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
108 PriceView(latestPrice: company.latestPrice, changePercent: company.changePercent, align: .trailing)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
109 // Avoid moving LineView along the HStack when numbers increases
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
110 .frame(minWidth: 80, alignment: .trailing)
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
111 }
eb97439e46cd Implement ExtensiveList in HomeView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 349
diff changeset
112 .padding(5)
345
fde2b30c719e Implementing Networking in ProfileView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 343
diff changeset
113 }
fde2b30c719e Implementing Networking in ProfileView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 343
diff changeset
114 }