|
1 |
| -import { useEffect, useState } from 'react'; |
| 1 | +import { useMemo, useState } from 'react'; |
2 | 2 |
|
3 | 3 | const normalizeString = (str: string) => str.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
|
4 | 4 |
|
@@ -37,21 +37,20 @@ const defaultFilterSuggestions = <T>(
|
37 | 37 | };
|
38 | 38 |
|
39 | 39 | const useDefaultComboBox = <T>(suggestions: T[], getSuggestionLabel: (suggestion: T) => string) => {
|
40 |
| - const [filteredSuggestions, setFilteredSuggestions] = useState<T[]>(suggestions); |
41 | 40 | const [query, setQuery] = useState('');
|
42 | 41 |
|
| 42 | + const filteredSuggestions = useMemo( |
| 43 | + () => defaultFilterSuggestions(getSuggestionLabel, suggestions, query), |
| 44 | + // eslint-disable-next-line react-hooks/exhaustive-deps |
| 45 | + [suggestions, query] |
| 46 | + ); |
| 47 | + |
43 | 48 | const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
44 | 49 | setQuery(e.target.value);
|
45 | 50 | };
|
46 | 51 |
|
47 |
| - useEffect(() => { |
48 |
| - const newSuggestions = defaultFilterSuggestions(getSuggestionLabel, suggestions, query); |
49 |
| - setFilteredSuggestions(newSuggestions); |
50 |
| - // eslint-disable-next-line react-hooks/exhaustive-deps |
51 |
| - }, [suggestions, query]); |
52 |
| - |
53 | 52 | const resetSuggestions = () => {
|
54 |
| - setFilteredSuggestions(suggestions); |
| 53 | + setQuery(''); |
55 | 54 | };
|
56 | 55 |
|
57 | 56 | return { suggestions: filteredSuggestions, onChange, resetSuggestions };
|
|
0 commit comments