view LazyBear/Views/Home/HomeView.swift @ 401:f843c6382529

Add Enumeration to Networks files
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Thu, 20 May 2021 21:04:49 +0200
parents 5c99883c7964
children 5f21f7c23c5e
line wrap: on
line source

//
//  HomeView.swift
//  LazyBear
//
//  Created by Dennis Concepción Martín on 28/3/21.
//

import SwiftUI

struct HomeView: View {
    @ObservedObject var home = Home()
    @State private var showTradingDates = false
    
    // Set recurrent price request
    @State private var timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect()
    
    static let taskDateFormat: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateStyle = .medium
        return formatter
        }()

        let dueDate = Date()
    
    var body: some View {
        if home.showView {
            NavigationView {
                List {
                    if let sectorPerformance = home.data.sectorPerformance {
                        SectorRow(sectorPerformance: sectorPerformance)
                            .listRowInsets(EdgeInsets())
                    }
                    
                    if let lists = home.data.lists {
                        if let gainers = lists.gainers {
                            StockRow(listName: "Gainers", list: gainers, intradayPrices: home.data.intradayPrices, addOnDelete: false)
                                .listRowInsets(EdgeInsets())
                        }
                        if let losers = lists.losers {
                            StockRow(listName: "Losers", list: losers, intradayPrices: home.data.intradayPrices, addOnDelete: false)
                                .listRowInsets(EdgeInsets())
                        }
                        if let mostActive = lists.mostactive {
                            StockRow(listName: "Most active", list: mostActive, intradayPrices: home.data.intradayPrices, addOnDelete: false)
                                .listRowInsets(EdgeInsets())
                        }
                    }
                    if let latestCurrencies = home.data.latestCurrencies {
                        CurrencyRow(latestCurrencies: latestCurrencies)
                            .listRowInsets(EdgeInsets())
                    }
                }
                .onAppear { self.timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect() }  // Start timer
                .onReceive(timer) { _ in home.request("https://api.lazybear.app/home/type=streaming", .streaming) }  // Receive timer notification
                .onDisappear { self.timer.upstream.connect().cancel() }  // Stop timer
                .navigationTitle("\(dueDate, formatter: Self.taskDateFormat)")
                .navigationBarTitleDisplayMode(.inline)
                .navigationViewStyle(StackNavigationViewStyle())
                .toolbar {
                    ToolbarItem(placement: .navigationBarTrailing) {
                        Button(action: { showTradingDates = true }) {
                            Image(systemName: "calendar.badge.clock")
                        }
                    }
                }
            }
            .sheet(isPresented: $showTradingDates) {
                if let dates = home.data.tradingDates {
                    TradingDates(dates: dates)
                }
            }
        } else {
            ProgressView()
                .onAppear {
                    home.request("https://api.lazybear.app/home/type=init", .initial)
                }

        }
    }
}

struct HomeView_Previews: PreviewProvider {
    static var previews: some View {
        HomeView()
    }
}