import { useMemo, useState } from 'react'; export interface UseSearchOptions { dataSource: T[]; filterFn: (item: T, searchText: string) => boolean; } export function useSearch(options: UseSearchOptions) { const { dataSource, filterFn } = options; const [searchText, setSearchText] = useState(''); const isSearching = searchText !== ''; const searchResult = useMemo(() => { return dataSource.filter((item) => filterFn(item, searchText)); }, [dataSource, searchText]); return { searchText, setSearchText, isSearching, searchResult, }; }