Mercurial > public > lazybear
annotate LazyBear/Views/Search/Helpers/SearchedCompanyItem.swift @ 457:c6913f0ce46e
Minor UI Updates
author | Dennis Concepción Martín <dennisconcepcionmartin@gmail.com> |
---|---|
date | Mon, 28 Jun 2021 14:03:50 +0200 |
parents | 4effac4733b0 |
children |
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: []) |
425
4effac4733b0
Changing keys from API responses
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
417
diff
changeset
|
15 var watchlistCompanies: FetchedResults<WatchlistCompany> |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
16 |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
17 @State private var showingWatchlistSelector = false |
389
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 { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
20 HStack { |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
21 Button(action: { self.showingWatchlistSelector = true }) { |
425
4effac4733b0
Changing keys from API responses
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
417
diff
changeset
|
22 let watchlistSymbols = watchlistCompanies.map { $0.symbol } |
393
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") |
457
c6913f0ce46e
Minor UI Updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
425
diff
changeset
|
25 .foregroundColor(Color.yellow) |
393
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") |
457
c6913f0ce46e
Minor UI Updates
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
425
diff
changeset
|
29 .foregroundColor(Color.yellow) |
393
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 } |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
52 .actionSheet(isPresented: $showingWatchlistSelector) { |
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 |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
57 /* |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
58 Generate buttons for each watchlist to let the user selects to which watchlist |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
59 he wants to add the company |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
60 */ |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
61 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
|
62 var actionButtons = [ActionSheet.Button]() |
425
4effac4733b0
Changing keys from API responses
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
417
diff
changeset
|
63 let watchlists = Set(watchlistCompanies.map { $0.watchlistName }) |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
64 |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
65 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
|
66 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
|
67 .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
|
68 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
|
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 ) |
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 |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
73 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
|
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 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
|
76 } |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
77 |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
78 /* |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
79 When the user taps the watchlist -> save the company to CoreData |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
394
diff
changeset
|
80 */ |
425
4effac4733b0
Changing keys from API responses
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
417
diff
changeset
|
81 private func addCompany(_ symbol: String, _ name: String, _ watchlistName: String) { |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
82 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
|
83 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
|
84 watchlistCompany.name = name |
425
4effac4733b0
Changing keys from API responses
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
417
diff
changeset
|
85 watchlistCompany.watchlistName = watchlistName |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
86 do { |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
87 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
|
88 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
|
89 } catch { |
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
90 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
|
91 } |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
92 } |
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 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
95 struct CompanyRow_Previews: PreviewProvider { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
96 static var previews: some View { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
97 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
|
98 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
99 } |