diff --git a/lib/features/thread_detail/domain/extensions/list_email_in_thread_detail_info_extension.dart b/lib/features/thread_detail/domain/extensions/list_email_in_thread_detail_info_extension.dart index fa1453447..d33fdea0d 100644 --- a/lib/features/thread_detail/domain/extensions/list_email_in_thread_detail_info_extension.dart +++ b/lib/features/thread_detail/domain/extensions/list_email_in_thread_detail_info_extension.dart @@ -2,8 +2,9 @@ import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:tmail_ui_user/features/thread_detail/domain/model/email_in_thread_detail_info.dart'; extension ListEmailInThreadDetailInfoExtension on List { - List get emailIdsToDisplay => - where((email) => email.isValidToDisplay) + List emailIdsToDisplay(bool isSentMailbox) => isSentMailbox + ? map((email) => email.emailId).toList() + : where((email) => email.isValidToDisplay) .map((email) => email.emailId) .toList(); } \ No newline at end of file diff --git a/lib/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart b/lib/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart index 93413fe82..3981a5981 100644 --- a/lib/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart +++ b/lib/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart @@ -21,6 +21,7 @@ class GetThreadByIdInteractor { AccountId accountId, MailboxId sentMailboxId, String ownEmailAddress, { + required bool isSentMailbox, bool updateCurrentThreadDetail = false, }) async* { try { @@ -36,7 +37,7 @@ class GetThreadByIdInteractor { ); yield Right(GetThreadByIdSuccess( - result.emailIdsToDisplay, + result.emailIdsToDisplay(isSentMailbox), threadId: threadId, updateCurrentThreadDetail: updateCurrentThreadDetail, emailsInThreadDetailInfo: result, @@ -51,6 +52,8 @@ class GetThreadByIdInteractor { accountId, sentMailboxId, ownEmailAddress, + isSentMailbox: isSentMailbox, + updateCurrentThreadDetail: updateCurrentThreadDetail, ), updateCurrentThreadDetail: updateCurrentThreadDetail, )); diff --git a/lib/features/thread_detail/presentation/action/thread_detail_ui_action.dart b/lib/features/thread_detail/presentation/action/thread_detail_ui_action.dart index 43b233d03..0f7752c7f 100644 --- a/lib/features/thread_detail/presentation/action/thread_detail_ui_action.dart +++ b/lib/features/thread_detail/presentation/action/thread_detail_ui_action.dart @@ -41,10 +41,14 @@ class EmailMovedAction extends ThreadDetailUIAction { } class LoadThreadDetailAfterSelectedEmailAction extends ThreadDetailUIAction { - LoadThreadDetailAfterSelectedEmailAction(this.threadId); + LoadThreadDetailAfterSelectedEmailAction( + this.threadId, { + required this.isSentMailbox, + }); final ThreadId threadId; + final bool isSentMailbox; @override - List get props => [threadId]; + List get props => [threadId, isSentMailbox]; } \ No newline at end of file diff --git a/lib/features/thread_detail/presentation/extension/handle_get_emails_by_ids_success.dart b/lib/features/thread_detail/presentation/extension/handle_get_emails_by_ids_success.dart index 4cea6ca75..ecdfccf63 100644 --- a/lib/features/thread_detail/presentation/extension/handle_get_emails_by_ids_success.dart +++ b/lib/features/thread_detail/presentation/extension/handle_get_emails_by_ids_success.dart @@ -1,4 +1,6 @@ import 'package:core/utils/platform_info.dart'; +import 'package:model/extensions/presentation_email_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/bindings/email_bindings.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; import 'package:model/email/email_in_thread_status.dart'; @@ -24,8 +26,14 @@ extension HandleGetEmailsByIdsSuccess on ThreadDetailController { if (isThreadDetailEnabled && isInternetConnected) { loadThreadOnThreadChanged = false; + final mailboxContain = email.findMailboxContain( + mailboxDashBoardController.mapMailboxById, + ); mailboxDashBoardController.dispatchThreadDetailUIAction( - LoadThreadDetailAfterSelectedEmailAction(email.threadId!), + LoadThreadDetailAfterSelectedEmailAction( + email.threadId!, + isSentMailbox: mailboxContain?.isSent == true, + ), ); } else { emailIdsPresentation[emailId] = emailIdsPresentation[emailId]?.copyWith( diff --git a/lib/features/thread_detail/presentation/extension/thread_detail_on_selected_email_updated.dart b/lib/features/thread_detail/presentation/extension/thread_detail_on_selected_email_updated.dart index c7041d32d..3b0c6d408 100644 --- a/lib/features/thread_detail/presentation/extension/thread_detail_on_selected_email_updated.dart +++ b/lib/features/thread_detail/presentation/extension/thread_detail_on_selected_email_updated.dart @@ -1,6 +1,8 @@ import 'package:dartz/dartz.dart'; import 'package:flutter/widgets.dart'; import 'package:model/email/presentation_email.dart'; +import 'package:model/extensions/presentation_email_extension.dart'; +import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action.dart'; import 'package:tmail_ui_user/features/thread/presentation/extensions/list_presentation_email_extensions.dart'; import 'package:tmail_ui_user/features/thread_detail/domain/state/get_emails_by_ids_state.dart'; @@ -35,9 +37,13 @@ extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController { _preloadSelectedEmail(selectedEmail); if (isThreadDetailEnabled && selectedEmail.threadId != null) { + final mailboxContain = selectedEmail.findMailboxContain( + mailboxDashBoardController.mapMailboxById, + ); mailboxDashBoardController.dispatchThreadDetailUIAction( LoadThreadDetailAfterSelectedEmailAction( selectedEmail.threadId!, + isSentMailbox: mailboxContain?.isSent == true, ) ); } diff --git a/lib/features/thread_detail/presentation/thread_detail_controller.dart b/lib/features/thread_detail/presentation/thread_detail_controller.dart index 3bea684a1..6187d9518 100644 --- a/lib/features/thread_detail/presentation/thread_detail_controller.dart +++ b/lib/features/thread_detail/presentation/thread_detail_controller.dart @@ -96,18 +96,19 @@ class ThreadDetailController extends BaseController { EmailProperty.messageId, }); final cachedEmailLoaded = {}; - late final _threadGetDebouncer = Debouncer( + late final _threadGetDebouncer = Debouncer<({ThreadId? threadId, bool isSentMailbox})?>( const Duration(milliseconds: 500), initialValue: null, checkEquality: false, - onChanged: (threadId) { - if (_validateLoadThread(threadId)) { + onChanged: (value) { + if (_validateLoadThread(value?.threadId)) { consumeState(_getEmailIdsByThreadIdInteractor.execute( - threadId!, + value!.threadId!, session!, accountId!, sentMailboxId!, ownEmailAddress!, + isSentMailbox: value.isSentMailbox, )); } }, @@ -189,7 +190,10 @@ class ThreadDetailController extends BaseController { } else if (action is EmailMovedAction) { handleEmailMovedAction(action); } else if (action is LoadThreadDetailAfterSelectedEmailAction) { - _threadGetDebouncer.value = action.threadId; + _threadGetDebouncer.value = ( + threadId: action.threadId, + isSentMailbox: action.isSentMailbox, + ); } // Reset [threadDetailUIAction] to original value mailboxDashBoardController.dispatchThreadDetailUIAction(