annotate LazyBear/Search.swift @ 469:fe300bd036e4

Add images to readme
author Dennis C. M. <dennis@denniscm.com>
date Wed, 20 Nov 2024 09:09:36 +0000
parents 6953d83060a4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
465
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
1 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
2 // Search.swift
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
3 // lazybear
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
4 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
5 // Created by Dennis Concepción Martín on 17/07/2021.
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
6 //
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
7
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
8 import SwiftUI
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
9 import Alamofire
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
10
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
11 struct Search: View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
12 @State var searchCompany = ""
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
13 @State var searching = false
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
14 @State private var companies: [SearchModel] = []
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
15
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
16 var body: some View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
17 VStack {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
18 SearchBar(searchText: $searchCompany, searching: $searching)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
19 .onChange(of: searchCompany, perform: { _ in
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
20 requestApi()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
21 })
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
22 Spacer()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
23 if companies.isEmpty {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
24
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
25 } else {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
26 List(companies, id: \.self) { company in
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
27 NavigationLink(destination: CompanyView(symbol: company.symbol!)) {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
28 SearchRow(company: company)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
29 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
30 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
31 .id(UUID())
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
32 .listStyle(InsetListStyle())
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
33 .gesture(DragGesture()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
34 .onChanged({ _ in
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
35 UIApplication.shared.dismissKeyboard()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
36 })
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
37 )
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
38 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
39 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
40 .navigationTitle("Search")
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
41 .toolbar {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
42 if searching {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
43 Button("Cancel") { searchCompany = ""; companies = []
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
44 withAnimation {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
45 searching = false
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
46 UIApplication.shared.dismissKeyboard()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
47 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
48 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
49 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
50 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
51 .if(UIDevice.current.userInterfaceIdiom == .phone) { content in
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
52 NavigationView { content }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
53 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
54 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
55
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
56 private func requestApi() {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
57 let url = "https://cloud.iexapis.com/stable/search/\(searchCompany)?token=pk_58fd944e924e4a70acf8635bc335cec4"
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
58 AF.request(url).responseDecodable(of: [SearchModel].self) { response in
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
59 if let value = response.value {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
60 self.companies = value
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
61 } else {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
62 // Handle error
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
63 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
64 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
65 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
66 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
67 extension UIApplication {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
68 func dismissKeyboard() {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
69 sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
70 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
71 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
72
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
73 struct Search_Previews: PreviewProvider {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
74 static var previews: some View {
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
75 Search()
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
76 }
6953d83060a4 New design
Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
parents:
diff changeset
77 }