diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index 345fa1fa3..0b0d3685d 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -14,6 +14,7 @@ import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; +import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/mark_star_action.dart'; import 'package:model/email/prefix_email_address.dart'; @@ -135,6 +136,8 @@ class SearchEmailController extends BaseController Set get listAddressOfFromFiltered => searchEmailFilter.value.from; + Set get listHasKeywordFiltered => searchEmailFilter.value.hasKeyword; + SearchEmailController( this._quickSearchEmailInteractor, this._saveRecentSearchInteractor, @@ -511,6 +514,21 @@ class SearchEmailController extends BaseController _searchEmailAction(context); } + void selectStarredSearchFilter(BuildContext context) { + final listKeyword = listHasKeywordFiltered; + if (!listKeyword.contains(KeyWordIdentifier.emailFlagged.value)) { + listKeyword.add(KeyWordIdentifier.emailFlagged.value); + } + _updateSimpleSearchFilter( + hasKeywordOption: Some(listKeyword), + beforeOption: const None(), + positionOption: emailSortOrderType.value.isScrollByPosition() + ? const Some(0) + : const None() + ); + _searchEmailAction(context); + } + bool checkQuickSearchFilterSelected(QuickSearchFilter filter) { switch (filter) { case QuickSearchFilter.hasAttachment: @@ -702,6 +720,7 @@ class SearchEmailController extends BaseController Option? endDateOption, Option>? sortOrderOption, Option? positionOption, + Option>? hasKeywordOption, }) { searchEmailFilter.value = searchEmailFilter.value.copyWith( fromOption: fromOption, @@ -715,6 +734,7 @@ class SearchEmailController extends BaseController endDateOption: endDateOption, sortOrderOption: sortOrderOption, positionOption: positionOption, + hasKeywordOption: hasKeywordOption, ); searchEmailFilter.refresh(); } @@ -934,7 +954,7 @@ class SearchEmailController extends BaseController _deleteFolderSearchFilter(context); break; case QuickSearchFilter.starred: - _deleteFolderSearchFilter(context); + _deleteStarredSearchFilter(context); break; default: break; @@ -1014,6 +1034,17 @@ class SearchEmailController extends BaseController _searchEmailAction(context); } + void _deleteStarredSearchFilter(BuildContext context) { + _updateSimpleSearchFilter( + hasKeywordOption: const None(), + beforeOption: const None(), + positionOption: emailSortOrderType.value.isScrollByPosition() + ? const Some(0) + : const None() + ); + _searchEmailAction(context); + } + @override void onClose() { textInputSearchFocus.removeListener(_onSearchTextInputListener); diff --git a/lib/features/search/email/presentation/search_email_view.dart b/lib/features/search/email/presentation/search_email_view.dart index d38fe5d51..8329adea7 100644 --- a/lib/features/search/email/presentation/search_email_view.dart +++ b/lib/features/search/email/presentation/search_email_view.dart @@ -291,6 +291,9 @@ class SearchEmailView extends GetWidget context, controller.mailboxFiltered); break; + case QuickSearchFilter.starred: + controller.selectStarredSearchFilter(context); + break; default: break; }