TF-1715 Load emails in favorite folder with filters

This commit is contained in:
dab246
2025-10-30 15:50:19 +07:00
committed by Dat H. Pham
parent fc6cc5719b
commit 00324d4c56
17 changed files with 72 additions and 31 deletions
@@ -1348,7 +1348,7 @@ class MailboxDashBoardController extends ReloadableController
.map((e) => MapEntry(e.id!, e.hasRead))
);
if (searchController.isSearchEmailRunning ||
selectedMailbox.value?.id.isFavoriteMailboxId == true) {
selectedMailbox.value?.isFavorite == true) {
final Map<MailboxId,List<EmailId>> mapListEmailSelectedByMailBoxId = {};
for (var element in listEmails) {
final mailbox = element.findMailboxContain(mapMailboxById);
@@ -5,8 +5,8 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/list_presentation_email_extension.dart';
import 'package:model/extensions/mailbox_id_extension.dart';
import 'package:model/extensions/presentation_email_extension.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
@@ -50,7 +50,7 @@ extension HandleActionTypeForEmailSelection on MailboxDashBoardController {
final mapEmailIdsByMailboxId = <MailboxId, List<EmailId>>{};
if (searchController.isSearchEmailRunning ||
selectedMailbox.value?.id.isFavoriteMailboxId == true) {
selectedMailbox.value?.isFavorite == true) {
for (final email in emails) {
final mailboxId = email.firstMailboxIdAvailable;
final emailId = email.id;
@@ -2,7 +2,7 @@ import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/mailbox_id_extension.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
extension MoveEmailsToMailboxExtension on MailboxDashBoardController {
@@ -11,7 +11,7 @@ extension MoveEmailsToMailboxExtension on MailboxDashBoardController {
required MailboxId destinationMailboxId,
}) {
if (destinationMailboxId == selectedMailbox.value?.id ||
selectedMailbox.value?.id.isFavoriteMailboxId == true) {
selectedMailbox.value?.isFavorite == true) {
return;
}
@@ -545,7 +545,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
if (!controller.searchController.isSearchEmailRunning)
FilterMessageOption.attachments,
FilterMessageOption.unread,
FilterMessageOption.starred,
if (controller.selectedMailbox.value?.isFavorite != true)
FilterMessageOption.starred,
].map((filterOption) {
return PopupMenuItem(
padding: EdgeInsets.zero,
@@ -198,8 +198,8 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
to.isNotEmpty ||
text?.value.trim().isNotEmpty == true ||
subject?.trim().isNotEmpty == true ||
hasKeyword.isNotEmpty == true ||
notKeyword.isNotEmpty == true ||
hasKeyword.isNotEmpty ||
notKeyword.isNotEmpty ||
emailReceiveTimeType != EmailReceiveTimeType.allTime ||
sortOrderType != SearchEmailFilter.defaultSortOrder ||
(mailbox != null && mailbox?.id != PresentationMailbox.unifiedMailbox.id) ||
@@ -208,6 +208,18 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
bool get isContainFlagged => hasKeyword.contains(KeyWordIdentifier.emailFlagged.value);
bool get isOnlyStarredApplied => from.isEmpty &&
to.isEmpty &&
text?.value.trim().isNotEmpty != true &&
subject?.trim().isNotEmpty != true &&
hasKeyword.firstOrNull == KeyWordIdentifier.emailFlagged.value &&
notKeyword.isEmpty &&
emailReceiveTimeType == EmailReceiveTimeType.allTime &&
sortOrderType == SearchEmailFilter.defaultSortOrder &&
(mailbox == null || mailbox?.id == PresentationMailbox.unifiedMailbox.id) &&
!hasAttachment &&
!unread;
@override
List<Object?> get props => [
from,