+9
-2
components/Common/Search/States/WithSearchBox.tsx
+9
-2
components/Common/Search/States/WithSearchBox.tsx
···
71
}, []);
72
73
useEffect(
74
-
() => debounce(() => search(searchTerm), 1000),
75
// we don't need to care about memoization of search function
76
// eslint-disable-next-line react-hooks/exhaustive-deps
77
[searchTerm, selectedFacet]
···
100
};
101
102
const facets: Facets = {
103
-
all: searchResults?.count ?? 0,
104
...(searchResults?.facets?.siteSection?.values ?? {}),
105
};
106
···
71
}, []);
72
73
useEffect(
74
+
() => {
75
+
debounce(() => search(searchTerm), 1000)();
76
+
},
77
// we don't need to care about memoization of search function
78
// eslint-disable-next-line react-hooks/exhaustive-deps
79
[searchTerm, selectedFacet]
···
102
};
103
104
const facets: Facets = {
105
+
all: searchResults?.facets
106
+
? Object.values(searchResults?.facets.siteSection.values).reduce(
107
+
(a, b) => a + b,
108
+
0
109
+
)
110
+
: 0,
111
...(searchResults?.facets?.siteSection?.values ?? {}),
112
};
113
+7
-7
util/debounce.ts
+7
-7
util/debounce.ts
···
1
type DebounceFunction<T = unknown> = (...args: Array<T>) => void;
2
3
-
export const debounce = <T extends DebounceFunction>(
4
-
func: T,
5
-
delay: number
6
-
): ((...args: Parameters<T>) => void) => {
7
-
let timeoutId: NodeJS.Timeout;
8
9
-
return (...args: Parameters<T>) => {
10
clearTimeout(timeoutId);
11
12
timeoutId = setTimeout(() => {
13
func(...args);
14
}, delay);
15
};
16
-
};
···
1
type DebounceFunction<T = unknown> = (...args: Array<T>) => void;
2
3
+
let timeoutId: NodeJS.Timeout;
4
5
+
export const debounce =
6
+
<T extends DebounceFunction>(
7
+
func: T,
8
+
delay: number
9
+
): ((...args: Parameters<T>) => void) =>
10
+
(...args: Parameters<T>) => {
11
clearTimeout(timeoutId);
12
13
timeoutId = setTimeout(() => {
14
func(...args);
15
}, delay);
16
};