import { KeyboardEvent, useEffect, useState } from 'react'; import { useDebounce } from './use-debounce'; import { BackspaceIcon, FunnelIcon } from '@heroicons/react/24/outline'; export interface DebouncedTextInputProps { initialText: string; placeholderText: string; resetTextFilter: () => void; updateTextFilter: (textFilter: string) => void; } export function DebouncedTextInput({ initialText, placeholderText, resetTextFilter, updateTextFilter, }: DebouncedTextInputProps) { const [currentTextFilter, setCurrentTextFilter] = useState(initialText ?? ''); const [debouncedValue, setDebouncedValue] = useDebounce( currentTextFilter, 500 ); function onTextFilterKeyUp(event: KeyboardEvent) { if (event.key === 'Enter') { onTextInputChange(event.currentTarget.value); } } function onTextInputChange(change: string) { if (change === '') { setCurrentTextFilter(''); setDebouncedValue(''); resetTextFilter(); } else { setCurrentTextFilter(change); } } function resetClicked() { setCurrentTextFilter(''); setDebouncedValue(''); resetTextFilter(); } useEffect(() => { if (debouncedValue !== '') { updateTextFilter(debouncedValue); } }, [debouncedValue, updateTextFilter]); return (
event.preventDefault()} > onTextInputChange(event.currentTarget.value)} > {currentTextFilter.length > 0 ? ( ) : null}
); }