11'use client'
22
3- import { useMemo , useCallback , memo , useEffect , useRef } from 'react'
3+ import { useMemo , useCallback , memo , useEffect , useRef , useState } from 'react'
44import { useQuery } from '@tanstack/react-query'
55import { useSession } from 'next-auth/react'
66import {
@@ -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