Mercurial > public > lazybear
annotate LazyBear/Views/Search/SearchView.swift @ 417:5f21f7c23c5e
Add comments and clean code
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Fri, 11 Jun 2021 11:37:42 +0200 |
parents | 0a4c399170c4 |
children | 8c58ce834d95 |
rev | line source |
---|---|
338
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
1 // |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
2 // SearchView.swift |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
3 // LazyBear |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
4 // |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
5 // Created by Dennis Concepción Martín on 1/4/21. |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
6 // |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
7 |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
8 import SwiftUI |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
9 import SwiftlySearch |
71a9c0e61783
Implementing SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
diff
changeset
|
10 |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
11 struct SearchView: View { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
12 @ObservedObject var search = Search() |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
392
diff
changeset
|
13 @State private var searchedText = String() |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
385
diff
changeset
|
14 @Environment(\.presentationMode) private var presentationMode |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
15 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
16 var body: some View { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
17 NavigationView { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
18 VStack(alignment: .leading) { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
19 if search.showSearchList { |
393
0a4c399170c4
Implementing WatchlistCreator
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
392
diff
changeset
|
20 CompanyList(searchResult: search.data) |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
21 } else { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
22 VStack(alignment: .center) { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
23 Image("bearSleeping") |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
24 .resizable() |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
25 .scaledToFit() |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
26 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
27 Text("Are you looking for something?") |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
28 .font(.title2) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
29 .fontWeight(.semibold) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
30 .multilineTextAlignment(.center) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
31 .padding(.bottom) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
32 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
33 Text("Use the search bar to find your favourite company. Type the stock symbol or name, we'll find it!") |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
34 .multilineTextAlignment(.center) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
35 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
36 .padding(.horizontal) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
37 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
38 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
39 .navigationTitle("Search") |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
40 .navigationBarTitleDisplayMode(.inline) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
41 .navigationBarSearch($searchedText) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
42 .onChange(of: searchedText, perform: { searchedText in |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
43 encodeAndRequest(searchedText) |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
44 }) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
45 } |
390
6303385b3629
Companies added to watchlists now are correctly updated
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
389
diff
changeset
|
46 .navigationViewStyle(StackNavigationViewStyle()) |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
47 } |
417
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
48 |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
49 /* |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
50 1) Check if searchedText is empty |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
51 2) Encode white spaces |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
52 3) Make API request |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
53 */ |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
54 private func encodeAndRequest(_ searchedText: String) { |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
55 if !searchedText.isEmpty { |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
56 let encodedSearchedText = searchedText.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
57 search.request("https://api.lazybear.app/search/text=\(encodedSearchedText ?? "")") |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
58 } else { |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
59 search.showSearchList = false |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
60 } |
5f21f7c23c5e
Add comments and clean code
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
393
diff
changeset
|
61 } |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
62 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
63 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
64 struct SearchView_Previews: PreviewProvider { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
65 static var previews: some View { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
66 SearchView() |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
67 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
68 } |