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) {
|
void _refreshChangesAllEmailSuccess(RefreshChangesAllEmailSuccess success) {
|
||||||
log('ThreadController::_refreshChangesAllEmailSuccess(): ${success.emailList.length}');
|
log('ThreadController::_refreshChangesAllEmailSuccess(): ${success.emailList.length}');
|
||||||
_currentEmailState = success.currentEmailState;
|
_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}) {
|
void _getAllEmailAction(AccountId accountId, {MailboxId? mailboxId}) {
|
||||||
@@ -675,7 +679,10 @@ class ThreadController extends BaseController {
|
|||||||
.map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox))
|
.map((email) => email.toSearchPresentationEmail(mailboxDashBoardController.mapMailbox))
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
emailListSearch.value = resultEmailSearchList;
|
final emailsSearchBeforeChanges = emailListSearch;
|
||||||
|
final emailsSearchAfterChanges = resultEmailSearchList;
|
||||||
|
final newListEmailSearch = emailsSearchAfterChanges.combine(emailsSearchBeforeChanges);
|
||||||
|
emailListSearch.value = newListEmailSearch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void searchMoreEmails() {
|
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> {
|
extension ListPresentationEmailExtension on List<PresentationEmail> {
|
||||||
bool get isAllEmailRead => every((email) => email.isReadEmail());
|
bool get isAllEmailRead => every((email) => email.isReadEmail());
|
||||||
@@ -7,4 +8,23 @@ extension ListPresentationEmailExtension on List<PresentationEmail> {
|
|||||||
bool get isAllEmailStarred => every((email) => email.isFlaggedEmail());
|
bool get isAllEmailStarred => every((email) => email.isFlaggedEmail());
|
||||||
|
|
||||||
List<PresentationEmail> get allEmailUnread => where((email) => email.isUnReadEmail()).toList();
|
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