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
@@ -1,14 +1,14 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:model/contact/contact.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
class GetDeviceContactSuggestionsSuccess extends UIState {
final List<Contact> results;
final List<EmailAddress> listEmailAddress;
GetDeviceContactSuggestionsSuccess(this.results);
GetDeviceContactSuggestionsSuccess(this.listEmailAddress);
@override
List<Object> get props => [results];
List<Object> get props => [listEmailAddress];
}
class GetDeviceContactSuggestionsFailure extends FeatureFailure {
@@ -1,10 +1,10 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
import 'package:model/autocomplete/auto_complete_pattern.dart';
import 'package:model/contact/contact.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/usecases/get_autocomplete_interactor.dart';
@@ -26,16 +26,25 @@ class GetAllAutoCompleteInteractor {
_getDeviceContactSuggestionsInteractor.execute(autoCompletePattern)
]);
final autoCompleteResults = resultExecutions.first.fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess ? success.listEmailAddress : <EmailAddress>[]);
final autoCompleteResults = List<EmailAddress>.empty(growable: true);
resultExecutions.last.map((success) {
if (success is GetDeviceContactSuggestionsSuccess && success.results.isNotEmpty) {
autoCompleteResults.addAll(success.results.map((contact) => contact.toEmailAddress()));
}
}
final listEmailAddressFromServer = resultExecutions[0].fold(
(failure) => <EmailAddress>[],
(success) => success is GetAutoCompleteSuccess
? success.listEmailAddress
: <EmailAddress>[]
);
log('GetAllAutoCompleteInteractor::execute:listEmailAddressFromServerc: $listEmailAddressFromServer');
autoCompleteResults.addAll(listEmailAddressFromServer);
final listEmailAddressFromDevice = resultExecutions[1].fold(
(failure) => <EmailAddress>[],
(success) => success is GetDeviceContactSuggestionsSuccess
? success.listEmailAddress
: <EmailAddress>[]
);
log('GetAllAutoCompleteInteractor::execute:listEmailAddressFromDevice: $listEmailAddressFromDevice');
autoCompleteResults.addAll(listEmailAddressFromDevice);
return Right<Failure, Success>(GetAutoCompleteSuccess(autoCompleteResults));
} catch (exception) {
@@ -1,7 +1,10 @@
import 'package:core/core.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:model/autocomplete/auto_complete_pattern.dart';
import 'package:model/contact/contact.dart';
import 'package:tmail_ui_user/features/composer/domain/repository/contact_repository.dart';
import 'package:tmail_ui_user/features/composer/domain/state/get_device_contact_suggestions_state.dart';
@@ -13,7 +16,9 @@ class GetDeviceContactSuggestionsInteractor {
Future<Either<Failure, Success>> execute(AutoCompletePattern autoCompletePattern) async {
try {
final resultList = await _contactRepository.getContactSuggestions(autoCompletePattern);
return Right<Failure, Success>(GetDeviceContactSuggestionsSuccess(resultList));
final listEmailAddress = resultList.map((contact) => contact.toEmailAddress()).toList();
log('GetDeviceContactSuggestionsInteractor::execute:listEmailAddress: $listEmailAddress');
return Right<Failure, Success>(GetDeviceContactSuggestionsSuccess(listEmailAddress));
} catch (exception) {
return Left<Failure, Success>(GetDeviceContactSuggestionsFailure(exception));
}