changeset 416:1662a41e2c1a

KeyStatsView implemented
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Wed, 09 Jun 2021 20:26:28 +0200
parents 34f9e408b861
children 5f21f7c23c5e
files LazyBear.xcodeproj/project.pbxproj LazyBear.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate LazyBear/Global Models/DisplayWordsModel.swift LazyBear/Global Models/KeyStatsModel.swift LazyBear/Resources/DisplayWords.json LazyBear/Views/Company/Helpers/StatsView.swift
diffstat 6 files changed, 148 insertions(+), 69 deletions(-) [+]
line wrap: on
line diff
--- a/LazyBear.xcodeproj/project.pbxproj	Wed Jun 09 12:49:17 2021 +0200
+++ b/LazyBear.xcodeproj/project.pbxproj	Wed Jun 09 20:26:28 2021 +0200
@@ -69,6 +69,8 @@
 		95A7C066261639E0003E2EC1 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A7C065261639DF003E2EC1 /* SearchView.swift */; };
 		95A7C0742616409D003E2EC1 /* ParseJSON.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A7C0732616409D003E2EC1 /* ParseJSON.swift */; };
 		95AD4A2D26078C1400498079 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AD4A2C26078C1400498079 /* ContentView.swift */; };
+		95AF0FF72671320F0049C4AB /* DisplayWords.json in Resources */ = {isa = PBXBuildFile; fileRef = 95AF0FF62671320F0049C4AB /* DisplayWords.json */; };
+		95AF0FF92671342E0049C4AB /* DisplayWordsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95AF0FF82671342E0049C4AB /* DisplayWordsModel.swift */; };
 		95BB05B22670B8C3005A2029 /* KeyStatsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BB05B12670B8C3005A2029 /* KeyStatsModel.swift */; };
 		95BD2FAE26341BD1008B6752 /* TextfieldAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BD2FAD26341BD1008B6752 /* TextfieldAlert.swift */; };
 		95BD2FB326341D36008B6752 /* BlurBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95BD2FB226341D36008B6752 /* BlurBackground.swift */; };
@@ -174,6 +176,8 @@
 		95A7C065261639DF003E2EC1 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; };
 		95A7C0732616409D003E2EC1 /* ParseJSON.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ParseJSON.swift; sourceTree = "<group>"; };
 		95AD4A2C26078C1400498079 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = "<group>"; };
+		95AF0FF62671320F0049C4AB /* DisplayWords.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = DisplayWords.json; sourceTree = "<group>"; };
+		95AF0FF82671342E0049C4AB /* DisplayWordsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisplayWordsModel.swift; sourceTree = "<group>"; };
 		95BB05B12670B8C3005A2029 /* KeyStatsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyStatsModel.swift; sourceTree = "<group>"; };
 		95BD2FAD26341BD1008B6752 /* TextfieldAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextfieldAlert.swift; sourceTree = "<group>"; };
 		95BD2FB226341D36008B6752 /* BlurBackground.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurBackground.swift; sourceTree = "<group>"; };
@@ -292,6 +296,7 @@
 			isa = PBXGroup;
 			children = (
 				9523ED412615BDB2006D3D6F /* phrases.json */,
+				95AF0FF62671320F0049C4AB /* DisplayWords.json */,
 			);
 			path = Resources;
 			sourceTree = "<group>";
@@ -320,6 +325,7 @@
 				95602703265ABB990046F97E /* InsiderRosterModel.swift */,
 				95CCFB55266E7A0F00C384A1 /* InsiderTransactionModel.swift */,
 				95BB05B12670B8C3005A2029 /* KeyStatsModel.swift */,
+				95AF0FF82671342E0049C4AB /* DisplayWordsModel.swift */,
 			);
 			path = "Global Models";
 			sourceTree = "<group>";
@@ -666,6 +672,7 @@
 			files = (
 				95672B9625DDA54700DCBE4A /* Preview Assets.xcassets in Resources */,
 				9523ED422615BDB2006D3D6F /* phrases.json in Resources */,
+				95AF0FF72671320F0049C4AB /* DisplayWords.json in Resources */,
 				95672B9325DDA54700DCBE4A /* Assets.xcassets in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -750,6 +757,7 @@
 				95672B9B25DDA54800DCBE4A /* LazyBear.xcdatamodeld in Sources */,
 				95C8C0E0262A369F0082D1D9 /* ProfileResponse.swift in Sources */,
 				95A4B935263EA31C0056F036 /* WatchlistCreatorSearchBar.swift in Sources */,
+				95AF0FF92671342E0049C4AB /* DisplayWordsModel.swift in Sources */,
 				95AD4A2D26078C1400498079 /* ContentView.swift in Sources */,
 				95CCFB5A266E841B00C384A1 /* TransactionRow.swift in Sources */,
 				95629DA02645298E007AF020 /* Profile.swift in Sources */,
Binary file LazyBear.xcodeproj/project.xcworkspace/xcuserdata/dennis.xcuserdatad/UserInterfaceState.xcuserstate has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LazyBear/Global Models/DisplayWordsModel.swift	Wed Jun 09 20:26:28 2021 +0200
@@ -0,0 +1,12 @@
+//
+//  DisplayWordsModel.swift
+//  LazyBear
+//
+//  Created by Dennis Concepción Martín on 9/6/21.
+//
+
+import SwiftUI
+
+struct DisplayWordsModel: Codable {
+    var keyStats: [String: String]
+}
--- a/LazyBear/Global Models/KeyStatsModel.swift	Wed Jun 09 12:49:17 2021 +0200
+++ b/LazyBear/Global Models/KeyStatsModel.swift	Wed Jun 09 20:26:28 2021 +0200
@@ -8,30 +8,42 @@
 import SwiftUI
 
 struct KeyStatsModel: Codable {
-    var avg10Volume, avg30Volume: Int?
-    var beta: Double?
     var companyName: String?
-    var day200MovingAvg, day30ChangePercent, day50MovingAvg, day5ChangePercent: Double?
-    var dividendYield: Double?
     var employees: Int?
-    var exDividendDate: String?
-    var float, marketcap: Int?
-    var maxChangePercent, month1ChangePercent, month3ChangePercent, month6ChangePercent: Double?
-    var nextDividendDate, nextEarningsDate: String?
-    var peRatio: Double?
+    var marketcap: Int?
+    var float: Int?
     var sharesOutstanding: Int?
-    var ttmDividendRate, ttmEPS, week52Change, week52High: Double?
-    var week52HighSplitAdjustOnly, week52Low: Double?
-    var week52LowSplitAdjustOnly: Double?
-    var year1ChangePercent, year2ChangePercent, year5ChangePercent, ytdChangePercent: Double?
+    
+    var beta: Double?
+    var peRatio: Double?
+    var dividendYield: Double?
+    var ttmDividendRate: Double?
+    var ttmEPS: Double?
+    
+    var avg10Volume: Int?
+    var avg30Volume: Int?
 
-    enum CodingKeys: String, CodingKey {
-        case avg10Volume, avg30Volume, beta, companyName, day200MovingAvg, day30ChangePercent, day50MovingAvg, day5ChangePercent, dividendYield, employees, exDividendDate, float, marketcap, maxChangePercent, month1ChangePercent, month3ChangePercent, month6ChangePercent, nextDividendDate, nextEarningsDate, peRatio, sharesOutstanding, ttmDividendRate, ttmEPS
-        case week52Change = "week52change"
-        case week52High = "week52high"
-        case week52HighSplitAdjustOnly = "week52highSplitAdjustOnly"
-        case week52Low = "week52low"
-        case week52LowSplitAdjustOnly = "week52lowSplitAdjustOnly"
-        case year1ChangePercent, year2ChangePercent, year5ChangePercent, ytdChangePercent
-    }
+    var day50MovingAvg: Double?
+    var day200MovingAvg: Double?
+    
+    var week52Change: Double?
+    var week52High: Double?
+    var week52Low: Double?
+    var week52HighSplitAdjustOnly: Double?
+    var week52LowSplitAdjustOnly: Double?
+    
+    var maxChangePercent: Double?
+    var ytdChangePercent: Double?
+    var day5ChangePercent: Double?
+    var day30ChangePercent: Double?
+    var month1ChangePercent: Double?
+    var month3ChangePercent: Double?
+    var month6ChangePercent: Double?
+    var year1ChangePercent: Double?
+    var year2ChangePercent: Double?
+    var year5ChangePercent: Double?
+    
+    var exDividendDate: String?
+    var nextDividendDate: String?
+    var nextEarningsDate: String?
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LazyBear/Resources/DisplayWords.json	Wed Jun 09 20:26:28 2021 +0200
@@ -0,0 +1,37 @@
+{
+    "keyStats":
+    {
+        "avg10Volume": "10 days average volume",
+        "avg30Volume": "30 days average volume",
+        "beta": "Beta",
+        "companyName": "Company Name",
+        "day200MovingAvg": "200 days moving average",
+        "day30ChangePercent": "30 days change percent",
+        "day50MovingAvg": "50 days moving average",
+        "day5ChangePercent": "Percent change in 5 days",
+        "dividendYield": "Dividend yield",
+        "employees": "Employees",
+        "exDividendDate": "Ex dividend date",
+        "float": "Float",
+        "marketcap": "Market cap",
+        "maxChangePercent": "Max change percent",
+        "month1ChangePercent": "Percent change in 1 month",
+        "month3ChangePercent": "Percent change in 3 months",
+        "month6ChangePercent": "Percent change in 6 months",
+        "nextDividendDate": "Next dividend date",
+        "nextEarningsDate": "Next earnings date",
+        "peRatio": "PE ratio",
+        "sharesOutstanding": "Shares outstanding",
+        "ttmDividendRate": "TTM dividend rate",
+        "ttmEPS": "TTM EPS",
+        "week52Change": "Change in 52 weeks",
+        "week52High": "52 weeks high",
+        "week52HighSplitAdjustOnly": " 52 weeks high (Split adjust only)",
+        "week52Low": "52 weeks low",
+        "week52LowSplitAdjustOnly": " 52 weeks low (Split adjust only)",
+        "year1ChangePercent": "Percent change in 1 year",
+        "year2ChangePercent": "Percent change in 2 year",
+        "year5ChangePercent": "Percent change in 5 year",
+        "ytdChangePercent": "YTD percent change"
+    }
+}
--- a/LazyBear/Views/Company/Helpers/StatsView.swift	Wed Jun 09 12:49:17 2021 +0200
+++ b/LazyBear/Views/Company/Helpers/StatsView.swift	Wed Jun 09 20:26:28 2021 +0200
@@ -10,27 +10,23 @@
 struct StatsView: View {
     var keyStats: KeyStatsModel
     @Environment(\.presentationMode) private var presentationStatsView
+    let displayWords: DisplayWordsModel = parseJSON("DisplayWords.json")
     
     var body: some View {
         NavigationView {
             Form {
                 let mirror = Mirror(reflecting: keyStats)
                 ForEach(Array(mirror.children), id: \.label) { child in
-                    HStack {
-                        let label = String(child.label!)
-                        
-                        Text("\(label)".capitalized)
-                            .fontWeight(.semibold)
-                        
-                        // Unwrap optional value
-                        if let doubleValue = child.value as? Double {
-                            Text("\(doubleValue)")
-                        } else if let intValue = child.value as? Int {
-                            Text("\(intValue)")
-                        } else if let stringValue = child.value as? String {
-                            Text("\(stringValue)")
-                        } else {
-                            Text("NaN")
+                    if let unwrappedValue = unwrapAnyOptional(value: child.value) {
+                        HStack {
+                            let label = String(child.label!)
+                            Text("\(displayWords.keyStats[label]!):")
+                                .font(.callout)
+                                .fontWeight(.semibold)
+                            
+                            Spacer()
+                            Text(unwrappedValue)
+                                .font(.callout)
                         }
                     }
                 }
@@ -47,44 +43,58 @@
             }
         }
     }
+    
+    /*
+     Unwrap optional Int, Double, String into String
+     */
+    private func unwrapAnyOptional(value: Any) -> String? {
+        if let value = value as? Int {
+            return "\(value)"
+        } else if let value = value as? Double {
+            return String(format: "%.3f", value)
+        } else {
+            return value as? String
+        }
+    }
 }
 
 
 struct StatsView_Previews: PreviewProvider {
     static var previews: some View {
         StatsView(keyStats:
-                KeyStatsModel(avg10Volume: 123,
-                              avg30Volume: 123,
-                              beta: 123.12,
-                              companyName: "Apple inc",
-                              day200MovingAvg: 123.4,
-                              day30ChangePercent: 123.4,
-                              day50MovingAvg: 123.4,
-                              day5ChangePercent: 123.4,
-                              dividendYield: 123.4,
-                              employees: 123,
-                              exDividendDate: "2020-01-01",
-                              float: 123,
-                              marketcap: 123,
-                              maxChangePercent: 123.4,
-                              month1ChangePercent: 123.4,
-                              month3ChangePercent: 123.4,
-                              month6ChangePercent: 123.4,
-                              nextDividendDate: "2020-01-01",
-                              nextEarningsDate: "2020-01-01",
-                              peRatio: 123.4,
-                              sharesOutstanding: 123,
-                              ttmDividendRate: 123.4,
-                              ttmEPS: 123.4,
-                              week52Change: 123.4,
-                              week52High: 123.4,
-                              week52HighSplitAdjustOnly: 123.4,
-                              week52Low: 123.4,
-                              week52LowSplitAdjustOnly: 123.4,
-                              year1ChangePercent: 123.4,
-                              year2ChangePercent: 123.4,
-                              year5ChangePercent: 123.4,
-                              ytdChangePercent: 123.4
+                    KeyStatsModel(
+                        companyName: "Apple inc",
+                        employees: 123,
+                        marketcap: 123,
+                        float: 123,
+                        sharesOutstanding: 123,
+                        beta: 123.12,
+                        peRatio: 123.4,
+                        dividendYield: 123.4,
+                        ttmDividendRate: 123.4,
+                        ttmEPS: 123.4,
+                        avg10Volume: 123,
+                        avg30Volume: 123,
+                        day50MovingAvg: 123.4,
+                        day200MovingAvg: 123.4,
+                        week52Change: 123.4,
+                        week52High: 123.4,
+                        week52Low: 123.4,
+                        week52HighSplitAdjustOnly: 123.4,
+                        week52LowSplitAdjustOnly: 123.4,
+                        maxChangePercent: 123.4,
+                        ytdChangePercent: 123.4,
+                        day5ChangePercent: 123.4,
+                        day30ChangePercent: 123.4,
+                        month1ChangePercent: 123.4,
+                        month3ChangePercent: 123.4,
+                        month6ChangePercent: 123.4,
+                        year1ChangePercent: 123.4,
+                        year2ChangePercent: 123.4,
+                        year5ChangePercent: 123.4,
+                        exDividendDate: "2020-01-01",
+                        nextDividendDate: "2020-01-01",
+                        nextEarningsDate: "2020-01-01"
                 )
         )
     }