diff --git a/components/mail/mail-app.tsx b/components/mail/mail-app.tsx
index da2069dc4..a9007f805 100644
--- a/components/mail/mail-app.tsx
+++ b/components/mail/mail-app.tsx
@@ -63,6 +63,9 @@ import { PromptDialog } from "@/components/ui/prompt-dialog";
import { TotpReauthDialog } from "@/components/totp-reauth-dialog";
import { DragDropProvider } from "@/contexts/drag-drop-context";
import { isFilterEmpty, activeFilterCount } from "@/lib/jmap/search-utils";
+import { SearchBox, type ContactSearchField } from "@/components/search/search-box";
+import type { ContactSuggestion } from "@/lib/search-suggestions";
+import { useSearchHistoryStore } from "@/stores/search-history-store";
import { WelcomeBanner } from "@/components/ui/welcome-banner";
import { NavigationRail } from "@/components/layout/navigation-rail";
import { SidebarAppsModal } from "@/components/layout/sidebar-apps-modal";
@@ -81,7 +84,7 @@ import { EML_IMPORT_ACCEPT, expandImportableEmails } from "@/lib/eml-import";
import { findDraftIdentityId, resolveComposeAccountEmail, resolveReplyFrom, type ReplyFromResolution } from "@/lib/reply-identity";
import { buildReplyRecipients, isSelfSent } from "@/lib/reply-recipients";
import { useProMultiAccountIdentities } from "@/hooks/use-pro-multi-account-identities";
-import { Search, Filter, ChevronDown, X, Paperclip, Star, Mail, MailOpen, RotateCcw, PenSquare, PenLine, CheckSquare, Square, AlertTriangle } from "lucide-react";
+import { Filter, ChevronDown, X, Paperclip, Star, Mail, MailOpen, RotateCcw, PenSquare, PenLine, CheckSquare, Square, AlertTriangle } from "lucide-react";
import { ResizeHandle } from "@/components/layout/resize-handle";
import { Button } from "@/components/ui/button";
import { useConfig } from "@/hooks/use-config";
@@ -2780,6 +2783,7 @@ export function MailApp({ linkSegments }: MailAppProps = {}) {
const handleSearch = async (query: string) => {
if (!client) return;
setSearchQuery(query);
+ useSearchHistoryStore.getState().addRecentSearch(query);
if (!isFilterEmpty(searchFilters)) {
await advancedSearch(client);
} else {
@@ -2787,6 +2791,16 @@ export function MailApp({ linkSegments }: MailAppProps = {}) {
}
};
+ // A contact picked from the search-bar suggestions (#845) becomes a
+ // from:/to: filter — the typed text was only ever the lookup key, so it is
+ // dropped rather than ANDed into the query as a full-text term.
+ const handleSelectContactSuggestion = async (contact: ContactSuggestion, field: ContactSearchField) => {
+ if (!client) return;
+ setSearchQuery("");
+ setSearchFilters({ [field]: contact.email });
+ await advancedSearch(client);
+ };
+
const handleClearSearch = async () => {
setSearchQuery("");
clearSearchFilters();
@@ -3513,30 +3527,15 @@ export function MailApp({ linkSegments }: MailAppProps = {}) {
)}
-
+