diff LazyBear/Views/Home/Helpers/StockRow.swift @ 424:6dd97877f575

Improve code, reorganize files
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Sun, 13 Jun 2021 19:40:42 +0200
parents LazyBear/Views/Global Helpers/StockRow.swift@9b7af8e83d12
children 4effac4733b0
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LazyBear/Views/Home/Helpers/StockRow.swift	Sun Jun 13 19:40:42 2021 +0200
@@ -0,0 +1,76 @@
+//
+//  StockRow.swift
+//  LazyBear
+//
+//  Created by Dennis Concepción Martín on 28/3/21.
+//
+
+import SwiftUI
+
+
+struct StockRow: View {
+    var list: [String: [String: QuoteModel]]
+    var intradayPrices: [String: [Double]]?
+
+    @State private var showList = false
+    
+    var body: some View {
+        let listName = list.first!.key
+        VStack(alignment: .leading) {
+            HStack(alignment: .bottom) {
+                VStack(alignment: .leading) {
+                    Text(adaptListTitle(listName))
+                        .font(.title3)
+                        .fontWeight(.semibold)
+                        .padding([.top, .horizontal])
+                    
+                    Text("Real-time quotes")
+                        .font(.caption)
+                        .opacity(0.5)
+                        .padding(.horizontal)
+                }
+                
+                Spacer()
+                Button("See all", action: { showList = true })
+                    .buttonStyle(BorderlessButtonStyle())
+                    .padding(.horizontal)
+            }
+            
+            ScrollView(.horizontal, showsIndicators: false) {
+                HStack(spacing: 20) {
+                    let companies = list[listName]
+                    ForEach(Array(companies!.keys), id: \.self) { symbol in
+                        StockItem(symbol: symbol, company: companies![symbol]!, intradayPrices: intradayPrices![symbol])
+                    }
+                }
+                .padding()
+            }
+            .frame(height: 250)
+        }
+        .padding(.bottom)
+        .sheet(isPresented: $showList) {
+            StockSheet(listName: adaptListTitle(listName), companies: list[list.first!.key]!, intradayPrices: intradayPrices)
+        }
+    }
+    
+    /*
+     Get list keys (mostactive, losers, active) and adapt them to diplay
+     */
+    private func adaptListTitle(_ title: String) -> String {
+        if title == "mostactive" {
+            return "Most active"
+        } else {
+            return title.capitalized
+        }
+    }
+}
+
+
+struct StockRectangleRow_Previews: PreviewProvider {
+    static var previews: some View {
+        StockRow(
+            list: ["mostactive": ["AAPL": QuoteModel(changePercent: 0.03, companyName: "Apple Inc", latestPrice: 130.3)]],
+            intradayPrices: ["AAPL": [130.2]]
+        )
+    }
+}