TF-3834 Implement remember user sort order after search
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -6,6 +6,7 @@ import 'package:model/email/presentation_email.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/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/search_query.dart';
|
||||
|
||||
@@ -147,4 +148,13 @@ class OpenAdvancedSearchViewAction 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/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/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/network/linagora_ecosystem_api.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_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_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/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_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/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_spam_report_state_interactor.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<GetAllIdentitiesInteractor>(),
|
||||
Get.find<ClearMailboxInteractor>(),
|
||||
Get.find<StoreEmailSortOrderInteractor>(),
|
||||
Get.find<GetStoredEmailSortOrderInteractor>(),
|
||||
));
|
||||
Get.put(AdvancedFilterController());
|
||||
}
|
||||
@@ -238,6 +243,7 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => SearchDataSourceImpl(
|
||||
Get.find<RecentSearchCacheManager>(),
|
||||
Get.find<LocalSortOrderManager>(),
|
||||
Get.find<CacheExceptionThrower>()));
|
||||
Get.lazyPut(() => ThreadDataSourceImpl(
|
||||
Get.find<ThreadAPI>(),
|
||||
@@ -317,6 +323,8 @@ class MailboxDashBoardBindings extends BaseBindings {
|
||||
Get.lazyPut(() => DeleteEmailPermanentlyInteractor(Get.find<EmailRepository>()));
|
||||
Get.lazyPut(() => SaveRecentSearchInteractor(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(() => SearchMoreEmailInteractor(Get.find<ThreadRepository>()));
|
||||
Get.lazyPut(() => RefreshChangesSearchEmailInteractor(Get.find<ThreadRepository>()));
|
||||
|
||||
+16
-7
@@ -35,7 +35,7 @@ class AdvancedFilterController extends BaseController {
|
||||
final hasAttachment = false.obs;
|
||||
final startDate = Rxn<DateTime>();
|
||||
final endDate = Rxn<DateTime>();
|
||||
final sortOrderType = EmailSortOrderType.defaultSortOrder.obs;
|
||||
final sortOrderType = SearchEmailFilter.defaultSortOrder.obs;
|
||||
final selectedFolderName = Rxn<String>();
|
||||
|
||||
final GlobalKey<TagsEditorState> keyFromEmailTagEditor = GlobalKey<TagsEditorState>();
|
||||
@@ -56,7 +56,7 @@ class AdvancedFilterController extends BaseController {
|
||||
final MailboxDashBoardController _mailboxDashBoardController = Get.find<MailboxDashBoardController>();
|
||||
|
||||
final focusManager = InputFieldFocusManager.initial();
|
||||
SearchEmailFilter _memorySearchFilter = SearchEmailFilter.initial();
|
||||
late SearchEmailFilter _memorySearchFilter;
|
||||
|
||||
PresentationMailbox? _destinationMailboxSelected;
|
||||
|
||||
@@ -74,11 +74,17 @@ class AdvancedFilterController extends BaseController {
|
||||
injectAutoCompleteBindings(
|
||||
_mailboxDashBoardController.sessionCurrent,
|
||||
_mailboxDashBoardController.accountId.value);
|
||||
_setUpDefaultSortOrder(_mailboxDashBoardController.currentSortOrder);
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void _setUpDefaultSortOrder(EmailSortOrderType emailSortOrderType) {
|
||||
sortOrderType.value = emailSortOrderType;
|
||||
_memorySearchFilter = SearchEmailFilter.withSortOrder(emailSortOrderType);
|
||||
}
|
||||
|
||||
void clearSearchFilter() {
|
||||
_memorySearchFilter = SearchEmailFilter.initial();
|
||||
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||
_resetAllToOriginalValue();
|
||||
_clearAllTextFieldInput();
|
||||
_mailboxDashBoardController.handleClearAdvancedSearchFilterEmail();
|
||||
@@ -460,6 +466,7 @@ class AdvancedFilterController extends BaseController {
|
||||
_dashboardActionWorker = ever(
|
||||
_mailboxDashBoardController.dashBoardAction,
|
||||
(action) {
|
||||
log('AdvancedFilterController::_registerWorkerListener(): ${action.runtimeType}');
|
||||
if (action is ClearAllFieldOfAdvancedSearchAction) {
|
||||
_handleClearAllFieldOfAdvancedSearch();
|
||||
} else if (action is SelectDateRangeToAdvancedSearch) {
|
||||
@@ -478,6 +485,8 @@ class AdvancedFilterController extends BaseController {
|
||||
initSearchFilterField(currentContext);
|
||||
} else if (action is ClearSearchFilterAppliedAction) {
|
||||
clearSearchFilter();
|
||||
} else if (action is SynchronizeEmailSortOrderAction) {
|
||||
_setUpDefaultSortOrder(action.emailSortOrderType);
|
||||
}
|
||||
}
|
||||
);
|
||||
@@ -500,7 +509,7 @@ class AdvancedFilterController extends BaseController {
|
||||
void _handleClearAllFieldOfAdvancedSearch() {
|
||||
_resetAllToOriginalValue();
|
||||
_clearAllTextFieldInput();
|
||||
_memorySearchFilter = SearchEmailFilter.initial();
|
||||
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||
}
|
||||
|
||||
void onSearchAction() {
|
||||
@@ -572,8 +581,8 @@ class AdvancedFilterController extends BaseController {
|
||||
}
|
||||
|
||||
void _handleQuickSearchEmailByFromAction(EmailAddress emailAddress) {
|
||||
searchController.clearSearchFilter();
|
||||
_memorySearchFilter = SearchEmailFilter.initial();
|
||||
searchController.clearSearchFilter(sortOrderType: sortOrderType.value);
|
||||
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||
_resetAllToOriginalValue();
|
||||
_clearAllTextFieldInput();
|
||||
searchController.searchInputController.clear();
|
||||
@@ -596,7 +605,7 @@ class AdvancedFilterController extends BaseController {
|
||||
fromEmailAddressController.dispose();
|
||||
_unregisterWorkerListener();
|
||||
_resetAllToOriginalValue();
|
||||
_memorySearchFilter = SearchEmailFilter.initial();
|
||||
_memorySearchFilter = SearchEmailFilter.withSortOrder(sortOrderType.value);
|
||||
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/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_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/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_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/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/controller/app_grid_dashboard_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_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_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/notify_thread_detail_setting_updated.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 GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
||||
final ClearMailboxInteractor clearMailboxInteractor;
|
||||
final StoreEmailSortOrderInteractor storeEmailSortOrderInteractor;
|
||||
final GetStoredEmailSortOrderInteractor getStoredEmailSortOrderInteractor;
|
||||
|
||||
GetAllVacationInteractor? _getAllVacationInteractor;
|
||||
UpdateVacationInteractor? _updateVacationInteractor;
|
||||
@@ -294,6 +300,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
DeepLinksManager? _deepLinksManager;
|
||||
StreamSubscription<DeepLinkData?>? _deepLinkDataStreamSubscription;
|
||||
int minInputLengthAutocomplete = AppConfig.defaultMinInputLengthAutocomplete;
|
||||
EmailSortOrderType currentSortOrder = SearchEmailFilter.defaultSortOrder;
|
||||
|
||||
final StreamController<Either<Failure, Success>> _progressStateController =
|
||||
StreamController<Either<Failure, Success>>.broadcast();
|
||||
@@ -337,6 +344,8 @@ class MailboxDashBoardController extends ReloadableController
|
||||
this._removeComposerCacheByIdOnWebInteractor,
|
||||
this._getAllIdentitiesInteractor,
|
||||
this.clearMailboxInteractor,
|
||||
this.storeEmailSortOrderInteractor,
|
||||
this.getStoredEmailSortOrderInteractor,
|
||||
);
|
||||
|
||||
@override
|
||||
@@ -364,6 +373,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
}
|
||||
_handleArguments();
|
||||
_loadAppGrid();
|
||||
loadStoredEmailSortOrder();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
@@ -485,6 +495,8 @@ class MailboxDashBoardController extends ReloadableController
|
||||
tokenOIDC: success.tokenOIDC,
|
||||
oidcConfiguration: success.configuration,
|
||||
);
|
||||
} else if (success is GetStoredEmailSortOrderSuccess) {
|
||||
setUpDefaultEmailSortOrder(success.emailSortOrderType);
|
||||
} else {
|
||||
super.handleSuccessViewState(success);
|
||||
}
|
||||
@@ -915,6 +927,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
_unSelectedMailbox();
|
||||
searchController.clearFilterSuggestion();
|
||||
FocusManager.instance.primaryFocus?.unfocus();
|
||||
storeEmailSortOrder(searchController.searchEmailFilter.value.sortOrderType);
|
||||
dispatchAction(StartSearchEmailAction());
|
||||
}
|
||||
|
||||
@@ -2135,6 +2148,7 @@ class MailboxDashBoardController extends ReloadableController
|
||||
void selectSortOrderQuickSearchFilter(EmailSortOrderType sortOrder) {
|
||||
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
||||
searchController.updateFilterEmail(sortOrderTypeOption: Some(sortOrder));
|
||||
storeEmailSortOrder(sortOrder);
|
||||
dispatchAction(StartSearchEmailAction());
|
||||
}
|
||||
|
||||
|
||||
@@ -68,8 +68,10 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
isAdvancedSearchViewOpen.value = false;
|
||||
}
|
||||
|
||||
void clearSearchFilter() {
|
||||
searchEmailFilter.value = SearchEmailFilter.initial();
|
||||
void clearSearchFilter({
|
||||
EmailSortOrderType sortOrderType = SearchEmailFilter.defaultSortOrder,
|
||||
}) {
|
||||
searchEmailFilter.value = SearchEmailFilter.withSortOrder(sortOrderType);
|
||||
}
|
||||
|
||||
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.withSortOrder(EmailSortOrderType sortOrder) =>
|
||||
SearchEmailFilter(sortOrderType: sortOrder);
|
||||
|
||||
SearchEmailFilter({
|
||||
this.text,
|
||||
this.subject,
|
||||
|
||||
@@ -169,7 +169,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
}
|
||||
|
||||
if (queryString.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
||||
_searchController.clearSearchFilter();
|
||||
_searchController.clearSearchFilter(
|
||||
sortOrderType: _dashBoardController.currentSortOrder,
|
||||
);
|
||||
_searchController.applyFilterSuggestionToSearchFilter(
|
||||
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
||||
);
|
||||
@@ -207,7 +209,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
_searchController.searchInputController.text = recent.value;
|
||||
_searchController.searchFocus.unfocus();
|
||||
_searchController.enableSearch();
|
||||
_searchController.clearSearchFilter();
|
||||
_searchController.clearSearchFilter(
|
||||
sortOrderType: _dashBoardController.currentSortOrder,
|
||||
);
|
||||
_searchController.applyFilterSuggestionToSearchFilter(
|
||||
_dashBoardController.sessionCurrent?.getOwnEmailAddressOrEmpty(),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user