TF-3294 Handle open email in Sent mailbox
This commit is contained in:
+3
-2
@@ -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<EmailInThreadDetailInfo> {
|
||||
List<EmailId> get emailIdsToDisplay =>
|
||||
where((email) => email.isValidToDisplay)
|
||||
List<EmailId> emailIdsToDisplay(bool isSentMailbox) => isSentMailbox
|
||||
? map((email) => email.emailId).toList()
|
||||
: where((email) => email.isValidToDisplay)
|
||||
.map((email) => email.emailId)
|
||||
.toList();
|
||||
}
|
||||
@@ -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,
|
||||
));
|
||||
|
||||
@@ -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<Object?> get props => [threadId];
|
||||
List<Object?> get props => [threadId, isSentMailbox];
|
||||
}
|
||||
+9
-1
@@ -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(
|
||||
|
||||
+6
@@ -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,
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -96,18 +96,19 @@ class ThreadDetailController extends BaseController {
|
||||
EmailProperty.messageId,
|
||||
});
|
||||
final cachedEmailLoaded = <EmailId, EmailLoaded>{};
|
||||
late final _threadGetDebouncer = Debouncer<ThreadId?>(
|
||||
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(
|
||||
|
||||
Reference in New Issue
Block a user