diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart index 3544df930..f3369784e 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -35,7 +35,7 @@ class AdvancedFilterController extends BaseController { _searchController.isAdvancedSearchViewOpen.toggle(); } - cleanSearchFilter() { + cleanSearchFilter(BuildContext context) { _searchController.cleanSearchFilter(); dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime; fromFilterInputController.text = ''; @@ -45,22 +45,31 @@ class AdvancedFilterController extends BaseController { notKeyWordFilterInputController.text = ''; dateFilterInputController.text = ''; hasAttachment.value = false; - _searchController.isAdvancedSearchHasApply.isFalse; + _searchController.isAdvancedSearchHasApply.value = false; _searchController.isAdvancedSearchViewOpen.toggle(); + _mailboxDashBoardController.searchEmail(context, StringConvert.writeNullToEmpty(_searchEmailFilter.text?.value)); } void _updateFilterEmailFromAdvancedSearchView() { if (fromFilterInputController.text.isNotEmpty) { _searchController.updateFilterEmail(from: fromFilterInputController.text.split(',').toSet()); + } else { + _searchController.updateFilterEmail(from: {}); } if (toFilterInputController.text.isNotEmpty) { _searchController.updateFilterEmail(to: toFilterInputController.text.split(',').toSet()); + } else { + _searchController.updateFilterEmail(to: {}); } if (hasKeyWordFilterInputController.text.isNotEmpty) { _searchController.updateFilterEmail(hasKeyword: hasKeyWordFilterInputController.text.split(',').toSet()); + } else { + _searchController.updateFilterEmail(hasKeyword: {}); } if (notKeyWordFilterInputController.text.isNotEmpty) { _searchController.updateFilterEmail(notKeyword: notKeyWordFilterInputController.text.split(',').toSet()); + } else { + _searchController.updateFilterEmail(notKeyword: {}); } _searchController.updateFilterEmail( @@ -93,7 +102,7 @@ class AdvancedFilterController extends BaseController { notKeyWordFilterInputController.text.isNotEmpty || dateFilterInputController.text.isNotEmpty || mailBoxFilterInputController.text.isNotEmpty || - hasAttachment.isFalse; + hasAttachment.isTrue; } initSearchFilterField(BuildContext context) { diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 14398d844..bf81c07be 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -201,7 +201,6 @@ class MailboxDashBoardController extends ReloadableController { void _getUserProfile() async { userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; - searchController.userProfile.value = userProfile.value; } void _setSessionCurrent() { @@ -210,7 +209,6 @@ class MailboxDashBoardController extends ReloadableController { if (arguments is Session) { sessionCurrent = arguments; accountId.value = sessionCurrent?.accounts.keys.first; - searchController.accountId.value = accountId.value; } else { if (kIsWeb) { reload(); @@ -382,7 +380,6 @@ class MailboxDashBoardController extends ReloadableController { void handleReloaded(Session session) { sessionCurrent = session; accountId.value = sessionCurrent?.accounts.keys.first; - searchController.accountId.value = accountId.value; _getUserProfile(); } diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index f88b8fc3b..a923a6401 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -35,8 +35,6 @@ class SearchController extends BaseController { final searchInputController = TextEditingController(); final searchEmailFilter = SearchEmailFilter().obs; final searchState = SearchState.initial().obs; - final accountId = Rxn(); - final userProfile = Rxn(); final isAdvancedSearchViewOpen = false.obs; final isAdvancedSearchHasApply = false.obs; final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs; diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 21c530db8..ebbcdb0d1 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -29,8 +29,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { MailboxDashBoardView({Key? key}) : super(key: key); - final SearchController searchController = Get.find(); - + final SearchController searchController = Get.find(); + @override Widget build(BuildContext context) { if (controller.isDrawerOpen && (responsiveUtils.isDesktop(context) @@ -417,7 +417,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { color: AppColor.colorBgSearchBar), height: 45, child: PortalTarget( - visible: controller.searchController.isAdvancedSearchViewOpen.isTrue, + visible: searchController.isAdvancedSearchViewOpen.isTrue, anchor: const Aligned( follower: Alignment.topLeft, target: Alignment.bottomLeft, @@ -431,10 +431,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { portalFollower:const AdvancedSearchFilterOverlay(), child: QuickSearchInputForm( textFieldConfiguration: QuickSearchTextFieldConfiguration( - controller: controller.searchController.searchInputController, + controller: searchController.searchInputController, autofocus: true, - enabled: controller.searchController.isAdvancedSearchViewOpen.isFalse, - focusNode: controller.searchController.searchFocus, + enabled: searchController.isAdvancedSearchViewOpen.isFalse, + focusNode: searchController.searchFocus, textInputAction: TextInputAction.done, onSubmitted: (keyword) { if (keyword.trim().isNotEmpty) { @@ -444,7 +444,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { }, onChanged: (query) { log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query'); - controller.searchController.onChangeTextSearch(query); + searchController.onChangeTextSearch(query); }, decoration: InputDecoration( border: InputBorder.none, @@ -466,9 +466,9 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { height: 16, fit: BoxFit.fill), onTap: () { - final keyword = controller.searchController.searchInputController.text; + final keyword = searchController.searchInputController.text; if (keyword.trim().isNotEmpty) { - controller.searchController.saveRecentSearch(RecentSearch.now(keyword)); + searchController.saveRecentSearch(RecentSearch.now(keyword)); } controller.searchEmail(context, keyword); }), @@ -479,7 +479,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { height: 16, fit: BoxFit.fill), onTap: () { - controller.searchController.clearTextSearch(); + searchController.clearTextSearch(); }), rightButton: IconOpenAdvancedSearchWidget(context) ), @@ -505,7 +505,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { }, buttonActionCallback: (filterAction) { if (filterAction is QuickSearchFilter) { - controller.searchController.selectQuickSearchFilter( + controller.selectQuickSearchFilter( quickSearchFilter: filterAction, fromSuggestionBox: true, ); @@ -529,7 +529,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { return InkWell( onTap: () { if (keyword.trim().isNotEmpty) { - controller.searchController.saveRecentSearch(RecentSearch.now(keyword)); + searchController.saveRecentSearch(RecentSearch.now(keyword)); } controller.searchEmail(context, keyword); }, @@ -561,17 +561,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { child: loadingWidget, ), fetchRecentActionCallback: (pattern) async { - return controller.searchController.getAllRecentSearchAction(pattern); + return searchController.getAllRecentSearchAction(pattern); }, itemRecentBuilder: (context, recent) { return RecentSearchItemTileWidget(recent); }, onRecentSelected: (recent) { - controller.searchController.searchInputController.text = recent.value; + searchController.searchInputController.text = recent.value; controller.searchEmail(context, recent.value); }, suggestionsCallback: (pattern) async { - return controller.searchController.quickSearchEmails(); + return controller.quickSearchEmails(); }, itemBuilder: (context, email) { return EmailQuickSearchItemTileWidget( diff --git a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart index daab9468e..4badd6cc8 100644 --- a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart @@ -59,7 +59,7 @@ class SearchEmailFilter { ); } - Filter? mappingToEmailFilterCondition() { + Filter? mappingToEmailFilterCondition({Filter? moreFilterCondition}) { final emailEmailFilterConditionShared = EmailFilterCondition( text: text?.value, inMailbox: mailbox?.id, @@ -77,6 +77,7 @@ class SearchEmailFilter { Operator.AND, hasKeyword.map((e) => EmailFilterCondition(hasKeyword: e)).toSet()), LogicFilterOperator( Operator.AND, notKeyword.map((e) => EmailFilterCondition(notKeyword: e)).toSet()), + if(moreFilterCondition !=null) moreFilterCondition }); } } diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart index 4402ca433..bd2587047 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart @@ -30,7 +30,7 @@ class AdvancedSearchFilterFormBottomView Expanded(child: _buildCheckboxHasAttachment(context)), _buildButton( onAction: () { - controller.cleanSearchFilter(); + controller.cleanSearchFilter(context); popBack(); }, colorButton: AppColor.primaryColor.withOpacity(0.14), diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index f4223fc50..b39999952 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -103,7 +103,8 @@ class ThreadController extends BaseController { MailboxId? _currentMailboxId; jmap.State? _currentEmailState; final ScrollController listEmailController = ScrollController(); - late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker; + late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker, advancedSearchFilterWorker; + Set? get _sortOrder => {} ..add(EmailComparator(EmailComparatorProperty.receivedAt) @@ -251,6 +252,12 @@ class ThreadController extends BaseController { } }); + advancedSearchFilterWorker = ever(searchController.isAdvancedSearchViewOpen, (hasOpen) { + if (hasOpen == true) { + mailboxDashBoardController.filterMessageOption.value = FilterMessageOption.all; + } + }); + dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) { if (action is DashBoardAction) { if (action is RefreshAllEmailAction) { @@ -304,6 +311,7 @@ class ThreadController extends BaseController { mailboxWorker.call(); dashboardActionWorker.call(); searchWorker.call(); + advancedSearchFilterWorker.call(); viewStateWorker.call(); } @@ -571,8 +579,8 @@ class ThreadController extends BaseController { message: newFilterOption.getMessageToast(context), icon: newFilterOption.getIconToast(_imagePaths)); - if (isSearchActive()) { - _searchEmail(); + if (isSearchActive() || searchController.isAdvancedSearchHasApply.isTrue) { + _searchEmail(filterMessageOption: _getFilterCondition()); } else { refreshAllEmail(); } @@ -816,7 +824,7 @@ class ThreadController extends BaseController { searchController.clearTextSearch(); } - void _searchEmail({UnsignedInt? limit}) { + void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterMessageOption}) { if (_accountId != null && searchQuery != null) { searchIsActive.value = true; @@ -824,11 +832,17 @@ class ThreadController extends BaseController { searchController.updateFilterEmail(mailbox: currentMailbox); } + filterMessageOption = EmailFilterCondition( + notKeyword: filterMessageOption?.notKeyword, + hasKeyword: filterMessageOption?.hasKeyword, + hasAttachment: filterMessageOption?.hasAttachment, + ); + consumeState(_searchEmailInteractor.execute( _accountId!, limit: limit ?? ThreadConstants.defaultLimit, sort: _sortOrder, - filter: _searchEmailFilter.mappingToEmailFilterCondition(), + filter: _searchEmailFilter.mappingToEmailFilterCondition(moreFilterCondition: filterMessageOption), properties: ThreadConstants.propertiesDefault, )); } diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 0cfec9a98..f89b78320 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -267,7 +267,7 @@ class ThreadView extends GetWidget with AppLoaderMixin, }, buttonActionCallback: (filterAction) { if (filterAction is QuickSearchFilter) { - controller.searchController.selectQuickSearchFilter( + controller.mailboxDashBoardController.selectQuickSearchFilter( quickSearchFilter: filterAction, fromSuggestionBox: true, ); @@ -331,7 +331,7 @@ class ThreadView extends GetWidget with AppLoaderMixin, controller.mailboxDashBoardController.searchEmail(context, recent.value); }, suggestionsCallback: (pattern) async { - return controller.searchController.quickSearchEmails(); + return controller.mailboxDashBoardController.quickSearchEmails(); }, itemBuilder: (context, email) { return EmailQuickSearchItemTileWidget( diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index abf722556..e46196a56 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2022-06-26T22:28:09.520951", + "@@last_modified": "2022-06-24T14:16:53.170960", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text",