Mercurial > public > lazybear
annotate LazyBear/ContentView.swift @ 465:6953d83060a4
New design
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Sat, 17 Jul 2021 17:58:57 +0100 |
parents | 783b567800d9 |
children |
rev | line source |
---|---|
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
1 // |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
2 // ContentView.swift |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
3 // lazybear |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
4 // |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
5 // Created by Dennis Concepción Martín on 17/07/2021. |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
6 // |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
7 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
8 import SwiftUI |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
9 import CoreData |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
10 |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
11 struct ContentView: View { |
465
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
12 @State private var tab: Tab = .watchlist |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
13 @Environment(\.managedObjectContext) private var viewContext |
465
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
14 @FetchRequest(sortDescriptors: []) private var companies: FetchedResults<Company> |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
15 |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
16 var body: some View { |
465
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
17 TabView(selection: $tab) { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
18 Watchlist() |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
19 .tabItem { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
20 Image(systemName: "list.star") |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
21 Text("Watchlist") |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
22 } |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
23 .tag(Tab.watchlist) |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
24 |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
25 Search() |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
26 .tabItem { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
27 Image(systemName: "magnifyingglass") |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
28 Text("Search") |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
29 } |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
30 .tag(Tab.search) |
385
7aab87e16661
Delete HelperView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
378
diff
changeset
|
31 } |
465
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
32 .onAppear(perform: createDefaultWatchlist) |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
33 } |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
34 |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
35 private enum Tab { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
36 case watchlist, search, settings |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
37 } |
465
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
38 |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
39 // MARK: - Create default watchlist |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
40 private func createDefaultWatchlist() { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
41 if companies.isEmpty { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
42 let defaultCompanies = [ |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
43 "AAPL": "Apple Inc", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
44 "AMZN": "Amazon.com Inc.", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
45 "BRK.A": "Berkshire Hathaway Inc.", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
46 "GS": "Goldman Sachs Group, Inc.", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
47 "TSLA": "Tesla Inc", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
48 "MSFT": "Microsoft Corporation", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
49 "WMT": "Walmart Inc", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
50 "DIS": "Walt Disney Co (The)", |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
51 "NKE": "Nike, Inc." |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
52 ] |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
53 |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
54 for defaultCompany in defaultCompanies { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
55 withAnimation { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
56 let company = Company(context: viewContext) |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
57 company.symbol = defaultCompany.key |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
58 company.companyName = defaultCompany.value |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
59 |
465
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
60 do { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
61 try viewContext.save() |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
62 } catch { |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
63 let nsError = error as NSError |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
64 fatalError("Unresolved error \(nsError), \(nsError.userInfo)") |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
65 } |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
66 } |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
67 } |
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
68 } |
449
4255f94d0767
Minor updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
425
diff
changeset
|
69 } |
4255f94d0767
Minor updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
425
diff
changeset
|
70 } |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
71 |
463
783b567800d9
Starts new version
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
457
diff
changeset
|
72 |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
73 struct ContentView_Previews: PreviewProvider { |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
74 static var previews: some View { |
465
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
75 ContentView() |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
76 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext) |
6953d83060a4
New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
463
diff
changeset
|
77 |
163
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
78 } |
9d519f230f26
Start clean project
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
79 } |