Mercurial > public > lazybear
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() } }