view LazyBear/Views/Company/CompanyView.swift @ 442:6eae10397501

Implementing NewsHelper in CompanyView
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Mon, 21 Jun 2021 13:28:45 +0200
parents 417148200aaf
children ffbb1dbab531
line wrap: on
line source

//
//  CompanyView.swift
//  LazyBear
//
//  Created by Dennis Concepción Martín on 20/6/21.
//

import SwiftUI

struct CompanyView: View {
    var symbol: String
    var name: String
    @ObservedObject var company = Company()
    var ranges = ["1D", "5D", "1M", "3M", "6M", "1Y", "5Y"]  /// DatePicker ranges
    @State private var selectedRange = "3M"  /// Selected DatePicker range
    
    var body: some View {
        if company.showView {
            NavigationView {
                ScrollView {
                    VStack {
                        HStack {
                            Text(name.capitalized)
                                .font(.title)
                                .fontWeight(.semibold)
                                .lineLimit(1)
                            
                            Spacer()
                        }
                        .padding(.horizontal)
                        
                        Picker("Select a range", selection: $selectedRange) {
                            ForEach(ranges, id: \.self) {
                                Text($0)
                            }
                        }
                        .pickerStyle(SegmentedPickerStyle())
                        .padding(.horizontal)
                        .onChange(of: selectedRange, perform: { range in
                            let url = "https://api.lazybear.app/company/symbol=\(symbol)/type=refresh/range=\(range.lowercased())"
                            company.request(url, .refresh)
                        })
                        
                        ChartHelper(company: company)
                        KeyStatsHelper(keyStats: company.data.keyStats)
                        if let latestNews = company.data.latestNews {
                            NewsHelper(latestNews: latestNews)
                                .padding([.horizontal, .bottom])
                        }
                    }
                }
                .background(Color("customBackground").edgesIgnoringSafeArea(.all))
                .navigationTitle(symbol.uppercased())
            }
        } else {
            ProgressView()
                .onAppear {
                    company.request("https://api.lazybear.app/company/symbol=aapl", .initial)
                }
        }
    }
}

struct CompanyView_Previews: PreviewProvider {
    static var previews: some View {
        CompanyView(symbol: "aapl", name: "apple inc")
    }
}