TF-709: After search with advanced search, load more is not show corrected results

This commit is contained in:
ManhNTX
2022-07-14 09:15:19 +07:00
committed by Dat H. Pham
parent 79e165443e
commit e52617fd24
4 changed files with 13 additions and 5 deletions
@@ -6,6 +6,7 @@ import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; 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/mail/email/email_comparator.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
@@ -125,6 +126,7 @@ class SearchController extends BaseController {
PresentationMailbox? mailbox, PresentationMailbox? mailbox,
EmailReceiveTimeType? emailReceiveTimeType, EmailReceiveTimeType? emailReceiveTimeType,
bool? hasAttachment, bool? hasAttachment,
UTCDate? before,
}) { }) {
searchEmailFilter.value = searchEmailFilter.value.copyWith( searchEmailFilter.value = searchEmailFilter.value.copyWith(
from: from, from: from,
@@ -136,6 +138,7 @@ class SearchController extends BaseController {
mailbox: mailbox, mailbox: mailbox,
emailReceiveTimeType: emailReceiveTimeType, emailReceiveTimeType: emailReceiveTimeType,
hasAttachment: hasAttachment, hasAttachment: hasAttachment,
before: before,
); );
} }
@@ -1,6 +1,7 @@
import 'package:jmap_dart_client/jmap/core/filter/filter.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/filter_operator.dart';
import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart'; import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart';
import 'package:jmap_dart_client/jmap/core/utc_date.dart';
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
@@ -16,6 +17,7 @@ class SearchEmailFilter {
final PresentationMailbox? mailbox; final PresentationMailbox? mailbox;
final EmailReceiveTimeType emailReceiveTimeType; final EmailReceiveTimeType emailReceiveTimeType;
final bool hasAttachment; final bool hasAttachment;
final UTCDate? before;
SearchEmailFilter({ SearchEmailFilter({
Set<String>? from, Set<String>? from,
@@ -27,6 +29,7 @@ class SearchEmailFilter {
Set<String>? hasKeyword, Set<String>? hasKeyword,
Set<String>? notKeyword, Set<String>? notKeyword,
this.mailbox, this.mailbox,
this.before,
}) : from = from ?? <String>{}, }) : from = from ?? <String>{},
to = to ?? <String>{}, to = to ?? <String>{},
hasKeyword = hasKeyword ?? <String>{}, hasKeyword = hasKeyword ?? <String>{},
@@ -45,6 +48,7 @@ class SearchEmailFilter {
PresentationMailbox? mailbox, PresentationMailbox? mailbox,
EmailReceiveTimeType? emailReceiveTimeType, EmailReceiveTimeType? emailReceiveTimeType,
bool? hasAttachment, bool? hasAttachment,
UTCDate? before,
}) { }) {
return SearchEmailFilter( return SearchEmailFilter(
from: from ?? this.from, from: from ?? this.from,
@@ -56,16 +60,18 @@ class SearchEmailFilter {
mailbox: mailbox ?? this.mailbox, mailbox: mailbox ?? this.mailbox,
emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType, emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType,
hasAttachment: hasAttachment ?? this.hasAttachment, hasAttachment: hasAttachment ?? this.hasAttachment,
before: before ?? this.before,
); );
} }
Filter? mappingToEmailFilterCondition({Filter? moreFilterCondition}) { Filter mappingToEmailFilterCondition({Filter? moreFilterCondition}) {
final emailEmailFilterConditionShared = EmailFilterCondition( final emailEmailFilterConditionShared = EmailFilterCondition(
text: text?.value, text: text?.value,
inMailbox: mailbox?.id, inMailbox: mailbox?.id,
after: emailReceiveTimeType.toUTCDate(), after: emailReceiveTimeType.toUTCDate(),
hasAttachment: hasAttachment == false ? null : hasAttachment, hasAttachment: hasAttachment == false ? null : hasAttachment,
subject: subject, subject: subject,
before: before,
); );
return LogicFilterOperator(Operator.AND, { return LogicFilterOperator(Operator.AND, {
emailEmailFilterConditionShared, emailEmailFilterConditionShared,
@@ -865,13 +865,12 @@ class ThreadController extends BaseController {
void searchMoreEmails() { void searchMoreEmails() {
if (canSearchMore && _accountId != null) { if (canSearchMore && _accountId != null) {
searchController.updateFilterEmail(before: emailList.last.receivedAt);
consumeState(_searchMoreEmailInteractor.execute( consumeState(_searchMoreEmailInteractor.execute(
_accountId!, _accountId!,
limit: ThreadConstants.defaultLimit, limit: ThreadConstants.defaultLimit,
sort: _sortOrder, sort: _sortOrder,
filter: EmailFilterCondition( filter: searchController.searchEmailFilter.value.mappingToEmailFilterCondition(),
text: searchQuery?.value,
before: emailList.last.receivedAt),
properties: ThreadConstants.propertiesDefault, properties: ThreadConstants.propertiesDefault,
lastEmailId: emailList.last.id lastEmailId: emailList.last.id
)); ));
@@ -540,7 +540,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
&& !controller.isLoadingMore && !controller.isLoadingMore
&& scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent
) { ) {
if (controller.isSearchActive()) { if (controller.isSearchActive() || controller.isAdvanceSearchActive()) {
controller.searchMoreEmails(); controller.searchMoreEmails();
} else { } else {
controller.loadMoreEmails(); controller.loadMoreEmails();