diff LazyBear/Search.swift @ 465:6953d83060a4

New design
author Dennis Concepción Martín <dennisconcepcionmartin@gmail.com>
date Sat, 17 Jul 2021 17:58:57 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LazyBear/Search.swift	Sat Jul 17 17:58:57 2021 +0100
@@ -0,0 +1,77 @@
+//
+//  Search.swift
+//  lazybear
+//
+//  Created by Dennis Concepción Martín on 17/07/2021.
+//
+
+import SwiftUI
+import Alamofire
+
+struct Search: View {
+    @State var searchCompany = ""
+    @State var searching = false
+    @State private var companies: [SearchModel] = []
+    
+    var body: some View {
+        VStack {
+            SearchBar(searchText: $searchCompany, searching: $searching)
+                .onChange(of: searchCompany, perform: { _ in
+                    requestApi()
+                })
+            Spacer()
+            if companies.isEmpty {
+                
+            } else {
+                List(companies, id: \.self) { company in
+                    NavigationLink(destination: CompanyView(symbol: company.symbol!)) {
+                        SearchRow(company: company)
+                    }
+                }
+                .id(UUID())
+                .listStyle(InsetListStyle())
+                .gesture(DragGesture()
+                    .onChanged({ _ in
+                         UIApplication.shared.dismissKeyboard()
+                     })
+                )
+            }
+        }
+        .navigationTitle("Search")
+        .toolbar {
+             if searching {
+                Button("Cancel") { searchCompany = ""; companies = []
+                     withAnimation {
+                        searching = false
+                        UIApplication.shared.dismissKeyboard()
+                     }
+                 }
+             }
+        }
+            .if(UIDevice.current.userInterfaceIdiom == .phone) { content in
+                NavigationView { content }
+            }
+    }
+    
+    private func requestApi() {
+        let url = "https://cloud.iexapis.com/stable/search/\(searchCompany)?token=pk_58fd944e924e4a70acf8635bc335cec4"
+        AF.request(url).responseDecodable(of: [SearchModel].self) { response in
+            if let value = response.value {
+                self.companies = value
+            } else {
+                // Handle error
+            }
+        }
+    }
+}
+extension UIApplication {
+    func dismissKeyboard() {
+        sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
+    }
+}
+
+struct Search_Previews: PreviewProvider {
+    static var previews: some View {
+        Search()
+    }
+}