TF-348 Fix preserve the selection state when opening an email
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user