Mercurial > public > lazybear
view LazyBearWatchOS Extension/Views/WatchOSProfileView.swift @ 455:b560babcd5ed
WatchOS views implemented
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Mon, 28 Jun 2021 11:55:19 +0200 |
parents | LazyBearWatchOS Extension/Views/Home/HomeView.swift@c79a3ed3d230 |
children | c6913f0ce46e |
line wrap: on
line source
// // WatchOSProfileView.swift // LazyBearWatchOS Extension // // Created by Dennis Concepción Martín on 22/6/21. // import SwiftUI import CoreData struct WatchOSProfileView: View { @ObservedObject var profile = Profile() @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: []) var watchlistCompanies: FetchedResults<WatchlistCompany> @State private var timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect() /// Set recurrent price request var body: some View { if profile.showView { NavigationView { ScrollView { VStack { if let companies = profile.data.quotes { ForEach(companies, id: \.self) { company in NavigationLink(destination: WatchOSCompanyView(symbol: company.symbol) .navigationTitle(company.companyName.capitalized) ) { WatchOSCompanyRow(company: company) } } } } } .navigationTitle("Lazybear") .onAppear { self.timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect() } /// Start timer .onDisappear { self.timer.upstream.connect().cancel() } /// Stop timer .onReceive(timer) { _ in prepareUrl(.streaming) } } } else { ProgressView() .onAppear { prepareUrl(.initial) } } } /* Get symbols in watchlists (Core Data) -> Prepare url -> Request */ private func prepareUrl(_ requestType: RequestType) { let symbols = Set(watchlistCompanies.map { $0.symbol }) let symbolsString = symbols.joined(separator:",") switch requestType { case .initial: let url = "https://api.lazybear.app/profile/type=initial/symbols=\(symbolsString)" print(watchlistCompanies) profile.request(url, .initial) default: let url = "https://api.lazybear.app/profile/type=streaming/symbols=\(symbolsString)" profile.request(url, .streaming) } } } struct WatchOSProfileView_Previews: PreviewProvider { static var previews: some View { WatchOSProfileView() } }