Skip to content

Commit c11abbf

Browse files
Revised debounce
1 parent 32ddef5 commit c11abbf

File tree

1 file changed

+17
-73
lines changed

1 file changed

+17
-73
lines changed
Lines changed: 17 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
1-
import React, {
2-
useState,
3-
useContext,
4-
useEffect,
5-
useCallback,
6-
useRef,
7-
} from 'react';
1+
import React, { useState, useContext, useEffect, useCallback } from 'react';
82
import debounce from 'lodash/debounce';
9-
import { useComponentOverrides, useTheme } from '@embeddedchat/ui-elements';
10-
import { css } from '@emotion/react';
3+
import { useComponentOverrides } from '@embeddedchat/ui-elements';
114
import RCContext from '../../context/RCInstance';
125
import { MessageAggregator } from './common/MessageAggregator';
136

@@ -17,52 +10,18 @@ const SearchMessages = () => {
1710
const { RCInstance } = useContext(RCContext);
1811
const [text, setText] = useState('');
1912
const [messageList, setMessageList] = useState([]);
20-
const [error, setError] = useState(null);
21-
22-
const { theme } = useTheme();
23-
24-
const requestCount = useRef(0);
25-
const lastRequestTime = useRef(0);
26-
const requestInterval = 1000;
2713

2814
const handleInputChange = (e) => {
2915
setText(e.target.value);
30-
setError(null);
3116
};
3217

3318
const searchMessages = useCallback(async () => {
34-
const presentTime = Date.now();
35-
if (presentTime - lastRequestTime.current < requestInterval) {
36-
return;
37-
}
38-
39-
requestCount.current += 1;
40-
lastRequestTime.current = presentTime;
41-
42-
try {
43-
const { messages } = await RCInstance.getSearchMessages(text);
44-
setMessageList(messages || []);
45-
requestCount.current -= 1;
46-
} catch (err) {
47-
if (err?.status === 429) {
48-
const retryAfter = parseInt(
49-
err.headers?.get('Retry-After') || '30',
50-
10
51-
);
52-
setError(`Please wait ${retryAfter} seconds`);
53-
setMessageList([]);
54-
} else {
55-
setError('Failed to search messages');
56-
}
57-
requestCount.current -= 1;
58-
}
19+
const { messages } = await RCInstance.getSearchMessages(text);
20+
setMessageList(messages);
5921
}, [text, RCInstance]);
6022

6123
const debouncedSearch = useCallback(
6224
debounce(async () => {
63-
if (requestCount.current > 0) {
64-
return;
65-
}
6625
await searchMessages();
6726
}, 500),
6827
[searchMessages]
@@ -73,43 +32,28 @@ const SearchMessages = () => {
7332
if (messageList.length > 0) {
7433
setMessageList([]);
7534
}
76-
setError(null);
7735
} else {
7836
debouncedSearch();
7937
}
8038
return () => {
8139
debouncedSearch.cancel();
82-
requestCount.current = 0;
83-
lastRequestTime.current = 0;
8440
};
8541
}, [text, debouncedSearch, messageList.length]);
8642

8743
return (
88-
<>
89-
<MessageAggregator
90-
title="Search Messages"
91-
iconName="magnifier"
92-
noMessageInfo="No results found"
93-
searchProps={{
94-
isSearch: true,
95-
handleInputChange,
96-
placeholder: 'Search Messages',
97-
}}
98-
searchFiltered={messageList}
99-
shouldRender={(msg) => !!msg}
100-
viewType={viewType}
101-
/>
102-
{error && (
103-
<div
104-
css={css`
105-
color: ${theme.colors.destructive};
106-
font-size: 13px;
107-
`}
108-
>
109-
{error}
110-
</div>
111-
)}
112-
</>
44+
<MessageAggregator
45+
title="Search Messages"
46+
iconName="magnifier"
47+
noMessageInfo="No results found"
48+
searchProps={{
49+
isSearch: true,
50+
handleInputChange,
51+
placeholder: 'Search Messages',
52+
}}
53+
searchFiltered={messageList}
54+
shouldRender={(msg) => !!msg}
55+
viewType={viewType}
56+
/>
11357
);
11458
};
11559
export default SearchMessages;

0 commit comments

Comments
 (0)