@@ -150,6 +150,20 @@ const getMembersAndWatchers = <
150150 ) ;
151151} ;
152152
153+ type QueryMembersFunction = <
154+ At extends UnknownType = DefaultAttachmentType ,
155+ Ch extends UnknownType = DefaultChannelType ,
156+ Co extends string = DefaultCommandType ,
157+ Ev extends UnknownType = DefaultEventType ,
158+ Me extends UnknownType = DefaultMessageType ,
159+ Re extends UnknownType = DefaultReactionType ,
160+ Us extends UnknownType = DefaultUserType
161+ > (
162+ channel : Channel < At , Ch , Co , Ev , Me , Re , Us > ,
163+ query : SuggestionUser < Us > [ 'name' ] ,
164+ onReady ?: ( users : SuggestionUser < Us > [ ] ) => void ,
165+ ) => Promise < void > ;
166+
153167// TODO: test to see if this function works as it integrated a debounce function
154168const queryMembers = async <
155169 At extends UnknownType = DefaultAttachmentType ,
@@ -164,27 +178,30 @@ const queryMembers = async <
164178 query : SuggestionUser < Us > [ 'name' ] ,
165179 onReady ?: ( users : SuggestionUser < Us > [ ] ) => void ,
166180) : Promise < void > => {
167- await debounce (
168- async ( ) => {
169- if ( typeof query === 'string' ) {
170- const response = ( await ( ( channel as unknown ) as Channel ) . queryMembers ( {
171- name : { $autocomplete : query } ,
172- } ) ) as ChannelMemberAPIResponse < Us > ;
173-
174- const users : SuggestionUser < Us > [ ] = [ ] ;
175- response . members . forEach (
176- ( member ) => isUserResponse ( member . user ) && users . push ( member . user ) ,
177- ) ;
178- if ( onReady && users ) {
179- onReady ( users ) ;
180- }
181- }
182- } ,
183- 200 ,
184- { leading : false , trailing : true } ,
185- ) ;
181+ if ( typeof query === 'string' ) {
182+ const response = ( await ( ( channel as unknown ) as Channel ) . queryMembers ( {
183+ name : { $autocomplete : query } ,
184+ } ) ) as ChannelMemberAPIResponse < Us > ;
185+
186+ const users : SuggestionUser < Us > [ ] = [ ] ;
187+ response . members . forEach (
188+ ( member ) => isUserResponse ( member . user ) && users . push ( member . user ) ,
189+ ) ;
190+ if ( onReady && users ) {
191+ onReady ( users ) ;
192+ }
193+ }
186194} ;
187195
196+ export const queryMembersDebounced = debounce < QueryMembersFunction > (
197+ queryMembers ,
198+ 200 ,
199+ {
200+ leading : false ,
201+ trailing : true ,
202+ } ,
203+ ) ;
204+
188205export const isMentionTrigger = ( trigger : Trigger ) : trigger is '@' =>
189206 trigger === '@' ;
190207
@@ -223,7 +240,7 @@ export type TriggerSettings<
223240 data : SuggestionUser < Us > [ ] ,
224241 q : SuggestionUser < Us > [ 'name' ] ,
225242 ) => void ,
226- ) => SuggestionUser < Us > [ ] | Promise < void > ;
243+ ) => SuggestionUser < Us > [ ] | Promise < void > | void ;
227244 output : (
228245 entity : SuggestionUser < Us > ,
229246 ) => {
@@ -246,6 +263,7 @@ export type ACITriggerSettingsParams<
246263> = {
247264 channel : Channel < At , Ch , Co , Ev , Me , Re , Us > ;
248265 onMentionSelectItem : ( item : SuggestionUser < Us > ) => void ;
266+ autocompleteSuggestionsLimit ?: number ;
249267} & Pick < TranslationContextValue , 't' > ;
250268
251269/**
@@ -271,6 +289,7 @@ export const ACITriggerSettings = <
271289 channel,
272290 onMentionSelectItem,
273291 t = ( msg : string ) => msg ,
292+ autocompleteSuggestionsLimit = 10 ,
274293} : ACITriggerSettingsParams < At , Ch , Co , Ev , Me , Re , Us > ) : TriggerSettings <
275294 Co ,
276295 Us
@@ -300,7 +319,7 @@ export const ACITriggerSettings = <
300319 return 0 ;
301320 } ) ;
302321
303- const result = selectedCommands . slice ( 0 , 10 ) ;
322+ const result = selectedCommands . slice ( 0 , autocompleteSuggestionsLimit ) ;
304323
305324 if ( onReady ) {
306325 onReady ( result , query ) ;
@@ -343,7 +362,7 @@ export const ACITriggerSettings = <
343362 return false ;
344363 } ) ;
345364
346- const data = matchingUsers . slice ( 0 , 10 ) ;
365+ const data = matchingUsers . slice ( 0 , autocompleteSuggestionsLimit ) ;
347366
348367 if ( onReady ) {
349368 onReady ( data , query ) ;
@@ -352,7 +371,7 @@ export const ACITriggerSettings = <
352371 return data ;
353372 }
354373
355- return queryMembers ( channel , query , ( data ) => {
374+ return queryMembersDebounced ( channel , query , ( data ) => {
356375 if ( onReady ) {
357376 onReady ( data , query ) ;
358377 }
0 commit comments