annotate LazyBear/Views/Profile/Helpers/WatchlistCreatorList.swift @ 453:37c13ebda381

Improve hierarchy and minor bugs fixed
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Sun, 27 Jun 2021 14:18:29 +0200
parents 4b8031e696e8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
1 //
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
2 // WatchlistCreatorList.swift
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
3 // LazyBear
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
4 //
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 2/5/21.
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
6 //
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
7
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
8 import SwiftUI
450
4b8031e696e8 Change Bazooka to Alamofire
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 430
diff changeset
9 import Alamofire
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
10
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
11 struct WatchlistCreatorList: View {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
12 @ObservedObject var watchlistCreatorClass: WatchlistCreatorClass
417
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
13
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
14 @State private var searchedCompany = String()
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
15 @State private var companies = [SearchResponse]()
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
16
430
c78d5b5b3bda Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 417
diff changeset
17 @Environment(\.presentationMode) private var watchlistCreatorListPresentation
394
4c90e5b18632 Fixes #46
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 393
diff changeset
18 @Environment(\.managedObjectContext) private var moc
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
19
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
20 var body: some View {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
21 NavigationView {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
22 VStack {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
23 WatchlistCreatorSearchBar(searchedCompany: $searchedCompany)
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
24
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
25 List(companies, id: \.self) { company in
430
c78d5b5b3bda Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 417
diff changeset
26 WatchlistCreatorRow(company: company, watchlistCreatorListPresentation: watchlistCreatorListPresentation, watchlistCreatorClass: watchlistCreatorClass)
394
4c90e5b18632 Fixes #46
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 393
diff changeset
27 .environment(\.managedObjectContext, self.moc)
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
28 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
29 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
30 .navigationTitle("Search")
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
31 .navigationBarTitleDisplayMode(.inline)
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
32 .onChange(of: searchedCompany, perform: { searchedCompany in
417
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
33 encodeAndRequest(searchedCompany)
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
34 })
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
35
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
36 .toolbar {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
37 ToolbarItem(placement: .navigationBarLeading) {
430
c78d5b5b3bda Minor updates
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 417
diff changeset
38 Button("Cancel", action: { watchlistCreatorListPresentation.wrappedValue.dismiss() })
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
39 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
40 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
41 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
42 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
43
417
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
44 /*
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
45 Get companies from the API that matches the searched text
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
46 */
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
47 private func request(_ url: String) {
450
4b8031e696e8 Change Bazooka to Alamofire
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 430
diff changeset
48 AF.request(url).responseDecodable(of: [SearchResponse].self) { response in
4b8031e696e8 Change Bazooka to Alamofire
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 430
diff changeset
49 if let value = response.value {
4b8031e696e8 Change Bazooka to Alamofire
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 430
diff changeset
50 self.companies = value
4b8031e696e8 Change Bazooka to Alamofire
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents: 430
diff changeset
51 }
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
52 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
53 }
417
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
54
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
55 /*
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
56 1) Check if searchedCompany is empty
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
57 2) Encode white spaces
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
58 3) Request API
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
59 */
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
60 private func encodeAndRequest(_ searchedCompany: String) {
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
61 if !searchedCompany.isEmpty {
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
62 let encodedSearchedCompany = searchedCompany.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
63 request("https://api.lazybear.app/search/text=\(encodedSearchedCompany ?? "")")
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
64 }
5f21f7c23c5e Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents: 404
diff changeset
65 }
393
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
66 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
67
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
68 struct SearchCompanies_Previews: PreviewProvider {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
69 static var previews: some View {
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
70 WatchlistCreatorList(watchlistCreatorClass: WatchlistCreatorClass())
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
71 }
0a4c399170c4 Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff changeset
72 }