TF-3834 Implement remember user sort order after search
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
|
|
||||||
abstract class SearchDataSource {
|
abstract class SearchDataSource {
|
||||||
Future<void> saveRecentSearch(
|
Future<void> saveRecentSearch(
|
||||||
@@ -17,4 +18,8 @@ abstract class SearchDataSource {
|
|||||||
String? pattern,
|
String? pattern,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Future<void> storeEmailSortOrder(EmailSortOrderType sortOrderType);
|
||||||
|
|
||||||
|
Future<EmailSortOrderType> getStoredEmailSortOrder();
|
||||||
}
|
}
|
||||||
@@ -3,15 +3,22 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:tmail_ui_user/features/cleanup/data/local/recent_search_cache_manager.dart';
|
import 'package:tmail_ui_user/features/cleanup/data/local/recent_search_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_order_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||||
|
|
||||||
class SearchDataSourceImpl extends SearchDataSource {
|
class SearchDataSourceImpl extends SearchDataSource {
|
||||||
|
|
||||||
final RecentSearchCacheManager _recentSearchCacheManager;
|
final RecentSearchCacheManager _recentSearchCacheManager;
|
||||||
|
final LocalSortOrderManager _localSortOrderManager;
|
||||||
final ExceptionThrower _exceptionThrower;
|
final ExceptionThrower _exceptionThrower;
|
||||||
|
|
||||||
SearchDataSourceImpl(this._recentSearchCacheManager, this._exceptionThrower);
|
SearchDataSourceImpl(
|
||||||
|
this._recentSearchCacheManager,
|
||||||
|
this._localSortOrderManager,
|
||||||
|
this._exceptionThrower,
|
||||||
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> saveRecentSearch(
|
Future<void> saveRecentSearch(
|
||||||
@@ -46,4 +53,18 @@ class SearchDataSourceImpl extends SearchDataSource {
|
|||||||
);
|
);
|
||||||
}).catchError(_exceptionThrower.throwException);
|
}).catchError(_exceptionThrower.throwException);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> storeEmailSortOrder(EmailSortOrderType sortOrderType) {
|
||||||
|
return Future.sync(() async {
|
||||||
|
return await _localSortOrderManager.storeEmailSortOrderIfChanged(sortOrderType);
|
||||||
|
}).catchError(_exceptionThrower.throwException);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<EmailSortOrderType> getStoredEmailSortOrder() {
|
||||||
|
return Future.sync(() {
|
||||||
|
return _localSortOrderManager.getStoredEmailSortOrder();
|
||||||
|
}).catchError(_exceptionThrower.throwException);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||||
|
|
||||||
|
class LocalSortOrderManager {
|
||||||
|
static const String _emailSortOrderKey = 'email.sort_order';
|
||||||
|
|
||||||
|
final SharedPreferences _sharedPreferences;
|
||||||
|
|
||||||
|
LocalSortOrderManager(this._sharedPreferences);
|
||||||
|
|
||||||
|
Future<bool> storeEmailSortOrder(
|
||||||
|
EmailSortOrderType emailSortOrderType,
|
||||||
|
) async {
|
||||||
|
return await _sharedPreferences.setString(
|
||||||
|
_emailSortOrderKey,
|
||||||
|
emailSortOrderType.name,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isEmailSortOrderStored(EmailSortOrderType emailSortOrderType) {
|
||||||
|
final stored = _sharedPreferences.getString(_emailSortOrderKey);
|
||||||
|
return stored == emailSortOrderType.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> storeEmailSortOrderIfChanged(
|
||||||
|
EmailSortOrderType emailSortOrderType,
|
||||||
|
) async {
|
||||||
|
if (isEmailSortOrderStored(emailSortOrderType)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return await storeEmailSortOrder(emailSortOrderType);
|
||||||
|
}
|
||||||
|
|
||||||
|
EmailSortOrderType getStoredEmailSortOrder() {
|
||||||
|
final value = _sharedPreferences.getString(_emailSortOrderKey);
|
||||||
|
log('LocalSortOrderManager::getStoredEmailSortOrder: $value');
|
||||||
|
if (value == null) {
|
||||||
|
return SearchEmailFilter.defaultSortOrder;
|
||||||
|
}
|
||||||
|
return EmailSortOrderType.values.firstWhere(
|
||||||
|
(e) => e.name == value,
|
||||||
|
orElse: () => SearchEmailFilter.defaultSortOrder,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource/search_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
|
|
||||||
class SearchRepositoryImpl extends SearchRepository {
|
class SearchRepositoryImpl extends SearchRepository {
|
||||||
|
|
||||||
@@ -36,4 +37,14 @@ class SearchRepositoryImpl extends SearchRepository {
|
|||||||
pattern: pattern,
|
pattern: pattern,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> storeEmailSortOrder(EmailSortOrderType sortOrderType) {
|
||||||
|
return searchDataSource.storeEmailSortOrder(sortOrderType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<EmailSortOrderType> getStoredEmailSortOrder() {
|
||||||
|
return searchDataSource.getStoredEmailSortOrder();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
|
|
||||||
abstract class SearchRepository {
|
abstract class SearchRepository {
|
||||||
Future<void> saveRecentSearch(
|
Future<void> saveRecentSearch(
|
||||||
@@ -18,4 +19,8 @@ abstract class SearchRepository {
|
|||||||
String? pattern,
|
String? pattern,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
Future<void> storeEmailSortOrder(EmailSortOrderType sortOrderType);
|
||||||
|
|
||||||
|
Future<EmailSortOrderType> getStoredEmailSortOrder();
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
|
|
||||||
|
class GettingStoredEmailSortOrder extends LoadingState {}
|
||||||
|
|
||||||
|
class GetStoredEmailSortOrderSuccess extends UIState {
|
||||||
|
final EmailSortOrderType emailSortOrderType;
|
||||||
|
|
||||||
|
GetStoredEmailSortOrderSuccess(this.emailSortOrderType);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [emailSortOrderType];
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetStoredEmailSortOrderFailure extends FeatureFailure {
|
||||||
|
|
||||||
|
GetStoredEmailSortOrderFailure(dynamic exception) : super(exception: exception);
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
|
||||||
|
class StoringEmailSortOrder extends LoadingState {}
|
||||||
|
|
||||||
|
class StoreEmailSortOrderSuccess extends UIState {}
|
||||||
|
|
||||||
|
class StoreEmailSortOrderFailure extends FeatureFailure {
|
||||||
|
|
||||||
|
StoreEmailSortOrderFailure(dynamic exception) : super(exception: exception);
|
||||||
|
}
|
||||||
+21
@@ -0,0 +1,21 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_stored_email_sort_order_state.dart';
|
||||||
|
|
||||||
|
class GetStoredEmailSortOrderInteractor {
|
||||||
|
final SearchRepository _searchRepository;
|
||||||
|
|
||||||
|
const GetStoredEmailSortOrderInteractor(this._searchRepository);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute() async* {
|
||||||
|
try {
|
||||||
|
yield Right(GettingStoredEmailSortOrder());
|
||||||
|
final emailSortOrderType = await _searchRepository.getStoredEmailSortOrder();
|
||||||
|
yield Right(GetStoredEmailSortOrderSuccess(emailSortOrderType));
|
||||||
|
} catch (exception) {
|
||||||
|
yield Left(GetStoredEmailSortOrderFailure(exception));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
|
import 'package:core/presentation/state/success.dart';
|
||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/repository/search_repository.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/store_email_sort_order_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
|
|
||||||
|
class StoreEmailSortOrderInteractor {
|
||||||
|
final SearchRepository _searchRepository;
|
||||||
|
|
||||||
|
const StoreEmailSortOrderInteractor(this._searchRepository);
|
||||||
|
|
||||||
|
Stream<Either<Failure, Success>> execute(
|
||||||
|
EmailSortOrderType sortOrderType,
|
||||||
|
) async* {
|
||||||
|
try {
|
||||||
|
yield Right(StoringEmailSortOrder());
|
||||||
|
await _searchRepository.storeEmailSortOrder(sortOrderType);
|
||||||
|
yield Right(StoreEmailSortOrderSuccess());
|
||||||
|
} catch (exception) {
|
||||||
|
yield Left(StoreEmailSortOrderFailure(exception));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,6 +6,7 @@ import 'package:model/email/presentation_email.dart';
|
|||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
|
|
||||||
@@ -147,4 +148,13 @@ class OpenAdvancedSearchViewAction extends DashBoardAction {}
|
|||||||
|
|
||||||
class ClearSearchFilterAppliedAction extends DashBoardAction {}
|
class ClearSearchFilterAppliedAction extends DashBoardAction {}
|
||||||
|
|
||||||
class ClearAdvancedSearchFilterEmailAction extends DashBoardAction {}
|
class ClearAdvancedSearchFilterEmailAction extends DashBoardAction {}
|
||||||
|
|
||||||
|
class SynchronizeEmailSortOrderAction extends DashBoardAction {
|
||||||
|
final EmailSortOrderType emailSortOrderType;
|
||||||
|
|
||||||
|
SynchronizeEmailSortOrderAction(this.emailSortOrderType);
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [emailSortOrderType];
|
||||||
|
}
|
||||||
@@ -68,6 +68,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/lo
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/local_spam_report_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/local_spam_report_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/search_datasource_impl.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/search_datasource_impl.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/datasource_impl/session_storage_composer_datasoure_impl.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_order_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_spam_report_manager.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_spam_report_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/network/linagora_ecosystem_api.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/app_grid_repository_impl.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/repository/app_grid_repository_impl.dart';
|
||||||
@@ -84,11 +85,13 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_app
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_mailbox_cached_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_spam_report_state_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_last_time_dismissed_spam_reported_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_spam_report_state_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_spam_report_state_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
||||||
@@ -206,6 +209,8 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
Get.find<RemoveComposerCacheByIdOnWebInteractor>(),
|
Get.find<RemoveComposerCacheByIdOnWebInteractor>(),
|
||||||
Get.find<GetAllIdentitiesInteractor>(),
|
Get.find<GetAllIdentitiesInteractor>(),
|
||||||
Get.find<ClearMailboxInteractor>(),
|
Get.find<ClearMailboxInteractor>(),
|
||||||
|
Get.find<StoreEmailSortOrderInteractor>(),
|
||||||
|
Get.find<GetStoredEmailSortOrderInteractor>(),
|
||||||
));
|
));
|
||||||
Get.put(AdvancedFilterController());
|
Get.put(AdvancedFilterController());
|
||||||
}
|
}
|
||||||
@@ -238,6 +243,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
Get.find<CacheExceptionThrower>()));
|
Get.find<CacheExceptionThrower>()));
|
||||||
Get.lazyPut(() => SearchDataSourceImpl(
|
Get.lazyPut(() => SearchDataSourceImpl(
|
||||||
Get.find<RecentSearchCacheManager>(),
|
Get.find<RecentSearchCacheManager>(),
|
||||||
|
Get.find<LocalSortOrderManager>(),
|
||||||
Get.find<CacheExceptionThrower>()));
|
Get.find<CacheExceptionThrower>()));
|
||||||
Get.lazyPut(() => ThreadDataSourceImpl(
|
Get.lazyPut(() => ThreadDataSourceImpl(
|
||||||
Get.find<ThreadAPI>(),
|
Get.find<ThreadAPI>(),
|
||||||
@@ -317,6 +323,8 @@ class MailboxDashBoardBindings extends BaseBindings {
|
|||||||
Get.lazyPut(() => DeleteEmailPermanentlyInteractor(Get.find<EmailRepository>()));
|
Get.lazyPut(() => DeleteEmailPermanentlyInteractor(Get.find<EmailRepository>()));
|
||||||
Get.lazyPut(() => SaveRecentSearchInteractor(Get.find<SearchRepository>()));
|
Get.lazyPut(() => SaveRecentSearchInteractor(Get.find<SearchRepository>()));
|
||||||
Get.lazyPut(() => GetAllRecentSearchLatestInteractor(Get.find<SearchRepository>()));
|
Get.lazyPut(() => GetAllRecentSearchLatestInteractor(Get.find<SearchRepository>()));
|
||||||
|
Get.lazyPut(() => StoreEmailSortOrderInteractor(Get.find<SearchRepository>()));
|
||||||
|
Get.lazyPut(() => GetStoredEmailSortOrderInteractor(Get.find<SearchRepository>()));
|
||||||
Get.lazyPut(() => SearchEmailInteractor(Get.find<ThreadRepository>()));
|
Get.lazyPut(() => SearchEmailInteractor(Get.find<ThreadRepository>()));
|
||||||
Get.lazyPut(() => SearchMoreEmailInteractor(Get.find<ThreadRepository>()));
|
Get.lazyPut(() => SearchMoreEmailInteractor(Get.find<ThreadRepository>()));
|
||||||
Get.lazyPut(() => RefreshChangesSearchEmailInteractor(Get.find<ThreadRepository>()));
|
Get.lazyPut(() => RefreshChangesSearchEmailInteractor(Get.find<ThreadRepository>()));
|
||||||
|
|||||||
+16
-7
@@ -35,7 +35,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
final hasAttachment = false.obs;
|
final hasAttachment = false.obs;
|
||||||
final startDate = Rxn<DateTime>();
|
final startDate = Rxn<DateTime>();
|
||||||
final endDate = Rxn<DateTime>();
|
final endDate = Rxn<DateTime>();
|
||||||
final sortOrderType = EmailSortOrderType.defaultSortOrder.obs;
|
final sortOrderType = SearchEmailFilter.defaultSortOrder.obs;
|
||||||
final selectedFolderName = Rxn<String>();
|
final selectedFolderName = Rxn<String>();
|
||||||
|
|
||||||
final GlobalKey<TagsEditorState> keyFromEmailTagEditor = GlobalKey<TagsEditorState>();
|
final GlobalKey<TagsEditorState> keyFromEmailTagEditor = GlobalKey<TagsEditorState>();
|
||||||
@@ -56,7 +56,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
final MailboxDashBoardController _mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
final MailboxDashBoardController _mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||||
|
|
||||||
final focusManager = InputFieldFocusManager.initial();
|
final focusManager = InputFieldFocusManager.initial();
|
||||||
SearchEmailFilter _memorySearchFilter = SearchEmailFilter.initial();
|
late SearchEmailFilter _memorySearchFilter;
|
||||||
|
|
||||||
PresentationMailbox? _destinationMailboxSelected;
|
PresentationMailbox? _destinationMailboxSelected;
|
||||||
|
|
||||||
@@ -74,11 +74,17 @@ class AdvancedFilterController extends BaseController {
|
|||||||
injectAutoCompleteBindings(
|
injectAutoCompleteBindings(
|
||||||
_mailboxDashBoardController.sessionCurrent,
|
_mailboxDashBoardController.sessionCurrent,
|
||||||
_mailboxDashBoardController.accountId.value);
|
_mailboxDashBoardController.accountId.value);
|
||||||
|
_setUpDefaultSortOrder(_mailboxDashBoardController.currentSortOrder);
|
||||||
super.onReady();
|
super.onReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _setUpDefaultSortOrder(EmailSortOrderType emailSortOrderType) {
|
||||||
|
sortOrderType.value = emailSortOrderType;
|
||||||
|
_memorySearchFilter = SearchEmailFilter.withSortOrder(emailSortOrderType);
|
||||||
|
}
|
||||||
|
|
||||||
void clearSearchFilter() {
|
void clearSearchFilter() {
|
||||||
_memorySearchFilter = SearchEmailFilter.initial();
|
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||||
_resetAllToOriginalValue();
|
_resetAllToOriginalValue();
|
||||||
_clearAllTextFieldInput();
|
_clearAllTextFieldInput();
|
||||||
_mailboxDashBoardController.handleClearAdvancedSearchFilterEmail();
|
_mailboxDashBoardController.handleClearAdvancedSearchFilterEmail();
|
||||||
@@ -460,6 +466,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
_dashboardActionWorker = ever(
|
_dashboardActionWorker = ever(
|
||||||
_mailboxDashBoardController.dashBoardAction,
|
_mailboxDashBoardController.dashBoardAction,
|
||||||
(action) {
|
(action) {
|
||||||
|
log('AdvancedFilterController::_registerWorkerListener(): ${action.runtimeType}');
|
||||||
if (action is ClearAllFieldOfAdvancedSearchAction) {
|
if (action is ClearAllFieldOfAdvancedSearchAction) {
|
||||||
_handleClearAllFieldOfAdvancedSearch();
|
_handleClearAllFieldOfAdvancedSearch();
|
||||||
} else if (action is SelectDateRangeToAdvancedSearch) {
|
} else if (action is SelectDateRangeToAdvancedSearch) {
|
||||||
@@ -478,6 +485,8 @@ class AdvancedFilterController extends BaseController {
|
|||||||
initSearchFilterField(currentContext);
|
initSearchFilterField(currentContext);
|
||||||
} else if (action is ClearSearchFilterAppliedAction) {
|
} else if (action is ClearSearchFilterAppliedAction) {
|
||||||
clearSearchFilter();
|
clearSearchFilter();
|
||||||
|
} else if (action is SynchronizeEmailSortOrderAction) {
|
||||||
|
_setUpDefaultSortOrder(action.emailSortOrderType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -500,7 +509,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
void _handleClearAllFieldOfAdvancedSearch() {
|
void _handleClearAllFieldOfAdvancedSearch() {
|
||||||
_resetAllToOriginalValue();
|
_resetAllToOriginalValue();
|
||||||
_clearAllTextFieldInput();
|
_clearAllTextFieldInput();
|
||||||
_memorySearchFilter = SearchEmailFilter.initial();
|
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onSearchAction() {
|
void onSearchAction() {
|
||||||
@@ -572,8 +581,8 @@ class AdvancedFilterController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _handleQuickSearchEmailByFromAction(EmailAddress emailAddress) {
|
void _handleQuickSearchEmailByFromAction(EmailAddress emailAddress) {
|
||||||
searchController.clearSearchFilter();
|
searchController.clearSearchFilter(sortOrderType: sortOrderType.value);
|
||||||
_memorySearchFilter = SearchEmailFilter.initial();
|
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||||
_resetAllToOriginalValue();
|
_resetAllToOriginalValue();
|
||||||
_clearAllTextFieldInput();
|
_clearAllTextFieldInput();
|
||||||
searchController.searchInputController.clear();
|
searchController.searchInputController.clear();
|
||||||
@@ -596,7 +605,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
fromEmailAddressController.dispose();
|
fromEmailAddressController.dispose();
|
||||||
_unregisterWorkerListener();
|
_unregisterWorkerListener();
|
||||||
_resetAllToOriginalValue();
|
_resetAllToOriginalValue();
|
||||||
_memorySearchFilter = SearchEmailFilter.initial();
|
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
@@ -98,11 +98,14 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_action
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/exceptions/spam_report_exception.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/exceptions/spam_report_exception.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_composer_cache_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_stored_email_sort_order_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
||||||
@@ -114,6 +117,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_create_new_rule_filter.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_create_new_rule_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_preferences_setting_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_preferences_setting_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_save_email_as_draft_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_save_email_as_draft_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_store_email_sort_order_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/initialize_app_language.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/initialize_app_language.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/notify_thread_detail_setting_updated.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/notify_thread_detail_setting_updated.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
|
||||||
@@ -239,6 +243,8 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
final RemoveAllComposerCacheOnWebInteractor _removeAllComposerCacheOnWebInteractor;
|
final RemoveAllComposerCacheOnWebInteractor _removeAllComposerCacheOnWebInteractor;
|
||||||
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
||||||
final ClearMailboxInteractor clearMailboxInteractor;
|
final ClearMailboxInteractor clearMailboxInteractor;
|
||||||
|
final StoreEmailSortOrderInteractor storeEmailSortOrderInteractor;
|
||||||
|
final GetStoredEmailSortOrderInteractor getStoredEmailSortOrderInteractor;
|
||||||
|
|
||||||
GetAllVacationInteractor? _getAllVacationInteractor;
|
GetAllVacationInteractor? _getAllVacationInteractor;
|
||||||
UpdateVacationInteractor? _updateVacationInteractor;
|
UpdateVacationInteractor? _updateVacationInteractor;
|
||||||
@@ -294,6 +300,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
DeepLinksManager? _deepLinksManager;
|
DeepLinksManager? _deepLinksManager;
|
||||||
StreamSubscription<DeepLinkData?>? _deepLinkDataStreamSubscription;
|
StreamSubscription<DeepLinkData?>? _deepLinkDataStreamSubscription;
|
||||||
int minInputLengthAutocomplete = AppConfig.defaultMinInputLengthAutocomplete;
|
int minInputLengthAutocomplete = AppConfig.defaultMinInputLengthAutocomplete;
|
||||||
|
EmailSortOrderType currentSortOrder = SearchEmailFilter.defaultSortOrder;
|
||||||
|
|
||||||
final StreamController<Either<Failure, Success>> _progressStateController =
|
final StreamController<Either<Failure, Success>> _progressStateController =
|
||||||
StreamController<Either<Failure, Success>>.broadcast();
|
StreamController<Either<Failure, Success>>.broadcast();
|
||||||
@@ -337,6 +344,8 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
this._removeComposerCacheByIdOnWebInteractor,
|
this._removeComposerCacheByIdOnWebInteractor,
|
||||||
this._getAllIdentitiesInteractor,
|
this._getAllIdentitiesInteractor,
|
||||||
this.clearMailboxInteractor,
|
this.clearMailboxInteractor,
|
||||||
|
this.storeEmailSortOrderInteractor,
|
||||||
|
this.getStoredEmailSortOrderInteractor,
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -364,6 +373,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
}
|
}
|
||||||
_handleArguments();
|
_handleArguments();
|
||||||
_loadAppGrid();
|
_loadAppGrid();
|
||||||
|
loadStoredEmailSortOrder();
|
||||||
super.onReady();
|
super.onReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,6 +495,8 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
tokenOIDC: success.tokenOIDC,
|
tokenOIDC: success.tokenOIDC,
|
||||||
oidcConfiguration: success.configuration,
|
oidcConfiguration: success.configuration,
|
||||||
);
|
);
|
||||||
|
} else if (success is GetStoredEmailSortOrderSuccess) {
|
||||||
|
setUpDefaultEmailSortOrder(success.emailSortOrderType);
|
||||||
} else {
|
} else {
|
||||||
super.handleSuccessViewState(success);
|
super.handleSuccessViewState(success);
|
||||||
}
|
}
|
||||||
@@ -915,6 +927,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
_unSelectedMailbox();
|
_unSelectedMailbox();
|
||||||
searchController.clearFilterSuggestion();
|
searchController.clearFilterSuggestion();
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
storeEmailSortOrder(searchController.searchEmailFilter.value.sortOrderType);
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2135,6 +2148,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
void selectSortOrderQuickSearchFilter(EmailSortOrderType sortOrder) {
|
void selectSortOrderQuickSearchFilter(EmailSortOrderType sortOrder) {
|
||||||
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
||||||
searchController.updateFilterEmail(sortOrderTypeOption: Some(sortOrder));
|
searchController.updateFilterEmail(sortOrderTypeOption: Some(sortOrder));
|
||||||
|
storeEmailSortOrder(sortOrder);
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,8 +68,10 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
isAdvancedSearchViewOpen.value = false;
|
isAdvancedSearchViewOpen.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clearSearchFilter() {
|
void clearSearchFilter({
|
||||||
searchEmailFilter.value = SearchEmailFilter.initial();
|
EmailSortOrderType sortOrderType = SearchEmailFilter.defaultSortOrder,
|
||||||
|
}) {
|
||||||
|
searchEmailFilter.value = SearchEmailFilter.withSortOrder(sortOrderType);
|
||||||
}
|
}
|
||||||
|
|
||||||
void synchronizeSearchFilter(SearchEmailFilter searchFilter) {
|
void synchronizeSearchFilter(SearchEmailFilter searchFilter) {
|
||||||
|
|||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||||
|
|
||||||
|
extension HandleStoreEmailSortOrderExtension on MailboxDashBoardController {
|
||||||
|
void storeEmailSortOrder(EmailSortOrderType emailSortOrder) {
|
||||||
|
setUpDefaultEmailSortOrder(emailSortOrder);
|
||||||
|
consumeState(storeEmailSortOrderInteractor.execute(emailSortOrder));
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadStoredEmailSortOrder() {
|
||||||
|
consumeState(getStoredEmailSortOrderInteractor.execute());
|
||||||
|
}
|
||||||
|
|
||||||
|
void setUpDefaultEmailSortOrder(EmailSortOrderType storedSortOrder) {
|
||||||
|
log('$runtimeType::setUpDefaultEmailSortOrder: $storedSortOrder');
|
||||||
|
currentSortOrder = storedSortOrder;
|
||||||
|
dispatchAction(SynchronizeEmailSortOrderAction(currentSortOrder));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,6 +37,9 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
|
|
||||||
factory SearchEmailFilter.initial() => SearchEmailFilter();
|
factory SearchEmailFilter.initial() => SearchEmailFilter();
|
||||||
|
|
||||||
|
factory SearchEmailFilter.withSortOrder(EmailSortOrderType sortOrder) =>
|
||||||
|
SearchEmailFilter(sortOrderType: sortOrder);
|
||||||
|
|
||||||
SearchEmailFilter({
|
SearchEmailFilter({
|
||||||
this.text,
|
this.text,
|
||||||
this.subject,
|
this.subject,
|
||||||
|
|||||||
@@ -169,7 +169,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (queryString.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
if (queryString.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
||||||
_searchController.clearSearchFilter();
|
_searchController.clearSearchFilter(
|
||||||
|
sortOrderType: _dashBoardController.currentSortOrder,
|
||||||
|
);
|
||||||
_searchController.applyFilterSuggestionToSearchFilter(
|
_searchController.applyFilterSuggestionToSearchFilter(
|
||||||
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
||||||
);
|
);
|
||||||
@@ -207,7 +209,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
_searchController.searchInputController.text = recent.value;
|
_searchController.searchInputController.text = recent.value;
|
||||||
_searchController.searchFocus.unfocus();
|
_searchController.searchFocus.unfocus();
|
||||||
_searchController.enableSearch();
|
_searchController.enableSearch();
|
||||||
_searchController.clearSearchFilter();
|
_searchController.clearSearchFilter(
|
||||||
|
sortOrderType: _dashBoardController.currentSortOrder,
|
||||||
|
);
|
||||||
_searchController.applyFilterSuggestionToSearchFilter(
|
_searchController.applyFilterSuggestionToSearchFilter(
|
||||||
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_store_email_sort_order_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_emails_with_new_mailbox_id_extension.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/update_emails_with_new_mailbox_id_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||||
@@ -162,6 +163,7 @@ class SearchEmailController extends BaseController
|
|||||||
textInputSearchFocus.requestFocus();
|
textInputSearchFocus.requestFocus();
|
||||||
searchMoreState = SearchMoreState.idle;
|
searchMoreState = SearchMoreState.idle;
|
||||||
canSearchMore = true;
|
canSearchMore = true;
|
||||||
|
_setUpDefaultSortOrder(mailboxDashBoardController.currentSortOrder);
|
||||||
super.onReady();
|
super.onReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -205,6 +207,11 @@ class SearchEmailController extends BaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _setUpDefaultSortOrder(EmailSortOrderType sortOrderType) {
|
||||||
|
emailSortOrderType.value = sortOrderType;
|
||||||
|
searchEmailFilter.value = SearchEmailFilter.withSortOrder(sortOrderType);
|
||||||
|
}
|
||||||
|
|
||||||
void _initializeDebounceTimeTextSearchChange() {
|
void _initializeDebounceTimeTextSearchChange() {
|
||||||
_deBouncerTime = Debouncer<String>(
|
_deBouncerTime = Debouncer<String>(
|
||||||
const Duration(milliseconds: 500),
|
const Duration(milliseconds: 500),
|
||||||
@@ -247,12 +254,16 @@ class SearchEmailController extends BaseController
|
|||||||
dashBoardActionWorker = ever(
|
dashBoardActionWorker = ever(
|
||||||
mailboxDashBoardController.dashBoardAction,
|
mailboxDashBoardController.dashBoardAction,
|
||||||
(action) {
|
(action) {
|
||||||
|
log('SearchEmailController::_initWorkerListener(): ${action.runtimeType}');
|
||||||
if (action is CloseSearchEmailViewAction) {
|
if (action is CloseSearchEmailViewAction) {
|
||||||
closeSearchView(context: currentContext);
|
closeSearchView(context: currentContext);
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
} else if (action is CancelSelectionSearchEmailAction) {
|
} else if (action is CancelSelectionSearchEmailAction) {
|
||||||
cancelSelectionMode();
|
cancelSelectionMode();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
|
} else if (action is SynchronizeEmailSortOrderAction) {
|
||||||
|
_setUpDefaultSortOrder(action.emailSortOrderType);
|
||||||
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -589,8 +600,10 @@ class SearchEmailController extends BaseController
|
|||||||
listSuggestionSearch.clear();
|
listSuggestionSearch.clear();
|
||||||
listResultSearch.clear();
|
listResultSearch.clear();
|
||||||
emailReceiveTimeType.value = EmailReceiveTimeType.allTime;
|
emailReceiveTimeType.value = EmailReceiveTimeType.allTime;
|
||||||
emailSortOrderType.value = SearchEmailFilter.defaultSortOrder;
|
emailSortOrderType.value = mailboxDashBoardController.currentSortOrder;
|
||||||
searchEmailFilter.value = SearchEmailFilter.initial();
|
searchEmailFilter.value = SearchEmailFilter.withSortOrder(
|
||||||
|
emailSortOrderType.value,
|
||||||
|
);
|
||||||
searchIsRunning.value = false;
|
searchIsRunning.value = false;
|
||||||
final isMailAddress = EmailUtils.isEmailAddressValid(queryString);
|
final isMailAddress = EmailUtils.isEmailAddressValid(queryString);
|
||||||
if (isMailAddress) {
|
if (isMailAddress) {
|
||||||
@@ -664,6 +677,7 @@ class SearchEmailController extends BaseController
|
|||||||
void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrderType) {
|
void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrderType) {
|
||||||
emailSortOrderType.value = sortOrderType;
|
emailSortOrderType.value = sortOrderType;
|
||||||
_updateSimpleSearchFilter(sortOrderTypeOption: Some(sortOrderType));
|
_updateSimpleSearchFilter(sortOrderTypeOption: Some(sortOrderType));
|
||||||
|
mailboxDashBoardController.storeEmailSortOrder(sortOrderType);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -813,7 +827,9 @@ class SearchEmailController extends BaseController
|
|||||||
listSuggestionSearch.clear();
|
listSuggestionSearch.clear();
|
||||||
listContactSuggestionSearch.clear();
|
listContactSuggestionSearch.clear();
|
||||||
listResultSearch.clear();
|
listResultSearch.clear();
|
||||||
searchEmailFilter.value = SearchEmailFilter.initial();
|
searchEmailFilter.value = SearchEmailFilter.withSortOrder(
|
||||||
|
mailboxDashBoardController.currentSortOrder,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeSearchView({BuildContext? context}) {
|
void closeSearchView({BuildContext? context}) {
|
||||||
@@ -1056,8 +1072,10 @@ class SearchEmailController extends BaseController
|
|||||||
canSearchMore = true;
|
canSearchMore = true;
|
||||||
searchMoreState = SearchMoreState.idle;
|
searchMoreState = SearchMoreState.idle;
|
||||||
emailReceiveTimeType.value = EmailReceiveTimeType.allTime;
|
emailReceiveTimeType.value = EmailReceiveTimeType.allTime;
|
||||||
emailSortOrderType.value = SearchEmailFilter.defaultSortOrder;
|
emailSortOrderType.value = mailboxDashBoardController.currentSortOrder;
|
||||||
searchEmailFilter.value = SearchEmailFilter.initial();
|
searchEmailFilter.value = SearchEmailFilter.withSortOrder(
|
||||||
|
emailSortOrderType.value,
|
||||||
|
);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import 'package:tmail_ui_user/features/login/data/local/oidc_configuration_cache
|
|||||||
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/local/mailbox_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/data/local/state_cache_manager.dart';
|
import 'package:tmail_ui_user/features/mailbox/data/local/state_cache_manager.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_sort_order_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_spam_report_manager.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/data/local/local_spam_report_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/local/local_setting_cache_manager.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/local/local_setting_cache_manager.dart';
|
||||||
@@ -94,6 +95,7 @@ class LocalBindings extends Bindings {
|
|||||||
Get.put(SessionHiveCacheClient());
|
Get.put(SessionHiveCacheClient());
|
||||||
Get.put(SessionCacheManager(Get.find<SessionHiveCacheClient>()));
|
Get.put(SessionCacheManager(Get.find<SessionHiveCacheClient>()));
|
||||||
Get.put(LocalSpamReportManager(Get.find<SharedPreferences>()));
|
Get.put(LocalSpamReportManager(Get.find<SharedPreferences>()));
|
||||||
|
Get.put(LocalSortOrderManager(Get.find<SharedPreferences>()));
|
||||||
Get.put(CachingManager(
|
Get.put(CachingManager(
|
||||||
Get.find<MailboxCacheManager>(),
|
Get.find<MailboxCacheManager>(),
|
||||||
Get.find<StateCacheManager>(),
|
Get.find<StateCacheManager>(),
|
||||||
|
|||||||
+6
@@ -20,6 +20,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_i
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||||
@@ -67,6 +68,7 @@ const fallbackGenerators = {
|
|||||||
MockSpec<QuickSearchEmailInteractor>(),
|
MockSpec<QuickSearchEmailInteractor>(),
|
||||||
MockSpec<SaveRecentSearchInteractor>(),
|
MockSpec<SaveRecentSearchInteractor>(),
|
||||||
MockSpec<GetAllRecentSearchLatestInteractor>(),
|
MockSpec<GetAllRecentSearchLatestInteractor>(),
|
||||||
|
MockSpec<StoreEmailSortOrderInteractor>(),
|
||||||
])
|
])
|
||||||
void main() {
|
void main() {
|
||||||
// Declaration advanced filter controller
|
// Declaration advanced filter controller
|
||||||
@@ -80,6 +82,7 @@ void main() {
|
|||||||
late MockQuickSearchEmailInteractor mockQuickSearchEmailInteractor;
|
late MockQuickSearchEmailInteractor mockQuickSearchEmailInteractor;
|
||||||
late MockSaveRecentSearchInteractor mockSaveRecentSearchInteractor;
|
late MockSaveRecentSearchInteractor mockSaveRecentSearchInteractor;
|
||||||
late MockGetAllRecentSearchLatestInteractor mockGetAllRecentSearchLatestInteractor;
|
late MockGetAllRecentSearchLatestInteractor mockGetAllRecentSearchLatestInteractor;
|
||||||
|
late MockStoreEmailSortOrderInteractor mockStoreEmailSortOrderInteractor;
|
||||||
|
|
||||||
// Declaration base controller
|
// Declaration base controller
|
||||||
late MockCachingManager mockCachingManager;
|
late MockCachingManager mockCachingManager;
|
||||||
@@ -138,6 +141,7 @@ void main() {
|
|||||||
mockQuickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
mockQuickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
||||||
mockSaveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
mockSaveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
||||||
mockGetAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
mockGetAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
||||||
|
mockStoreEmailSortOrderInteractor = MockStoreEmailSortOrderInteractor();
|
||||||
|
|
||||||
searchController = SearchController(
|
searchController = SearchController(
|
||||||
mockQuickSearchEmailInteractor,
|
mockQuickSearchEmailInteractor,
|
||||||
@@ -152,6 +156,7 @@ void main() {
|
|||||||
|
|
||||||
Get.put<MailboxDashBoardController>(mockMailboxDashBoardController);
|
Get.put<MailboxDashBoardController>(mockMailboxDashBoardController);
|
||||||
Get.put<GetAutoCompleteInteractor>(mockGetAutoCompleteInteractor);
|
Get.put<GetAutoCompleteInteractor>(mockGetAutoCompleteInteractor);
|
||||||
|
Get.put<StoreEmailSortOrderInteractor>(mockStoreEmailSortOrderInteractor);
|
||||||
|
|
||||||
advancedFilterController = AdvancedFilterController();
|
advancedFilterController = AdvancedFilterController();
|
||||||
});
|
});
|
||||||
@@ -160,6 +165,7 @@ void main() {
|
|||||||
group('applyAdvancedSearchFilter::test', () {
|
group('applyAdvancedSearchFilter::test', () {
|
||||||
test('SHOULD make sure memory search filter and search filter should be the same after applying', () async {
|
test('SHOULD make sure memory search filter and search filter should be the same after applying', () async {
|
||||||
// Arrange
|
// Arrange
|
||||||
|
advancedFilterController.setMemorySearchFilter(SearchEmailFilter.initial());
|
||||||
advancedFilterController.hasKeyWordFilterInputController.text = 'Hello';
|
advancedFilterController.hasKeyWordFilterInputController.text = 'Hello';
|
||||||
advancedFilterController.notKeyWordFilterInputController.text = 'dab';
|
advancedFilterController.notKeyWordFilterInputController.text = 'dab';
|
||||||
advancedFilterController.listFromEmailAddress = [EmailAddress(null, 'user1@example.com')];
|
advancedFilterController.listFromEmailAddress = [EmailAddress(null, 'user1@example.com')];
|
||||||
|
|||||||
+12
-2
@@ -60,11 +60,13 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_b
|
|||||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
||||||
@@ -149,6 +151,8 @@ const fallbackGenerators = {
|
|||||||
MockSpec<QuickSearchEmailInteractor>(),
|
MockSpec<QuickSearchEmailInteractor>(),
|
||||||
MockSpec<SaveRecentSearchInteractor>(),
|
MockSpec<SaveRecentSearchInteractor>(),
|
||||||
MockSpec<GetAllRecentSearchLatestInteractor>(),
|
MockSpec<GetAllRecentSearchLatestInteractor>(),
|
||||||
|
MockSpec<StoreEmailSortOrderInteractor>(),
|
||||||
|
MockSpec<GetStoredEmailSortOrderInteractor>(),
|
||||||
MockSpec<GetSessionInteractor>(),
|
MockSpec<GetSessionInteractor>(),
|
||||||
MockSpec<GetAuthenticatedAccountInteractor>(),
|
MockSpec<GetAuthenticatedAccountInteractor>(),
|
||||||
MockSpec<UpdateAccountCacheInteractor>(),
|
MockSpec<UpdateAccountCacheInteractor>(),
|
||||||
@@ -241,6 +245,8 @@ void main() {
|
|||||||
final quickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
final quickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
||||||
final saveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
final saveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
||||||
final getAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
final getAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
||||||
|
final storeEmailSortOrderInteractor = MockStoreEmailSortOrderInteractor();
|
||||||
|
final getStoredEmailSortOrderInteractor = MockGetStoredEmailSortOrderInteractor();
|
||||||
late SearchController searchController;
|
late SearchController searchController;
|
||||||
|
|
||||||
// mock base controller Get dependencies
|
// mock base controller Get dependencies
|
||||||
@@ -380,6 +386,8 @@ void main() {
|
|||||||
removeComposerCacheByIdOnWebInteractor,
|
removeComposerCacheByIdOnWebInteractor,
|
||||||
getAllIdentitiesInteractor,
|
getAllIdentitiesInteractor,
|
||||||
clearMailboxInteractor,
|
clearMailboxInteractor,
|
||||||
|
storeEmailSortOrderInteractor,
|
||||||
|
getStoredEmailSortOrderInteractor,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -460,7 +468,7 @@ void main() {
|
|||||||
getLatestChanges: anyNamed('getLatestChanges'),
|
getLatestChanges: anyNamed('getLatestChanges'),
|
||||||
propertiesCreated: anyNamed('propertiesCreated'),
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
propertiesUpdated: anyNamed('propertiesUpdated')));
|
propertiesUpdated: anyNamed('propertiesUpdated')));
|
||||||
expect(searchController.sortOrderFiltered, EmailSortOrderType.mostRecent);
|
expect(searchController.sortOrderFiltered, SearchEmailFilter.defaultSortOrder);
|
||||||
expect(searchController.searchEmailFilter.value, SearchEmailFilter.initial());
|
expect(searchController.searchEmailFilter.value, SearchEmailFilter.initial());
|
||||||
verify(getEmailsInMailboxInteractor.execute(
|
verify(getEmailsInMailboxInteractor.execute(
|
||||||
testSession, testAccountId,
|
testSession, testAccountId,
|
||||||
@@ -490,6 +498,7 @@ void main() {
|
|||||||
when(context.mounted).thenReturn(true);
|
when(context.mounted).thenReturn(true);
|
||||||
|
|
||||||
// expect query in advanced filter controller update as expected
|
// expect query in advanced filter controller update as expected
|
||||||
|
advancedFilterController.setMemorySearchFilter(SearchEmailFilter.initial());
|
||||||
advancedFilterController.updateListEmailAddress(FilterField.from, [fromEmailAddress]);
|
advancedFilterController.updateListEmailAddress(FilterField.from, [fromEmailAddress]);
|
||||||
advancedFilterController.updateListEmailAddress(FilterField.to, [toEmailAddress]);
|
advancedFilterController.updateListEmailAddress(FilterField.to, [toEmailAddress]);
|
||||||
advancedFilterController.subjectFilterInputController.text = emailSubject;
|
advancedFilterController.subjectFilterInputController.text = emailSubject;
|
||||||
@@ -520,7 +529,7 @@ void main() {
|
|||||||
getLatestChanges: anyNamed('getLatestChanges'),
|
getLatestChanges: anyNamed('getLatestChanges'),
|
||||||
propertiesCreated: anyNamed('propertiesCreated'),
|
propertiesCreated: anyNamed('propertiesCreated'),
|
||||||
propertiesUpdated: anyNamed('propertiesUpdated')));
|
propertiesUpdated: anyNamed('propertiesUpdated')));
|
||||||
expect(searchController.sortOrderFiltered, EmailSortOrderType.mostRecent);
|
expect(searchController.sortOrderFiltered, SearchEmailFilter.defaultSortOrder);
|
||||||
expect(searchController.searchEmailFilter.value, SearchEmailFilter.initial());
|
expect(searchController.searchEmailFilter.value, SearchEmailFilter.initial());
|
||||||
verify(getEmailsInMailboxInteractor.execute(
|
verify(getEmailsInMailboxInteractor.execute(
|
||||||
testSession, testAccountId,
|
testSession, testAccountId,
|
||||||
@@ -565,6 +574,7 @@ void main() {
|
|||||||
text: SearchQuery(queryString),
|
text: SearchQuery(queryString),
|
||||||
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
|
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
|
||||||
hasAttachment: true,
|
hasAttachment: true,
|
||||||
|
position: 0,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
+8
@@ -58,11 +58,13 @@ import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_na
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/spam_report_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
@@ -150,6 +152,8 @@ const fallbackGenerators = {
|
|||||||
MockSpec<QuickSearchEmailInteractor>(),
|
MockSpec<QuickSearchEmailInteractor>(),
|
||||||
MockSpec<SaveRecentSearchInteractor>(),
|
MockSpec<SaveRecentSearchInteractor>(),
|
||||||
MockSpec<GetAllRecentSearchLatestInteractor>(),
|
MockSpec<GetAllRecentSearchLatestInteractor>(),
|
||||||
|
MockSpec<StoreEmailSortOrderInteractor>(),
|
||||||
|
MockSpec<GetStoredEmailSortOrderInteractor>(),
|
||||||
MockSpec<GetSessionInteractor>(),
|
MockSpec<GetSessionInteractor>(),
|
||||||
MockSpec<GetAuthenticatedAccountInteractor>(),
|
MockSpec<GetAuthenticatedAccountInteractor>(),
|
||||||
MockSpec<UpdateAccountCacheInteractor>(),
|
MockSpec<UpdateAccountCacheInteractor>(),
|
||||||
@@ -231,6 +235,8 @@ void main() {
|
|||||||
final quickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
final quickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
||||||
final saveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
final saveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
||||||
final getAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
final getAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
||||||
|
final storeEmailSortOrderInteractor = MockStoreEmailSortOrderInteractor();
|
||||||
|
final getStoredEmailSortOrderInteractor = MockGetStoredEmailSortOrderInteractor();
|
||||||
|
|
||||||
final cachingManager = MockCachingManager();
|
final cachingManager = MockCachingManager();
|
||||||
final languageCacheManager = MockLanguageCacheManager();
|
final languageCacheManager = MockLanguageCacheManager();
|
||||||
@@ -377,6 +383,8 @@ void main() {
|
|||||||
removeComposerCacheByIdOnWebInteractor,
|
removeComposerCacheByIdOnWebInteractor,
|
||||||
getAllIdentitiesInteractor,
|
getAllIdentitiesInteractor,
|
||||||
clearMailboxInteractor,
|
clearMailboxInteractor,
|
||||||
|
storeEmailSortOrderInteractor,
|
||||||
|
getStoredEmailSortOrderInteractor,
|
||||||
);
|
);
|
||||||
Get.put(mailboxDashboardController);
|
Get.put(mailboxDashboardController);
|
||||||
mailboxDashboardController.onReady();
|
mailboxDashboardController.onReady();
|
||||||
|
|||||||
@@ -45,11 +45,13 @@ import 'package:tmail_ui_user/features/mailbox/domain/usecases/clear_mailbox_int
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/usecases/mark_as_mailbox_read_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all_recent_search_latest_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_composer_cache_on_web_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_stored_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_all_composer_cache_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_by_id_on_web_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_email_drafts_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/store_email_sort_order_interactor.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/app_grid_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/download/download_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
@@ -167,6 +169,8 @@ const fallbackGenerators = {
|
|||||||
MockSpec<GetAuthenticationInfoInteractor>(),
|
MockSpec<GetAuthenticationInfoInteractor>(),
|
||||||
MockSpec<GetStoredOidcConfigurationInteractor>(),
|
MockSpec<GetStoredOidcConfigurationInteractor>(),
|
||||||
MockSpec<GetTokenOIDCInteractor>(),
|
MockSpec<GetTokenOIDCInteractor>(),
|
||||||
|
MockSpec<StoreEmailSortOrderInteractor>(),
|
||||||
|
MockSpec<GetStoredEmailSortOrderInteractor>(),
|
||||||
])
|
])
|
||||||
void main() {
|
void main() {
|
||||||
TestWidgetsFlutterBinding.ensureInitialized();
|
TestWidgetsFlutterBinding.ensureInitialized();
|
||||||
@@ -186,6 +190,8 @@ void main() {
|
|||||||
late MockQuickSearchEmailInteractor mockQuickSearchEmailInteractor;
|
late MockQuickSearchEmailInteractor mockQuickSearchEmailInteractor;
|
||||||
late MockSaveRecentSearchInteractor mockSaveRecentSearchInteractor;
|
late MockSaveRecentSearchInteractor mockSaveRecentSearchInteractor;
|
||||||
late MockGetAllRecentSearchLatestInteractor mockGetAllRecentSearchLatestInteractor;
|
late MockGetAllRecentSearchLatestInteractor mockGetAllRecentSearchLatestInteractor;
|
||||||
|
late MockStoreEmailSortOrderInteractor mockStoreEmailSortOrderInteractor;
|
||||||
|
late MockGetStoredEmailSortOrderInteractor mockGetStoredEmailSortOrderInteractor;
|
||||||
|
|
||||||
// Declaration mailbox dashboard controller
|
// Declaration mailbox dashboard controller
|
||||||
final MockGetSessionInteractor getSessionInteractor = MockGetSessionInteractor();
|
final MockGetSessionInteractor getSessionInteractor = MockGetSessionInteractor();
|
||||||
@@ -296,6 +302,8 @@ void main() {
|
|||||||
mockQuickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
mockQuickSearchEmailInteractor = MockQuickSearchEmailInteractor();
|
||||||
mockSaveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
mockSaveRecentSearchInteractor = MockSaveRecentSearchInteractor();
|
||||||
mockGetAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
mockGetAllRecentSearchLatestInteractor = MockGetAllRecentSearchLatestInteractor();
|
||||||
|
mockStoreEmailSortOrderInteractor = MockStoreEmailSortOrderInteractor();
|
||||||
|
mockGetStoredEmailSortOrderInteractor = MockGetStoredEmailSortOrderInteractor();
|
||||||
|
|
||||||
// Mock dashboard controller
|
// Mock dashboard controller
|
||||||
moveToMailboxInteractor = MockMoveToMailboxInteractor();
|
moveToMailboxInteractor = MockMoveToMailboxInteractor();
|
||||||
@@ -377,6 +385,8 @@ void main() {
|
|||||||
removeComposerCacheByIdOnWebInteractor,
|
removeComposerCacheByIdOnWebInteractor,
|
||||||
getAllIdentitiesInteractor,
|
getAllIdentitiesInteractor,
|
||||||
clearMailboxInteractor,
|
clearMailboxInteractor,
|
||||||
|
mockStoreEmailSortOrderInteractor,
|
||||||
|
mockGetStoredEmailSortOrderInteractor,
|
||||||
);
|
);
|
||||||
|
|
||||||
when(emailReceiveManager.pendingSharedFileInfo).thenAnswer((_) => BehaviorSubject.seeded([]));
|
when(emailReceiveManager.pendingSharedFileInfo).thenAnswer((_) => BehaviorSubject.seeded([]));
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_i
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
import 'package:tmail_ui_user/features/manage_account/data/local/language_cache_manager.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart';
|
||||||
@@ -351,7 +350,7 @@ void main() {
|
|||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
limit: UnsignedInt(emailList.length),
|
limit: UnsignedInt(emailList.length),
|
||||||
position: null,
|
position: null,
|
||||||
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
sort: SearchEmailFilter.defaultSortOrder.getSortOrder().toNullable(),
|
||||||
filter: SearchEmailFilter.initial().mappingToEmailFilterCondition(),
|
filter: SearchEmailFilter.initial().mappingToEmailFilterCondition(),
|
||||||
properties: EmailUtils.getPropertiesForEmailGetMethod(
|
properties: EmailUtils.getPropertiesForEmailGetMethod(
|
||||||
SessionFixtures.aliceSession,
|
SessionFixtures.aliceSession,
|
||||||
@@ -428,7 +427,7 @@ void main() {
|
|||||||
AccountFixtures.aliceAccountId,
|
AccountFixtures.aliceAccountId,
|
||||||
limit: ThreadConstants.defaultLimit,
|
limit: ThreadConstants.defaultLimit,
|
||||||
position: null,
|
position: null,
|
||||||
sort: EmailSortOrderType.mostRecent.getSortOrder().toNullable(),
|
sort: SearchEmailFilter.defaultSortOrder.getSortOrder().toNullable(),
|
||||||
filter: SearchEmailFilter.initial().mappingToEmailFilterCondition(),
|
filter: SearchEmailFilter.initial().mappingToEmailFilterCondition(),
|
||||||
properties: EmailUtils.getPropertiesForEmailGetMethod(
|
properties: EmailUtils.getPropertiesForEmailGetMethod(
|
||||||
SessionFixtures.aliceSession,
|
SessionFixtures.aliceSession,
|
||||||
|
|||||||
Reference in New Issue
Block a user