TF-2302 Get device contact when missing autocomplete capability

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit ff1f28789c620c73cc2cfd8c5ed538de135f4752)
This commit is contained in:
dab246
2023-11-07 12:10:23 +07:00
committed by Dat Vu
parent 6d05079b1e
commit bfa596eb9f
7 changed files with 101 additions and 20 deletions
@@ -38,11 +38,13 @@ import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart';
import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart';
import 'package:tmail_ui_user/features/composer/domain/state/get_device_contact_suggestions_state.dart';
import 'package:tmail_ui_user/features/composer/domain/state/save_email_as_drafts_state.dart';
import 'package:tmail_ui_user/features/composer/domain/state/update_email_drafts_state.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/download_image_as_base64_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_all_autocomplete_interactor.dart';
import 'package:tmail_ui_user/features/composer/domain/usecases/get_device_contact_suggestions_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
@@ -129,6 +131,7 @@ class ComposerController extends BaseController {
GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor;
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
GetDeviceContactSuggestionsInteractor? _getDeviceContactSuggestionsInteractor;
List<EmailAddress> listToEmailAddress = <EmailAddress>[];
List<EmailAddress> listCcEmailAddress = <EmailAddress>[];
@@ -1031,12 +1034,21 @@ class ComposerController extends BaseController {
log('ComposerController::getAutoCompleteSuggestion(): $word | $_contactSuggestionSource');
_getAllAutoCompleteInteractor = getBinding<GetAllAutoCompleteInteractor>();
_getAutoCompleteInteractor = getBinding<GetAutoCompleteInteractor>();
_getDeviceContactSuggestionsInteractor = getBinding<GetDeviceContactSuggestionsInteractor>();
final accountId = mailboxDashBoardController.accountId.value;
if (_contactSuggestionSource == ContactSuggestionSource.all) {
if (_getAllAutoCompleteInteractor == null || _getAutoCompleteInteractor == null) {
if (_getAllAutoCompleteInteractor == null && _getDeviceContactSuggestionsInteractor == null) {
return <EmailAddress>[];
} else if (_getDeviceContactSuggestionsInteractor != null) {
final listEmailAddress = await _getDeviceContactSuggestionsInteractor!
.execute(AutoCompletePattern(word: word, accountId: accountId))
.then((value) => value.fold(
(failure) => <EmailAddress>[],
(success) => _getAutoCompleteSuccess(success, word)
));
return listEmailAddress;
}
final listEmailAddress = await _getAllAutoCompleteInteractor!
@@ -1076,6 +1088,20 @@ class ComposerController extends BaseController {
}
}
return success.listEmailAddress;
} else if (success is GetDeviceContactSuggestionsSuccess) {
if (success.listEmailAddress.isEmpty == true && GetUtils.isEmail(word)) {
final unknownEmailAddress = EmailAddress(word, word);
return <EmailAddress>[unknownEmailAddress];
}
if (GetUtils.isEmail(word)) {
bool isContainsTypedEmail = success.listEmailAddress.any((emailAddress) => emailAddress.email == word);
if (!isContainsTypedEmail) {
final unknownEmailAddress = EmailAddress(word, word);
success.listEmailAddress.insert(0, unknownEmailAddress);
return success.listEmailAddress;
}
}
return success.listEmailAddress;
} else {
return <EmailAddress>[];
}