Mercurial > public > lazybear
annotate LazyBear/Views/Search/SearchView.swift @ 392:13f3578def61
Implement create watchlist
author | Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com> |
---|---|
date | Sat, 01 May 2021 13:11:32 +0200 |
parents | 8ec37b2baafd |
children | 0a4c399170c4 |
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 { |
391
8ec37b2baafd
Implementing CreateNewWatchlist
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
390
diff
changeset
|
12 // Only unseful when it's called from Profile View |
8ec37b2baafd
Implementing CreateNewWatchlist
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
390
diff
changeset
|
13 var calledFromProfileView: Bool? |
8ec37b2baafd
Implementing CreateNewWatchlist
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
390
diff
changeset
|
14 var newWatchlistClass: NewWatchlistClass? |
8ec37b2baafd
Implementing CreateNewWatchlist
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
390
diff
changeset
|
15 |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
16 @ObservedObject var search = Search() |
389
db8bc3ed526a
Implementing add to watchlist feature from SearchView
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
385
diff
changeset
|
17 @Environment(\.presentationMode) private var presentationMode |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
18 @State private var searchedText = String() |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
19 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
20 var body: some View { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
21 NavigationView { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
22 VStack(alignment: .leading) { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
23 if search.showSearchList { |
392
13f3578def61
Implement create watchlist
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
391
diff
changeset
|
24 CompanyList(searchResult: search.data, calledFromProfileView: calledFromProfileView, newWatchlistClass: newWatchlistClass, presentationMode: presentationMode) |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
25 } else { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
26 VStack(alignment: .center) { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
27 Image("bearSleeping") |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
28 .resizable() |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
29 .scaledToFit() |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
30 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
31 Text("Are you looking for something?") |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
32 .font(.title2) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
33 .fontWeight(.semibold) |
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 .padding(.bottom) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
36 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
37 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
|
38 .multilineTextAlignment(.center) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
39 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
40 .padding(.horizontal) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
41 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
42 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
43 .navigationTitle("Search") |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
44 .navigationBarTitleDisplayMode(.inline) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
45 .navigationBarSearch($searchedText) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
46 .onChange(of: searchedText, perform: { searchedText in |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
47 if !searchedText.isEmpty { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
48 // Encode string with spaces |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
49 let encodedSearchedText = searchedText.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) |
376
8162ccc5ec5c
SearchView updated
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
358
diff
changeset
|
50 search.request("https://api.lazybear.app/search/text=\(encodedSearchedText ?? "")") |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
51 } else { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
52 search.showSearchList = false |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
53 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
54 }) |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
55 } |
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
|
56 .navigationViewStyle(StackNavigationViewStyle()) |
358
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
57 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
58 } |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
59 |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
60 struct SearchView_Previews: PreviewProvider { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
61 static var previews: some View { |
280cbc5653b5
SearchView implemented
Dennis Concepción Martín <66180929+denniscm190@users.noreply.github.com>
parents:
346
diff
changeset
|
62 SearchView() |
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 } |