TF-1063 Disable search email when open mailbox

This commit is contained in:
dab246
2022-11-03 01:24:27 +07:00
committed by Dat H. Pham
parent 95721008c1
commit 46fa9b3006
14 changed files with 275 additions and 196 deletions
@@ -15,6 +15,7 @@ import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_with_device_contact_interactor.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/input_field_focus_manager.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';
@@ -62,6 +63,14 @@ class AdvancedFilterController extends BaseController {
DateTime? get endDate => _endDate;
late Worker _dashboardActionWorker;
@override
void onInit() {
_registerWorkerListener();
super.onInit();
}
@override
void onReady() {
if (!BuildUtils.isWeb) {
@@ -80,7 +89,7 @@ class AdvancedFilterController extends BaseController {
}
void cleanSearchFilter(BuildContext context) {
searchController.cleanSearchFilter();
searchController.clearSearchFilter();
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime;
clearDateRangeOfFilter();
subjectFilterInputController.text = '';
@@ -88,7 +97,7 @@ class AdvancedFilterController extends BaseController {
notKeyWordFilterInputController.text = '';
dateFilterInputController.text = '';
hasAttachment.value = false;
searchController.isAdvancedSearchHasApply.value = false;
searchController.deactivateAdvancedSearch();
searchController.isAdvancedSearchViewOpen.toggle();
_mailboxDashBoardController.searchEmail(
context, StringConvert.writeNullToEmpty(searchEmailFilter.text?.value));
@@ -167,7 +176,11 @@ class AdvancedFilterController extends BaseController {
void applyAdvancedSearchFilter(BuildContext context) {
_updateFilterEmailFromAdvancedSearchView();
searchController.isAdvancedSearchHasApply.value = isAdvancedSearchHasApplied;
if (isAdvancedSearchHasApplied) {
searchController.activateAdvancedSearch();
} else {
searchController.deactivateAdvancedSearch();
}
if (!isAdvancedSearchHasApplied) {
final newSearchEmailFilter = searchController.searchEmailFilter.value.clearBeforeDate();
searchController.searchEmailFilter.value = newSearchEmailFilter;
@@ -357,6 +370,43 @@ class AdvancedFilterController extends BaseController {
endDate: _endDate.toUTCDate());
}
void _resetAllToOriginalValue() {
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime;
hasAttachment.value = false;
lastTextForm.value = '';
lastTextTo.value = '';
_startDate = null;
_endDate = null;
}
void _clearAllTextFieldInput() {
subjectFilterInputController.clear();
hasKeyWordFilterInputController.clear();
notKeyWordFilterInputController.clear();
dateFilterInputController.clear();
mailBoxFilterInputController.clear();
}
void _registerWorkerListener() {
_dashboardActionWorker = ever(
_mailboxDashBoardController.dashBoardAction,
(action) {
if (action is ClearAllFieldOfAdvancedSearchAction) {
_handleClearAllFieldOfAdvancedSearch();
}
}
);
}
void _unregisterWorkerListener() {
_dashboardActionWorker.dispose();
}
void _handleClearAllFieldOfAdvancedSearch() {
_resetAllToOriginalValue();
_clearAllTextFieldInput();
}
@override
void onClose() {
focusManager.dispose();
@@ -365,6 +415,7 @@ class AdvancedFilterController extends BaseController {
notKeyWordFilterInputController.dispose();
mailBoxFilterInputController.dispose();
dateFilterInputController.dispose();
_unregisterWorkerListener();
super.onClose();
}
@@ -426,7 +426,7 @@ class MailboxDashBoardController extends ReloadableController {
void clearSearchEmail() {
dispatchAction(ClearSearchEmailAction());
searchController.disableSearch();
searchController.disableSimpleSearch();
}
void _unSelectedMailbox() {
@@ -1009,7 +1009,7 @@ class MailboxDashBoardController extends ReloadableController {
dashboardRoute.value = route;
if (dashboardRoute.value == DashboardRoutes.searchEmail) {
searchController.enableSearch();
searchController.activateSimpleSearch();
}
}
@@ -1200,6 +1200,7 @@ class MailboxDashBoardController extends ReloadableController {
}
void selectQuickSearchFilterAction(QuickSearchFilter filter) {
log('MailboxDashBoardController::selectQuickSearchFilterAction(): filter: $filter');
selectQuickSearchFilter(quickSearchFilter: filter);
dispatchAction(StartSearchEmailAction());
}
@@ -34,17 +34,12 @@ class SearchController extends BaseController {
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
final searchInputController = TextEditingController();
final searchEmailFilter = SearchEmailFilter().obs;
final searchEmailFilter = SearchEmailFilter.initial().obs;
final searchState = SearchState.initial().obs;
final isAdvancedSearchViewOpen = false.obs;
final isAdvancedSearchHasApply = false.obs;
final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs;
final mailboxFilterSelectedFormAdvancedSearch = Rxn<PresentationMailbox>();
final hasAttachment = false.obs;
final emailReceiveTimeType = Rxn<EmailReceiveTimeType>();
final searchIsActive = RxBool(false);
SearchEmailFilter get searchEmailFilterValue => searchEmailFilter.value;
final simpleSearchIsActivated = RxBool(false);
final advancedSearchIsActivated = RxBool(false);
SearchQuery? get searchQuery => searchEmailFilter.value.text;
@@ -66,8 +61,8 @@ class SearchController extends BaseController {
isAdvancedSearchViewOpen.toggle();
}
cleanSearchFilter() {
searchEmailFilter.value = SearchEmailFilter();
void clearSearchFilter() {
searchEmailFilter.value = SearchEmailFilter.initial();
}
void selectQuickSearchFilter({
@@ -145,6 +140,7 @@ class SearchController extends BaseController {
startDate: startDate,
endDate: endDate,
);
searchEmailFilter.refresh();
}
void _registerSearchFocusListener() {
@@ -152,10 +148,10 @@ class SearchController extends BaseController {
final hasFocus = searchFocus.hasFocus;
final query = searchEmailFilter.value.text?.value;
log('SearchController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
if (!hasFocus && (query == null || query.isEmpty) && isAdvancedSearchHasApply.isFalse) {
if (!hasFocus && (query == null || query.isEmpty) && advancedSearchIsActivated.isFalse) {
updateFilterEmail(text: SearchQuery.initial());
searchInputController.clear();
cleanSearchFilter();
clearSearchFilter();
searchFocus.unfocus();
}
});
@@ -164,19 +160,16 @@ class SearchController extends BaseController {
bool isSearchActive() =>
searchState.value.searchStatus == SearchStatus.ACTIVE;
bool isAdvanceSearchActive() => isAdvancedSearchHasApply.isTrue;
bool get isSearchEmailRunning => isSearchActive() || isAdvanceSearchActive();
bool get isSearchEmailRunning => simpleSearchIsActivated.isTrue || advancedSearchIsActivated.isTrue;
void enableSearch() {
searchState.value = searchState.value.enableSearchState();
}
void disableSearch() {
searchState.value = searchState.value.disableSearchState();
void disableSimpleSearch() {
updateFilterEmail(text: SearchQuery.initial());
searchInputController.clear();
searchFocus.unfocus();
_clearAllTextInputSimpleSearch();
hideSimpleSearchFormView();
}
void clearTextSearch() {
@@ -237,6 +230,46 @@ class SearchController extends BaseController {
}
}
void activateSimpleSearch() {
simpleSearchIsActivated.value = true;
}
void deactivateSimpleSearch() {
simpleSearchIsActivated.value = false;
}
void activateAdvancedSearch() {
advancedSearchIsActivated.value = true;
}
void deactivateAdvancedSearch() {
advancedSearchIsActivated.value = false;
}
void hideAdvancedSearchFormView() {
isAdvancedSearchViewOpen.value = false;
}
void hideSimpleSearchFormView() {
searchState.value = searchState.value.disableSearchState();
}
void _clearAllTextInputSimpleSearch() {
searchInputController.clear();
searchFocus.unfocus();
emailReceiveTimeType.value = null;
}
void disableAllSearchEmail() {
_clearAllTextInputSimpleSearch();
deactivateSimpleSearch();
hideSimpleSearchFormView();
clearSearchFilter();
deactivateAdvancedSearch();
hideAdvancedSearchFormView();
}
@override
void onDone() {}