TF-348 Fix preserve the selection state when opening an email

This commit is contained in:
dab246
2022-03-25 16:55:56 +07:00
committed by Dat H. Pham
parent 0d369c1b06
commit f639fdc0d8
2 changed files with 30 additions and 3 deletions
@@ -245,7 +245,11 @@ class ThreadController extends BaseController {
void _refreshChangesAllEmailSuccess(RefreshChangesAllEmailSuccess success) {
log('ThreadController::_refreshChangesAllEmailSuccess(): ${success.emailList.length}');
_currentEmailState = success.currentEmailState;
emailList.value = success.emailList;
final emailsBeforeChanges = emailList;
final emailsAfterChanges = success.emailList;
final newListEmail = emailsAfterChanges.combine(emailsBeforeChanges);
emailList.value = newListEmail;
}
void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) {
@@ -675,7 +679,10 @@ class ThreadController extends BaseController {
.map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox))
.toList();
emailListSearch.value = resultEmailSearchList;
final emailsSearchBeforeChanges = emailListSearch;
final emailsSearchAfterChanges = resultEmailSearchList;
final newListEmailSearch = emailsSearchAfterChanges.combine(emailsSearchBeforeChanges);
emailListSearch.value = newListEmailSearch;
}
void searchMoreEmails() {
@@ -1,5 +1,6 @@
import 'package:model/email/presentation_email.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:model/model.dart';
extension ListPresentationEmailExtension on List<PresentationEmail> {
bool get isAllEmailRead => every((email) => email.isReadEmail());
@@ -7,4 +8,23 @@ extension ListPresentationEmailExtension on List<PresentationEmail> {
bool get isAllEmailStarred => every((email) => email.isFlaggedEmail());
List<PresentationEmail> get allEmailUnread => where((email) => email.isUnReadEmail()).toList();
PresentationEmail? findEmail(EmailId emailId) {
try {
return firstWhere((email) => email.id == emailId);
} catch(e) {
return null;
}
}
List<PresentationEmail> combine(List<PresentationEmail> listEmailBefore) {
return map((presentationEmail) {
final emailBefore = listEmailBefore.findEmail(presentationEmail.id);
if (emailBefore != null) {
return presentationEmail.toSelectedEmail(selectMode: emailBefore.selectMode);
} else {
return presentationEmail;
}
}).toList();
}
}