annotate LazyBear/Views/Search/Helpers/SearchedCompanyItem.swift @ 394:4c90e5b18632

Fixes #46
author Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
date Fri, 07 May 2021 11:00:53 +0200
parents 0a4c399170c4
children 5f21f7c23c5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
358
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
1 //
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
2 // SearchedCompanyItem.swift
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
3 // LazyBear
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
4 //
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 3/4/21.
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
6 //
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
7
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
8 import SwiftUI
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
9
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
10 struct SearchedCompanyItem: View {
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
11 var company: SearchResponse
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
12
389
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
13 @Environment(\.managedObjectContext) private var moc
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
14 @FetchRequest(entity: WatchlistCompany.entity(), sortDescriptors: [])
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
15 var watchlistCompany: FetchedResults<WatchlistCompany>
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
16
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
17 @State private var showingActionSheet = false
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
18
358
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
19 var body: some View {
389
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
20 let watchlistSymbols = watchlistCompany.map { $0.symbol }
358
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
21 HStack {
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
22 Button(action: { self.showingActionSheet = true }) {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
23 if watchlistSymbols.contains(company.symbol!) {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
24 Image(systemName: "star.fill")
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
25 .foregroundColor(.yellow)
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
26 .imageScale(.large)
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
27 } else {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
28 Image(systemName: "star")
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
29 .foregroundColor(.yellow)
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
30 .imageScale(.large)
389
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
31 }
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
32 }
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 391
diff changeset
33 .buttonStyle(PlainButtonStyle())
389
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
34
358
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
35 VStack(alignment: .leading) {
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
36 Text(company.symbol!.uppercased())
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
37 .fontWeight(.semibold)
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
38
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
39 Text(company.securityName!.capitalized)
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
40 .lineLimit(1)
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
41 }
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
42
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
43 Spacer()
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
44
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
45 VStack(alignment: .trailing) {
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
46 Text(company.currency!)
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
47 .fontWeight(.semibold)
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
48
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
49 Text(company.region!)
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
50 }
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
51 }
389
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
52 .actionSheet(isPresented: $showingActionSheet) {
394
4c90e5b18632 Fixes #46
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 393
diff changeset
53 ActionSheet(title: Text("Add to watchlist"), message: Text("Select"), buttons: generateButtons())
389
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
54 }
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
55 }
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
56
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
57 // Get watchlist names -> generate buttons
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
58 private func generateButtons() -> [ActionSheet.Button] {
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
59 var actionButtons = [ActionSheet.Button]()
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
60 let watchlists = Set(watchlistCompany.map { $0.watchlist })
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
61
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
62 for watchlistName in watchlists {
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
63 actionButtons.append(
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
64 .default(Text(watchlistName)) {
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
65 addCompany(company.symbol!, company.securityName!, watchlistName)
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
66 }
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
67 )
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
68 }
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
69
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
70 actionButtons.append(.cancel())
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
71
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
72 return actionButtons
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
73 }
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
74
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
75 // Add to watchlist
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
76 private func addCompany(_ symbol: String, _ name: String, _ watchlist: String) {
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
77 let watchlistCompany = WatchlistCompany(context: moc)
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
78 watchlistCompany.symbol = symbol
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
79 watchlistCompany.name = name
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
80 watchlistCompany.watchlist = watchlist
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
81 do {
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
82 try moc.save()
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
83 print("Company saved")
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
84 } catch {
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
85 print(error.localizedDescription)
db8bc3ed526a Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 358
diff changeset
86 }
358
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
87 }
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
88 }
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
89
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
90 struct CompanyRow_Previews: PreviewProvider {
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
91 static var previews: some View {
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
92 SearchedCompanyItem(company: SearchResponse(currency: "USD", region: "US", securityName: "apple inc", symbol: "aapl"))
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
93 }
280cbc5653b5 SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
94 }