Skip to content

Commit dc65253

Browse files
committed
add Sentry breadcrumbs for search interactions
1 parent aff5b33 commit dc65253

File tree

1 file changed

+35
-4
lines changed

1 file changed

+35
-4
lines changed

components/SearchSection.tsx

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,54 @@
11
"use client";
22

33
import { SearchIcon } from "lucide-react";
4-
import React from "react";
4+
5+
import * as Sentry from "@sentry/browser";
56
import {
67
SearchBox,
78
useInstantSearch,
89
useSearchBox,
910
PoweredBy,
1011
} from "react-instantsearch";
12+
import { useEffect, useState } from "react";
1113

1214
export function SearchSection() {
1315
const { results } = useInstantSearch();
1416
const { query } = useSearchBox();
15-
const [mounted, setMounted] = React.useState(false);
17+
const [mounted, setMounted] = useState(false);
1618

17-
React.useEffect(() => {
19+
useEffect(() => {
1820
setMounted(true);
1921
}, []);
2022

23+
useEffect(() => {
24+
if (mounted && query) {
25+
Sentry.addBreadcrumb({
26+
category: "search",
27+
message: `Search query executed: ${query}`,
28+
level: "info",
29+
data: {
30+
query_length: query.length,
31+
results_count: results.nbHits,
32+
search_timestamp: new Date().toISOString(),
33+
search_interface: "main_search",
34+
},
35+
});
36+
}
37+
}, [mounted, query, results.nbHits]);
38+
39+
const handleSearchFocus = () => {
40+
Sentry.addBreadcrumb({
41+
category: "ui.interaction",
42+
message: "User focused on main search input field",
43+
level: "info",
44+
data: {
45+
search_interface: "main_search",
46+
query_length: query ? query.length : 0,
47+
timestamp: new Date().toISOString(),
48+
},
49+
});
50+
};
51+
2152
return (
2253
<div className="max-w-3xl mx-auto">
2354
<div className="border-2 border-gray-200 rounded-xl transition-all duration-200 shadow-sm hover:shadow-md">
@@ -40,10 +71,10 @@ export function SearchSection() {
4071
reset: "hidden",
4172
loadingIndicator: "hidden",
4273
}}
74+
onFocus={handleSearchFocus}
4375
/>
4476
</div>
4577
<div className="flex items-center pr-4 border-l border-gray-200 ml-2 pl-4">
46-
{/* Render PoweredBy only after mount to avoid hydration mismatch */}
4778
{mounted ? (
4879
<PoweredBy
4980
classNames={{

0 commit comments

Comments
 (0)