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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }