annotate LazyBear/Watchlist.swift @ 468:99313ca94e8b

Update README.md committer: GitHub <noreply@github.com>
author Dennis C. M. <dennis@denniscm.com>
date Tue, 12 Dec 2023 09:01:01 +0000
parents 6953d83060a4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
465
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // Watchlist.swift
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // lazybear
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 17/07/2021.
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9 import CoreData
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 struct Watchlist: View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12 @Environment(\.managedObjectContext) private var viewContext
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13 @FetchRequest(
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 sortDescriptors: [NSSortDescriptor(keyPath: \Company.symbol, ascending: true)],
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
15 animation: .default)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16 private var companies: FetchedResults<Company>
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18 var body: some View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 List {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 ForEach(companies) { company in
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 NavigationLink(destination: CompanyView(symbol: company.symbol)) {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22 WatchlistRow(symbol: company.symbol)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 .onDelete(perform: deleteCompanyFromWatchlist)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
27 .navigationTitle("Companies")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
28 .toolbar {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
29 #if os(iOS)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
30 EditButton()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
31 #endif
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 .if(UIDevice.current.userInterfaceIdiom == .phone) { content in
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 NavigationView { content }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 private func deleteCompanyFromWatchlist(offsets: IndexSet) {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 withAnimation {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40 offsets.map { companies[$0] }.forEach(viewContext.delete)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 do {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 try viewContext.save()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 } catch {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 let nsError = error as NSError
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46 fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 struct Watchlist_Previews: PreviewProvider {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
53 static var previews: some View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54 Watchlist()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
55 .environment(\.managedObjectContext, PersistenceController.preview.container.viewContext)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
57 }