Mercurial > public > lazybear
annotate LazyBear/Views/Company/Helpers/KeyStatsHelper.swift @ 447:8621ba6fd457
Fixes #48
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Wed, 23 Jun 2021 10:54:47 +0200 |
parents | 7d1c4dc8d1d8 |
children | f71761f166f2 |
rev | line source |
---|---|
439
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // KeyStatsHelper.swift |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // LazyBear |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 20/6/21. |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 struct KeyStatsHelper: View { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 var keyStats: KeyStatsModel? |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
12 let displayWords: DisplayWordsModel = parseJSON("DisplayWords.json") |
441
417148200aaf
Change background color and minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
440
diff
changeset
|
13 @Environment(\.colorScheme) private var colorScheme |
439
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
14 |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 var body: some View { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
16 if let keyStats = keyStats { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
17 ScrollView(.horizontal, showsIndicators: false) { |
441
417148200aaf
Change background color and minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
440
diff
changeset
|
18 HStack(spacing: 20) { |
439
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
19 |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
20 let mirror = Mirror(reflecting: keyStats) |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
21 ForEach(Array(mirror.children), id: \.label) { child in /// Iterate over each variable within the class |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
22 |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
23 if let unwrappedValue = unwrapAnyOptional(value: child.value) { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
24 let label = String(child.label!) |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
25 |
447
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
445
diff
changeset
|
26 NavigationLink(destination: KeyStatsList(keyStats: keyStats) |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
445
diff
changeset
|
27 .navigationTitle("Key Stats") |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
445
diff
changeset
|
28 ) { |
440
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
29 Capsule() |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
30 .frame(width: 250, height: 40) |
441
417148200aaf
Change background color and minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
440
diff
changeset
|
31 .foregroundColor(Color("customSecondaryBackground")) |
417148200aaf
Change background color and minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
440
diff
changeset
|
32 .if(colorScheme == .light) { content in |
417148200aaf
Change background color and minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
440
diff
changeset
|
33 content.shadow(color: Color(.systemGray).opacity(0.25), radius: 10, x: 0.0, y: 0.0) |
417148200aaf
Change background color and minor UI updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
440
diff
changeset
|
34 } |
440
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
35 .overlay( |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
36 HStack { |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
37 Text("\(displayWords.keyStats[label]!):") |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
38 .font(.callout) |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
39 .fontWeight(.semibold) |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
40 .lineLimit(1) |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
41 |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
42 Spacer() |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
43 Text(unwrappedValue) |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
44 .font(.callout) |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
45 .lineLimit(1) |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
46 } |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
47 .padding() |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
48 ) |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
49 } |
01fa77358b82
Fixes #47
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
439
diff
changeset
|
50 .buttonStyle(PlainButtonStyle()) |
439
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
51 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
52 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
53 } |
442
6eae10397501
Implementing NewsHelper in CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
441
diff
changeset
|
54 .frame(height: 70) |
439
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
55 .padding(.horizontal) |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
56 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
58 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
59 |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
60 /* |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 Unwrap optional Int, Double, String into String |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 */ |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
63 private func unwrapAnyOptional(value: Any) -> String? { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
64 if let value = value as? Int { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
65 return "\(value)" |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
66 } else if let value = value as? Double { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
67 return String(format: "%.3f", value) |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
68 } else { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
69 return value as? String |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
70 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
71 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
72 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
73 |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
74 struct KeyStatsHelper_Previews: PreviewProvider { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
75 static var previews: some View { |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
76 KeyStatsHelper(keyStats: |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
77 KeyStatsModel( |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
78 companyName: "Apple inc", |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
79 employees: 123, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
80 marketcap: 123, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
81 float: 123, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
82 sharesOutstanding: 123, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
83 beta: 123.12, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
84 peRatio: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
85 dividendYield: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
86 ttmDividendRate: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
87 ttmEPS: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
88 avg10Volume: 123, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
89 avg30Volume: 123, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
90 day50MovingAvg: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
91 day200MovingAvg: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
92 week52Change: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
93 week52High: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
94 week52Low: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
95 week52HighSplitAdjustOnly: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
96 week52LowSplitAdjustOnly: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
97 maxChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
98 ytdChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
99 day5ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
100 day30ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
101 month1ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
102 month3ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
103 month6ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
104 year1ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
105 year2ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
106 year5ChangePercent: 123.4, |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
107 exDividendDate: "2020-01-01", |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
108 nextDividendDate: "2020-01-01", |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
109 nextEarningsDate: "2020-01-01" |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
110 ) |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
111 ) |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
112 } |
aa1f4b614b2b
Implementing CompanyView
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
113 } |