Skip to content

Commit cd1ba6a

Browse files
committed
Agent Store: Debounce search query
1 parent 308e4d7 commit cd1ba6a

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

web/src/app/store/store-client.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
'use client'
22

3-
import { useMemo, useCallback, memo, useEffect, useRef } from 'react'
3+
import { useMemo, useCallback, memo, useEffect, useRef, useState } from 'react'
44
import { useQuery } from '@tanstack/react-query'
55
import { useSession } from 'next-auth/react'
66
import {
@@ -148,6 +148,9 @@ export default function AgentStoreClient({
148148
setSortBy,
149149
} = useAgentStoreState()
150150

151+
// Local state for immediate input feedback
152+
const [localSearchQuery, setLocalSearchQuery] = useState(searchQuery)
153+
151154
const observerRef = useRef<IntersectionObserver | null>(null)
152155
const loadMoreRef = useRef<HTMLDivElement>(null)
153156
const prevFilters = useRef({ searchQuery: '', sortBy: 'cost' })
@@ -160,12 +163,22 @@ export default function AgentStoreClient({
160163
const urlSortBy = (searchParams.sort as string) || 'cost'
161164

162165
setSearchQuery(urlSearchQuery)
166+
setLocalSearchQuery(urlSearchQuery)
163167
setSortBy(urlSortBy)
164168
prevFilters.current = { searchQuery: urlSearchQuery, sortBy: urlSortBy }
165169
isInitialized.current = true
166170
}
167171
}, [searchParams.search, searchParams.sort, setSearchQuery, setSortBy])
168172

173+
// Debounce search query updates
174+
useEffect(() => {
175+
const timeoutId = setTimeout(() => {
176+
setSearchQuery(localSearchQuery)
177+
}, 300)
178+
179+
return () => clearTimeout(timeoutId)
180+
}, [localSearchQuery, setSearchQuery])
181+
169182
// Use ref to track loading state for IntersectionObserver
170183
const loadingStateRef = useRef({ isLoadingMore, hasMore })
171184
useEffect(() => {
@@ -540,8 +553,8 @@ export default function AgentStoreClient({
540553
<Search className="absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4" />
541554
<Input
542555
placeholder="Search agents..."
543-
value={searchQuery}
544-
onChange={(e) => setSearchQuery(e.target.value)}
556+
value={localSearchQuery}
557+
onChange={(e) => setLocalSearchQuery(e.target.value)}
545558
className="pl-10 w-full"
546559
/>
547560
</div>

0 commit comments

Comments
 (0)