From a9e5483b03572d9b491c2c79b9fb6033aad116d2 Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 11 May 2023 15:27:50 +0700 Subject: [PATCH] TF-1833 Fix the filter `From Me` condition is not working in quick search (cherry picked from commit 89856a226effbd7d491780b16ec7072973285dd5) --- .../mailbox_dashboard_controller.dart | 16 ++++++++--- .../controller/search_controller.dart | 28 ++++++++----------- .../widgets/search_input_form_widget.dart | 2 +- 3 files changed, 25 insertions(+), 21 deletions(-) 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 3fda88b08..66eee6925 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -1309,10 +1309,18 @@ class MailboxDashBoardController extends ReloadableController { searchController.addFilterToSuggestionForm(filter); } - Future> quickSearchEmails() => searchController.quickSearchEmails( - session: sessionCurrent!, - accountId: accountId.value! - ); + Future> quickSearchEmails(String query) async { + if (sessionCurrent != null && accountId.value != null && userProfile.value != null) { + return searchController.quickSearchEmails( + session: sessionCurrent!, + accountId: accountId.value!, + userProfile: userProfile.value!, + query: query + ); + } else { + return []; + } + } void addDownloadTask(DownloadTaskState task) { downloadController.addDownloadTask(task); diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index 87faea93b..79cac2fd3 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -1,13 +1,12 @@ import 'dart:async'; import 'package:core/presentation/utils/responsive_utils.dart'; +import 'package:core/utils/app_logger.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/filter/filter.dart'; -import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart'; -import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; @@ -99,7 +98,8 @@ class SearchController extends BaseController with DateRangePickerMixin { Future> quickSearchEmails({ required Session session, required AccountId accountId, - UserProfile? userProfile + required String query, + required UserProfile userProfile, }) async { return await _quickSearchEmailInteractor.execute( session, @@ -108,7 +108,7 @@ class SearchController extends BaseController with DateRangePickerMixin { sort: {}..add( EmailComparator(EmailComparatorProperty.receivedAt) ..setIsAscending(false)), - filter: _mappingToFilterOnSuggestionForm(userProfile), + filter: _mappingToFilterOnSuggestionForm(userProfile: userProfile, query: query), properties: ThreadConstants.propertiesQuickSearch ).then((result) => result.fold( (failure) => [], @@ -118,11 +118,10 @@ class SearchController extends BaseController with DateRangePickerMixin { )); } - Filter? _mappingToFilterOnSuggestionForm(UserProfile? userProfile) { - final searchText = searchEmailFilter.value.text?.value.trim(); - + Filter? _mappingToFilterOnSuggestionForm({required String query, required UserProfile userProfile}) { + log('SearchController::_mappingToFilterOnSuggestionForm():query: $query'); final filterCondition = EmailFilterCondition( - text: searchText?.isNotEmpty == true ? searchText : null, + text: query.isNotEmpty == true ? query : null, after: listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days) ? EmailReceiveTimeType.last7Days.toOldestUTCDate() : null, @@ -131,17 +130,14 @@ class SearchController extends BaseController with DateRangePickerMixin { : null, hasAttachment: listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true + : null, + from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe) + ? userProfile.email : null ); - final listEmailCondition = { - if (filterCondition.hasCondition) filterCondition, - if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe) && userProfile != null) - LogicFilterOperator(Operator.AND, {EmailFilterCondition(from: userProfile.email)}) - }; - - return listEmailCondition.isNotEmpty - ? LogicFilterOperator(Operator.AND, listEmailCondition) + return filterCondition.hasCondition + ? filterCondition : null; } diff --git a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart index 7e5774929..b2b75ebb6 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart @@ -109,7 +109,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { fetchRecentActionCallback: controller.getAllRecentSearchAction, itemRecentBuilder: (context, recent) => RecentSearchItemTileWidget(recent), onRecentSelected: (recent) => _invokeSelectRecentItem(context, recent), - suggestionsCallback: (pattern) => dashBoardController.quickSearchEmails(), + suggestionsCallback: dashBoardController.quickSearchEmails, itemBuilder: (context, email) => EmailQuickSearchItemTileWidget(email, dashBoardController.selectedMailbox.value), onSuggestionSelected: (presentationEmail) => _invokeSelectSuggestionItem(context, presentationEmail)) ),