Mercurial > public > lazybear
annotate LazyBear/Views/Search/Helpers/SearchedCompanyItem.swift @ 389:db8bc3ed526a
Implementing add to watchlist feature from SearchView
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Sun, 25 Apr 2021 16:42:26 +0200 |
parents | 280cbc5653b5 |
children | 8ec37b2baafd |
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 { |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
22 Button(action: { self.showingActionSheet = true }) { |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
23 if watchlistSymbols.contains(company.symbol!) { |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
24 Image(systemName: "star.fill") |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
25 .foregroundColor(.yellow) |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
26 .imageScale(.large) |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
27 } else { |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
28 Image(systemName: "star") |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
29 .foregroundColor(.yellow) |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
30 .imageScale(.large) |
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 } |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
33 .buttonStyle(PlainButtonStyle()) |
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) { |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
53 ActionSheet(title: Text("Your watchlists"), message: Text("Select"), buttons: generateButtons()) |
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 } |