diff --git a/Mail/Views/Search/SearchView.swift b/Mail/Views/Search/SearchView.swift index c783e27ae..fe9a53fe7 100644 --- a/Mail/Views/Search/SearchView.swift +++ b/Mail/Views/Search/SearchView.swift @@ -152,7 +152,11 @@ struct SearchView: View { Group { if thread.shouldPresentAsDraft { Button(action: { - DraftUtils.editDraft(from: thread, mailboxManager: viewModel.mailboxManager, editedMessageDraft: $editedMessageDraft) + DraftUtils.editDraft( + from: thread, + mailboxManager: viewModel.mailboxManager, + editedMessageDraft: $editedMessageDraft + ) }, label: { ThreadCell(thread: thread, mailboxManager: viewModel.mailboxManager, @@ -179,6 +183,8 @@ struct SearchView: View { } } } + .listRowInsets(EdgeInsets()) + .padding(.leading, -4) .onAppear { viewModel.loadNextPageIfNeeded(currentItem: thread) } @@ -210,6 +216,7 @@ struct SearchView: View { } } .padding(.horizontal, 4) + .padding(.vertical, threadDensity.cellVerticalPadding) } header: { if !contacts.isEmpty { Text(MailResourcesStrings.Localizable.contactsSearch) @@ -260,7 +267,10 @@ struct SearchView: View { private func deleteSearchTapped(searchItem: String) { Task { await tryOrDisplayError { - viewModel.searchHistory = await viewModel.mailboxManager.delete(searchHistory: viewModel.searchHistory, with: searchItem) + viewModel.searchHistory = await viewModel.mailboxManager.delete( + searchHistory: viewModel.searchHistory, + with: searchItem + ) } } } diff --git a/Mail/Views/Search/SearchViewModel.swift b/Mail/Views/Search/SearchViewModel.swift index a0ebb2c3f..483447c03 100644 --- a/Mail/Views/Search/SearchViewModel.swift +++ b/Mail/Views/Search/SearchViewModel.swift @@ -86,7 +86,7 @@ enum SearchState { init(mailboxManager: MailboxManager, folder: Folder?) { self.mailboxManager = mailboxManager - self.searchHistory = mailboxManager.searchHistory() + searchHistory = mailboxManager.searchHistory() trashFolderId = mailboxManager.getFolder(with: .trash)?._id ?? "" realFolder = folder @@ -97,7 +97,8 @@ enum SearchState { searchFieldObservation = $searchValue .debounce(for: .seconds(0.3), scheduler: DispatchQueue.main) .sink { [weak self] newValue in - guard self?.lastSearch.trimmingCharacters(in: .whitespacesAndNewlines) != newValue.trimmingCharacters(in: .whitespacesAndNewlines) else { + guard self?.lastSearch.trimmingCharacters(in: .whitespacesAndNewlines) != newValue + .trimmingCharacters(in: .whitespacesAndNewlines) else { return } self?.lastSearch = newValue @@ -219,8 +220,9 @@ enum SearchState { .contains(where: { $0.email.caseInsensitiveCompare(searchValue) == .orderedSame }) { autocompleteRecipients.append(Recipient(email: searchValue, name: "")) } + let contactRange: Range = 0 ..< min(autocompleteRecipients.count, Constants.contactSuggestionLimit) withAnimation { - contacts = autocompleteRecipients + contacts = Array(autocompleteRecipients[contactRange]) } } diff --git a/MailCore/Utils/Constants.swift b/MailCore/Utils/Constants.swift index 8aec7a23d..176646c15 100644 --- a/MailCore/Utils/Constants.swift +++ b/MailCore/Utils/Constants.swift @@ -158,6 +158,7 @@ public enum Constants { } public static let messageQuantityLimit = 500 + public static let contactSuggestionLimit = 5 public static func longUid(from shortUid: String, folderId: String) -> String { return "\(shortUid)@\(folderId)"