From 2c3be5a26cdda99fd41df4e8340b981607797ba9 Mon Sep 17 00:00:00 2001
From: Chris Offner <chrisoffner@pm.me>
Date: Thu, 25 Mar 2021 14:57:31 +0100
Subject: [PATCH] Simplified code for SearchType and related Picker
 significantly, keeping functionality identical.

---
 .../SwiftUI/Inbox/MailListView.swift          |  9 ++-
 .../SwiftUI/SupportingViews/SearchView.swift  | 78 +++++++------------
 2 files changed, 32 insertions(+), 55 deletions(-)

diff --git a/enzevalos_iphone/SwiftUI/Inbox/MailListView.swift b/enzevalos_iphone/SwiftUI/Inbox/MailListView.swift
index 30f0f9e3..40013afb 100644
--- a/enzevalos_iphone/SwiftUI/Inbox/MailListView.swift
+++ b/enzevalos_iphone/SwiftUI/Inbox/MailListView.swift
@@ -22,8 +22,8 @@ struct MailListView: View {
     @State var updating = false
     @State var showUser = false
     @State var searchText = ""
-    @State var searchField = 0
-    @State var searchNow = false
+    @State var searchField = SearchType.All
+//    @State var searchNow = false
     @State var composeMail = false
     
     init(folderpath: String, name: String) {
@@ -44,7 +44,7 @@ struct MailListView: View {
     
     private var mainView: some View {
         VStack (alignment: .leading){
-            SearchView(searchText: $searchText, searchField: $searchField, searchNow: $searchNow)
+            SearchView(searchText: $searchText, searchType: $searchField)
                 .padding(6)
             mailList
                 .padding(-12)
@@ -113,7 +113,8 @@ struct MailListView: View {
     }
     
     func filterKeyRecord(keyRecord: MailRecord) -> Bool {
-        let searchType = SearchType.findType(i: searchField)
+//        let searchType = SearchType.findType(i: searchField)
+        let searchType = searchField
         if self.searchText.isEmpty
             || self.searchText == NSLocalizedString("Searchbar.Title", comment: "Search") {
             return true
diff --git a/enzevalos_iphone/SwiftUI/SupportingViews/SearchView.swift b/enzevalos_iphone/SwiftUI/SupportingViews/SearchView.swift
index cf10c7c7..4bc454a6 100644
--- a/enzevalos_iphone/SwiftUI/SupportingViews/SearchView.swift
+++ b/enzevalos_iphone/SwiftUI/SupportingViews/SearchView.swift
@@ -12,30 +12,11 @@ import Combine
 /**
  Where are we looking for? Used in the search footer.
  */
-enum SearchType: CaseIterable {
-    case Sender, Subject, Body, All
-    var text: String {
-        get{
-            switch self {
-            case .Sender:
-                return NSLocalizedString("Sender", comment: "")
-            case .Subject:
-                return NSLocalizedString("Subject", comment: "")
-            case .Body:
-                return NSLocalizedString("Body", comment: "")
-            case .All:
-                return NSLocalizedString("All", comment: "")
-            }
-        }
-    }
-    
-    static func findType(i: Int) -> SearchType{
-        if i < SearchType.allCases.count {
-            return SearchType.allCases[i]
-        } else {
-            return SearchType.All
-        }
-    }
+enum SearchType: LocalizedStringKey, CaseIterable {
+    case All = "All"
+    case Sender = "Sender"
+    case Subject = "Subject"
+    case Body = "Body"
 }
 /**
  A SearchView for mails with a search segmented Picker to choose the search area.
@@ -43,29 +24,26 @@ enum SearchType: CaseIterable {
  
  */
 struct SearchView: View {
-    
     @Binding var searchText: String
-    @Binding var searchField: Int
-    @Binding var searchNow: Bool
-    
+    @Binding var searchType: SearchType
     @State private var showCancelButton: Bool = false
     
     var body: some View {
-        VStack{
+        VStack {
             HStack {
                 searchFieldView
-                if showCancelButton  {
+                if showCancelButton {
                     Button("Cancel") {
-                            UIApplication.shared.endEditing(true)
-                            self.searchText = ""
-                            self.showCancelButton = false
-                            self.searchNow = false
+                        UIApplication.shared.endEditing(true)
+                        self.searchText = ""
+                        self.showCancelButton = false
                     }
                     .foregroundColor(Color(.systemBlue))
                 }
             }
-           if showCancelButton {
-                searchSegment
+            
+            if showCancelButton {
+                searchTypePicker
             }
         }
         .padding(.horizontal)
@@ -74,16 +52,17 @@ struct SearchView: View {
     var searchFieldView: some View {
         HStack {
             Image(systemName: "magnifyingglass")
-            TextField(NSLocalizedString("Searchbar.Title", comment: "Search"), text: $searchText, onEditingChanged: { isEditing in
+            TextField(NSLocalizedString("Searchbar.Title", comment: "Search"),
+                      text: $searchText) { _ in
                 self.showCancelButton = true
-            }, onCommit: {
-                self.searchNow = true
-            })
-                .foregroundColor(.primary)
-            Button(action: {
+            }
+            .foregroundColor(.primary)
+            
+            Button {
                 self.searchText = ""
-            }) {
-                Image(systemName: "xmark.circle.fill").opacity(searchText == "" ? 0 : 1)
+            } label: {
+                Image(systemName: "xmark.circle.fill")
+                    .opacity(searchText == "" ? 0 : 1)
             }
         }
         .padding(EdgeInsets(top: 8, leading: 6, bottom: 8, trailing: 6))
@@ -92,13 +71,10 @@ struct SearchView: View {
         .cornerRadius(10.0)
     }
     
-    var searchSegment: some View {
-        Picker(selection: $searchField, label: EmptyView()) {
-        ForEach(0..<SearchType.allCases.count) { index in
-            Text(SearchType.allCases[index].text).tag(index)
-                    .onTapGesture {
-                        self.searchField = index
-                }
+    var searchTypePicker: some View {
+        Picker("Hellooo", selection: $searchType) {
+            ForEach(SearchType.allCases, id: \.self) { searchType in
+                Text(searchType.rawValue)
             }
         }
         .pickerStyle(SegmentedPickerStyle())
-- 
GitLab