@@ -2,6 +2,7 @@ import {QuestionMarkCircleIcon} from '@heroicons/react/24/outline'
22import { DisplayUser } from 'common/api/user-types'
33import { FilterFields } from 'common/filters'
44import { Profile } from 'common/profiles/profile'
5+ import { debounce as debounceFn } from 'lodash'
56import { forwardRef , ReactElement , useEffect , useRef , useState } from 'react'
67import toast from 'react-hot-toast'
78import { IoFilterSharp } from 'react-icons/io5'
@@ -180,6 +181,22 @@ export const Search = forwardRef<
180181 const isClearedFilters = useIsClearedFilters ( filters )
181182 const choices = useChoicesContext ( )
182183
184+ const [ keywordInput , setKeywordInput ] = useState ( filters . name ?? '' )
185+
186+ const debouncedUpdateFilter = useRef (
187+ debounceFn ( ( value : string ) => {
188+ updateFilter ( { name : value || undefined } )
189+ } , 500 ) ,
190+ ) . current
191+
192+ useEffect ( ( ) => {
193+ debouncedUpdateFilter ( keywordInput )
194+ } , [ keywordInput , debouncedUpdateFilter ] )
195+
196+ useEffect ( ( ) => {
197+ setKeywordInput ( filters . name ?? '' )
198+ } , [ filters . name ] )
199+
183200 useEffect ( ( ) => {
184201 if ( isHolding ) return
185202
@@ -214,11 +231,11 @@ export const Search = forwardRef<
214231 < Row className = { 'mb-2 justify-between gap-2' } >
215232 < Input
216233 ref = { ref }
217- value = { filters . name ?? '' }
234+ value = { keywordInput }
218235 placeholder = { placeholder }
219236 className = { 'w-full max-w-xs' }
220237 onChange = { ( e : React . ChangeEvent < HTMLInputElement > ) => {
221- updateFilter ( { name : e . target . value || undefined } )
238+ setKeywordInput ( e . target . value )
222239 } }
223240 />
224241
0 commit comments