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