TF-1833 Fix the filter From Me condition is not working in quick search

(cherry picked from commit 89856a226effbd7d491780b16ec7072973285dd5)
This commit is contained in:
dab246
2023-05-11 15:27:50 +07:00
committed by Dat Vu
parent 4cbce715b4
commit a9e5483b03
3 changed files with 25 additions and 21 deletions
@@ -1309,10 +1309,18 @@ class MailboxDashBoardController extends ReloadableController {
searchController.addFilterToSuggestionForm(filter);
}
Future<List<PresentationEmail>> quickSearchEmails() => searchController.quickSearchEmails(
session: sessionCurrent!,
accountId: accountId.value!
);
Future<List<PresentationEmail>> 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);
@@ -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<List<PresentationEmail>> 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: <Comparator>{}..add(
EmailComparator(EmailComparatorProperty.receivedAt)
..setIsAscending(false)),
filter: _mappingToFilterOnSuggestionForm(userProfile),
filter: _mappingToFilterOnSuggestionForm(userProfile: userProfile, query: query),
properties: ThreadConstants.propertiesQuickSearch
).then((result) => result.fold(
(failure) => <PresentationEmail>[],
@@ -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;
}
@@ -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))
),