TF-3002 [MOBILE] Handle select & delete Starred search filters in search view

This commit is contained in:
dab246
2024-09-13 14:50:17 +07:00
committed by Dat H. Pham
parent 5ffe1ab13f
commit 9b8b2fe560
2 changed files with 35 additions and 1 deletions
@@ -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/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.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/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/email_action_type.dart';
import 'package:model/email/mark_star_action.dart'; import 'package:model/email/mark_star_action.dart';
import 'package:model/email/prefix_email_address.dart'; import 'package:model/email/prefix_email_address.dart';
@@ -135,6 +136,8 @@ class SearchEmailController extends BaseController
Set<String> get listAddressOfFromFiltered => searchEmailFilter.value.from; Set<String> get listAddressOfFromFiltered => searchEmailFilter.value.from;
Set<String> get listHasKeywordFiltered => searchEmailFilter.value.hasKeyword;
SearchEmailController( SearchEmailController(
this._quickSearchEmailInteractor, this._quickSearchEmailInteractor,
this._saveRecentSearchInteractor, this._saveRecentSearchInteractor,
@@ -511,6 +514,21 @@ class SearchEmailController extends BaseController
_searchEmailAction(context); _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) { bool checkQuickSearchFilterSelected(QuickSearchFilter filter) {
switch (filter) { switch (filter) {
case QuickSearchFilter.hasAttachment: case QuickSearchFilter.hasAttachment:
@@ -702,6 +720,7 @@ class SearchEmailController extends BaseController
Option<UTCDate>? endDateOption, Option<UTCDate>? endDateOption,
Option<Set<Comparator>>? sortOrderOption, Option<Set<Comparator>>? sortOrderOption,
Option<int>? positionOption, Option<int>? positionOption,
Option<Set<String>>? hasKeywordOption,
}) { }) {
searchEmailFilter.value = searchEmailFilter.value.copyWith( searchEmailFilter.value = searchEmailFilter.value.copyWith(
fromOption: fromOption, fromOption: fromOption,
@@ -715,6 +734,7 @@ class SearchEmailController extends BaseController
endDateOption: endDateOption, endDateOption: endDateOption,
sortOrderOption: sortOrderOption, sortOrderOption: sortOrderOption,
positionOption: positionOption, positionOption: positionOption,
hasKeywordOption: hasKeywordOption,
); );
searchEmailFilter.refresh(); searchEmailFilter.refresh();
} }
@@ -934,7 +954,7 @@ class SearchEmailController extends BaseController
_deleteFolderSearchFilter(context); _deleteFolderSearchFilter(context);
break; break;
case QuickSearchFilter.starred: case QuickSearchFilter.starred:
_deleteFolderSearchFilter(context); _deleteStarredSearchFilter(context);
break; break;
default: default:
break; break;
@@ -1014,6 +1034,17 @@ class SearchEmailController extends BaseController
_searchEmailAction(context); _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 @override
void onClose() { void onClose() {
textInputSearchFocus.removeListener(_onSearchTextInputListener); textInputSearchFocus.removeListener(_onSearchTextInputListener);
@@ -291,6 +291,9 @@ class SearchEmailView extends GetWidget<SearchEmailController>
context, context,
controller.mailboxFiltered); controller.mailboxFiltered);
break; break;
case QuickSearchFilter.starred:
controller.selectStarredSearchFilter(context);
break;
default: default:
break; break;
} }