Mercurial > public > lazybear
annotate LazyBearWatchOS Extension/Views/Home/HomeView.swift @ 454:c79a3ed3d230
StockView for WatchOS implemented
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sun, 27 Jun 2021 20:55:05 +0200 |
parents | 37c13ebda381 |
children |
rev | line source |
---|---|
447
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
1 // |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
2 // HomeView.swift |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
3 // LazyBearWatchOS Extension |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
4 // |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 22/6/21. |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
6 // |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
7 |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
8 import SwiftUI |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
9 import CoreData |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
10 |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
11 struct HomeView: View { |
452
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
12 @ObservedObject var profile = Profile() |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
13 |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
452
diff
changeset
|
14 @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: []) var watchlistCompanies: FetchedResults<WatchlistCompany> |
447
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
15 |
452
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
16 @State private var timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect() /// Set recurrent price request |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
17 |
447
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
18 var body: some View { |
452
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
19 if profile.showView { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
20 NavigationView { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
21 ScrollView { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
22 VStack { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
23 if let companies = profile.data.quotes { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
24 ForEach(companies, id: \.self) { company in |
454
c79a3ed3d230
StockView for WatchOS implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
453
diff
changeset
|
25 NavigationLink(destination: CompanyView(symbol: company.symbol, name: company.companyName) |
c79a3ed3d230
StockView for WatchOS implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
453
diff
changeset
|
26 .navigationTitle(company.companyName.capitalized) |
c79a3ed3d230
StockView for WatchOS implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
453
diff
changeset
|
27 ) { |
c79a3ed3d230
StockView for WatchOS implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
453
diff
changeset
|
28 CompanyRow(company: company) |
c79a3ed3d230
StockView for WatchOS implemented
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
453
diff
changeset
|
29 } |
452
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
30 } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
31 } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
32 } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
33 } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
34 .navigationTitle("Lazybear") |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
35 .onAppear { self.timer = Timer.publish(every: 10, on: .main, in: .common).autoconnect() } /// Start timer |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
36 .onDisappear { self.timer.upstream.connect().cancel() } /// Stop timer |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
37 .onReceive(timer) { _ in prepareUrl(.streaming) } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
38 } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
39 } else { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
40 ProgressView() |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
41 .onAppear { prepareUrl(.initial) } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
42 } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
43 } |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
44 |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
45 /* |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
46 Get symbols in watchlists (Core Data) -> Prepare url -> Request |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
47 */ |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
48 private func prepareUrl(_ requestType: RequestType) { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
49 let symbols = Set(watchlistCompanies.map { $0.symbol }) |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
50 let symbolsString = symbols.joined(separator:",") |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
51 |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
52 switch requestType { |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
53 case .initial: |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
54 let url = "https://api.lazybear.app/profile/type=initial/symbols=\(symbolsString)" |
453
37c13ebda381
Improve hierarchy and minor bugs fixed
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
452
diff
changeset
|
55 print(watchlistCompanies) |
452
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
56 profile.request(url, .initial) |
447
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
57 |
452
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
58 default: |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
59 let url = "https://api.lazybear.app/profile/type=streaming/symbols=\(symbolsString)" |
bb69f9d1d20f
Implement HomeView in WatchOS
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
447
diff
changeset
|
60 profile.request(url, .streaming) |
447
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
61 } |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
62 } |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
63 } |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
64 |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
65 struct HomeView_Previews: PreviewProvider { |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
66 static var previews: some View { |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
67 HomeView() |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
68 } |
8621ba6fd457
Fixes #48
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff
changeset
|
69 } |