Mercurial > public > lazybear
diff LazyBear/Views/Company/Chart.swift @ 399:5c99883c7964
Implementing networking in CompanyView
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Sat, 15 May 2021 12:31:40 +0200 |
parents | |
children | 6055a867d2b6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LazyBear/Views/Company/Chart.swift Sat May 15 12:31:40 2021 +0200 @@ -0,0 +1,86 @@ +// +// Chart.swift +// LazyBear +// +// Created by Dennis Concepción Martín on 8/5/21. +// + +import SwiftUI +import StockCharts + +struct Chart: View { + var chartData: ChartResponse + var symbol: String + + // Date picker + var ranges = ["1D", "5D", "1M", "3M", "6M", "1Y", "5Y"] + @State private var selectedRange = "3M" + + + var body: some View { + let priceViewStyle = PriceViewStyle( + alignment: .leading, + priceFont: .headline, + priceFontWeight: .semibold, + percentFont: .body, + percentFontWeight: .medium + ) + + VStack { + DatePicker(ranges: ranges, selectedRange: $selectedRange) + + RoundedRectangle(cornerRadius: 15) + .foregroundColor(Color(.secondarySystemBackground)) + .frame(height: 270) + .overlay( + VStack { + HStack { + if let quote = chartData.quote![symbol.uppercased()] { + let latestPrice = quote.latestPrice ?? 0 + let changePercent = quote.changePercent ?? 0 + PriceView(latestPrice: latestPrice, changePercent: changePercent, style: priceViewStyle) + } + Spacer() + } + .padding([.top, .leading, .trailing]) + + if let intradayPrices = chartData.intradayPrices![symbol.uppercased()] { + if let prices = intradayPrices.compactMap { $0.open } { + LineChartView(data: prices, + dates: nil, + hours: nil, + dragGesture: true + ) + .padding(.bottom) + } + } + } + ) + + if let latestNews = chartData.latestNews { + ForEach(latestNews, id: \.self) { new in + NewsRow(new: new) + } + } + } + } +} + +struct Chart_Previews: PreviewProvider { + static var previews: some View { + Chart( + chartData: ChartResponse( + intradayPrices: ["AAPL": [IntradayPriceModel(open: 120.3)]], + quote: ["aapl": QuoteModel(changePercent: 0.03, companyName: "Apple Inc", latestPrice: 120.3)], + latestNews: [LatestNewsModel( + datetime: 1621037430000, + headline: "Chaos Monkeys' author calls Apple's statement on his departure defamatory", + image: "https://cloud.iexapis.com/v1/news/image/99abeb99-6d9e-47c8-ae7b-53404eacccec", + source: "Investing.com", + summary: "https://www.investing.com/news/stock-market-news", + url: "https://cloud.iexapis.com/v1/news/article/99abeb99-6d9e-47c8-ae7b-53404eacccec")]), + + symbol: "aapl" + ) + } +}