TF-2323 Use position to load more emails when sort by Subject & Sender
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit 847a56bfd331dc29f05493a861fb6f21da2b2cde)
This commit is contained in:
@@ -194,6 +194,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
Option<UTCDate>? startDateOption,
|
||||
Option<UTCDate>? endDateOption,
|
||||
Option<Set<Comparator>>? sortOrderOption,
|
||||
Option<int>? positionOption,
|
||||
}) {
|
||||
searchEmailFilter.value = searchEmailFilter.value.copyWith(
|
||||
fromOption: fromOption,
|
||||
@@ -208,6 +209,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
startDateOption: startDateOption,
|
||||
endDateOption: endDateOption,
|
||||
sortOrderOption: sortOrderOption,
|
||||
positionOption: positionOption,
|
||||
);
|
||||
searchEmailFilter.refresh();
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/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:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
|
||||
enum EmailSortOrderType {
|
||||
mostRecent,
|
||||
@@ -83,4 +83,11 @@ enum EmailSortOrderType {
|
||||
color: Colors.black,
|
||||
);
|
||||
}
|
||||
|
||||
bool isScrollByPosition() {
|
||||
return this == EmailSortOrderType.subjectDescending ||
|
||||
this == EmailSortOrderType.subjectAscending ||
|
||||
this == EmailSortOrderType.senderDescending ||
|
||||
this == EmailSortOrderType.senderAscending;
|
||||
}
|
||||
}
|
||||
@@ -3,14 +3,15 @@ import 'package:equatable/equatable.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/sort/comparator.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:model/extensions/email_filter_condition_extension.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.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_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.dart';
|
||||
|
||||
class SearchEmailFilter with EquatableMixin {
|
||||
final Set<String> from;
|
||||
@@ -25,6 +26,7 @@ class SearchEmailFilter with EquatableMixin {
|
||||
final UTCDate? startDate;
|
||||
final UTCDate? endDate;
|
||||
final Set<Comparator>? sortOrder;
|
||||
final int? position;
|
||||
|
||||
factory SearchEmailFilter.initial() => SearchEmailFilter();
|
||||
|
||||
@@ -41,6 +43,7 @@ class SearchEmailFilter with EquatableMixin {
|
||||
this.startDate,
|
||||
this.endDate,
|
||||
this.sortOrder,
|
||||
this.position,
|
||||
}) : from = from ?? <String>{},
|
||||
to = to ?? <String>{},
|
||||
notKeyword = notKeyword ?? <String>{},
|
||||
@@ -61,6 +64,7 @@ class SearchEmailFilter with EquatableMixin {
|
||||
Option<UTCDate>? startDateOption,
|
||||
Option<UTCDate>? endDateOption,
|
||||
Option<Set<Comparator>>? sortOrderOption,
|
||||
Option<int>? positionOption,
|
||||
}) {
|
||||
return SearchEmailFilter(
|
||||
from: _getOptionParam(fromOption, from),
|
||||
@@ -75,6 +79,7 @@ class SearchEmailFilter with EquatableMixin {
|
||||
startDate: _getOptionParam(startDateOption, startDate),
|
||||
endDate: _getOptionParam(endDateOption, endDate),
|
||||
sortOrder: _getOptionParam(sortOrderOption, sortOrder),
|
||||
position: _getOptionParam(positionOption, position),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -86,18 +91,25 @@ class SearchEmailFilter with EquatableMixin {
|
||||
}
|
||||
}
|
||||
|
||||
Filter? mappingToEmailFilterCondition({EmailFilterCondition? moreFilterCondition}) {
|
||||
Filter? mappingToEmailFilterCondition({
|
||||
required EmailSortOrderType sortOrderType,
|
||||
EmailFilterCondition? moreFilterCondition
|
||||
}) {
|
||||
final emailEmailFilterConditionShared = EmailFilterCondition(
|
||||
text: text?.value.trim().isNotEmpty == true
|
||||
? text?.value
|
||||
: null,
|
||||
inMailbox: mailbox?.mailboxId,
|
||||
after: emailReceiveTimeType.getAfterDate(startDate),
|
||||
after: sortOrderType.isScrollByPosition()
|
||||
? null
|
||||
: emailReceiveTimeType.getAfterDate(startDate),
|
||||
hasAttachment: hasAttachment == false ? null : hasAttachment,
|
||||
subject: subject?.trim().isNotEmpty == true
|
||||
? subject
|
||||
: null,
|
||||
before: emailReceiveTimeType.getBeforeDate(endDate, before)
|
||||
before: sortOrderType.isScrollByPosition()
|
||||
? null
|
||||
: emailReceiveTimeType.getBeforeDate(endDate, before)
|
||||
);
|
||||
|
||||
final listEmailCondition = {
|
||||
@@ -138,5 +150,6 @@ class SearchEmailFilter with EquatableMixin {
|
||||
startDate,
|
||||
endDate,
|
||||
sortOrder,
|
||||
position,
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user