TF-933 Handle selection email search result on desktop

This commit is contained in:
dab246
2022-09-16 01:11:16 +07:00
committed by Dat H. Pham
parent e832786e1c
commit 7073e903dc
10 changed files with 344 additions and 179 deletions
@@ -1,5 +1,6 @@
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/model.dart';
extension ListPresentationEmailExtension on List<PresentationEmail> {
@@ -7,6 +8,68 @@ extension ListPresentationEmailExtension on List<PresentationEmail> {
bool get isAllEmailStarred => every((email) => email.hasStarred);
List<Email> get listEmail => map((presentationEmail) => presentationEmail.toEmail()).toList();
List<PresentationEmail> get listEmailSelected {
return where((email) => email.selectMode == SelectMode.ACTIVE).toList();
}
bool isAllCanDeletePermanently(Map<MailboxId, PresentationMailbox> mapMailbox) {
final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox))
.whereType<PresentationMailbox>()
.toList();
final stateDelete = listMailboxContain.every((mailbox) => mailbox.isTrash) ||
listMailboxContain.every((mailbox) => mailbox.isDrafts);
return stateDelete;
}
bool isAllCanSpamAndMove(Map<MailboxId, PresentationMailbox> mapMailbox) {
final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox))
.whereType<PresentationMailbox>()
.toList();
return listMailboxContain.every((mailbox) => !mailbox.isDrafts) &&
isAllBelongToTheSameMailbox(mapMailbox);
}
bool isAllSpam(Map<MailboxId, PresentationMailbox> mapMailbox) {
final listMailboxContain = map((email) => email.findMailboxContain(mapMailbox))
.whereType<PresentationMailbox>()
.toList();
return listMailboxContain.every((mailbox) => mailbox.isSpam);
}
bool isAllBelongToTheSameMailbox(Map<MailboxId, PresentationMailbox> mapMailbox) {
if (isEmpty) {
return false;
}
final firstEmail = first;
final firstMailboxContain = firstEmail.findMailboxContain(mapMailbox);
if (firstMailboxContain != null) {
return every((email) {
final mailboxContain = email.findMailboxContain(mapMailbox);
return mailboxContain?.id == firstMailboxContain.id;
});
} else {
return false;
}
}
PresentationMailbox? getCurrentMailboxContain(Map<MailboxId, PresentationMailbox> mapMailbox) {
return first.findMailboxContain(mapMailbox);
}
List<PresentationEmail> listEmailCanSpam(Map<MailboxId, PresentationMailbox> mapMailbox) {
final newListEmails = map((email) {
final mailboxContain = email.findMailboxContain(mapMailbox);
if (mailboxContain?.isSpam == false) {
return email;
} else {
return null;
}
}).whereType<PresentationEmail>().toList();
return newListEmails;
}
List<PresentationEmail> get allEmailUnread => where((email) => !email.hasRead).toList();
PresentationEmail? findEmail(EmailId emailId) {
@@ -70,6 +70,8 @@ class PresentationMailbox with EquatableMixin {
bool get isSent => role == roleSent;
bool get isOutbox => role == roleOutbox;
bool matchCountingRules() {
if (isSpam || isTrash || isDrafts || isTemplates || isSent) {
return false;