TF-3408 Remove limit result in autocomplete

This commit is contained in:
dab246
2025-01-15 04:27:49 +07:00
committed by Dat H. Pham
parent 840645b8f1
commit b73784742a
13 changed files with 100 additions and 39 deletions
@@ -222,14 +222,15 @@ class AdvancedFilterController extends BaseController {
_mailboxDashBoardController.handleAdvancedSearchEmail();
}
Future<List<EmailAddress>> getAutoCompleteSuggestion(String word) async {
log('AdvancedFilterController::getAutoCompleteSuggestion(): word = $word');
Future<List<EmailAddress>> getAutoCompleteSuggestion(String word, {int? limit}) async {
log('AdvancedFilterController::getAutoCompleteSuggestion():word = $word | limit = $limit');
_getAutoCompleteInteractor = getBinding<GetAutoCompleteInteractor>();
return await _getAutoCompleteInteractor
?.execute(AutoCompletePattern(
word: word,
accountId: _mailboxDashBoardController.accountId.value
limit: limit,
accountId: _mailboxDashBoardController.accountId.value,
)).then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess
@@ -21,7 +21,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/ad
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/autocomplete_tag_item_widget_web.dart';
import 'package:tmail_ui_user/main/utils/app_config.dart';
typedef OnSuggestionEmailAddress = Future<List<EmailAddress>> Function(String word);
typedef OnSuggestionEmailAddress = Future<List<EmailAddress>> Function(String word, {int? limit});
typedef OnUpdateListEmailAddressAction = void Function(AdvancedSearchFilterField field, List<EmailAddress> newData);
typedef OnDeleteEmailAddressTypeAction = void Function(AdvancedSearchFilterField field);
typedef OnShowFullListEmailAddressAction = void Function(AdvancedSearchFilterField field);
@@ -188,7 +188,13 @@ class _TextFieldAutocompleteEmailAddressWebState extends State<TextFieldAutocomp
);
},
onTagChanged: (tag) => _handleOnTagChangeAction.call(tag, setState),
findSuggestions: _findSuggestions,
findSuggestions: (queryString) => _findSuggestions(
queryString,
limit: AppConfig.defaultLimitAutocomplete,
),
isLoadMoreOnlyOnce: true,
isLoadMoreReplaceAllOld: false,
loadMoreSuggestions: _findSuggestions,
suggestionBuilder: (context, tagEditorState, suggestionEmailAddress, index, length, highlight, suggestionValid) {
return AutoCompleteSuggestionItemWidgetWeb(
suggestionState: suggestionEmailAddress.state,
@@ -233,7 +239,7 @@ class _TextFieldAutocompleteEmailAddressWebState extends State<TextFieldAutocomp
? _currentListEmailAddress.sublist(0, 1)
: _currentListEmailAddress;
FutureOr<List<SuggestionEmailAddress>> _findSuggestions(String query) async {
FutureOr<List<SuggestionEmailAddress>> _findSuggestions(String query, {int? limit}) async {
if (_gapBetweenTagChangedAndFindSuggestion?.isActive ?? false) {
return [];
}
@@ -246,7 +252,10 @@ class _TextFieldAutocompleteEmailAddressWebState extends State<TextFieldAutocomp
final tmailSuggestion = List<SuggestionEmailAddress>.empty(growable: true);
if (processedQuery.length >= widget.minInputLengthAutocomplete &&
widget.onSuggestionEmailAddress != null) {
final listEmailAddress = await widget.onSuggestionEmailAddress!(processedQuery);
final listEmailAddress = await widget.onSuggestionEmailAddress!(
processedQuery,
limit: limit,
);
final listSuggestionEmailAddress = listEmailAddress.map((emailAddress) => _toSuggestionEmailAddress(emailAddress, _currentListEmailAddress));
tmailSuggestion.addAll(listSuggestionEmailAddress);
}