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' ;
8
2
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' ;
11
4
import RCContext from '../../context/RCInstance' ;
12
5
import { MessageAggregator } from './common/MessageAggregator' ;
13
6
@@ -17,52 +10,18 @@ const SearchMessages = () => {
17
10
const { RCInstance } = useContext ( RCContext ) ;
18
11
const [ text , setText ] = useState ( '' ) ;
19
12
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 ;
27
13
28
14
const handleInputChange = ( e ) => {
29
15
setText ( e . target . value ) ;
30
- setError ( null ) ;
31
16
} ;
32
17
33
18
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 ) ;
59
21
} , [ text , RCInstance ] ) ;
60
22
61
23
const debouncedSearch = useCallback (
62
24
debounce ( async ( ) => {
63
- if ( requestCount . current > 0 ) {
64
- return ;
65
- }
66
25
await searchMessages ( ) ;
67
26
} , 500 ) ,
68
27
[ searchMessages ]
@@ -73,43 +32,28 @@ const SearchMessages = () => {
73
32
if ( messageList . length > 0 ) {
74
33
setMessageList ( [ ] ) ;
75
34
}
76
- setError ( null ) ;
77
35
} else {
78
36
debouncedSearch ( ) ;
79
37
}
80
38
return ( ) => {
81
39
debouncedSearch . cancel ( ) ;
82
- requestCount . current = 0 ;
83
- lastRequestTime . current = 0 ;
84
40
} ;
85
41
} , [ text , debouncedSearch , messageList . length ] ) ;
86
42
87
43
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
+ />
113
57
) ;
114
58
} ;
115
59
export default SearchMessages ;
0 commit comments