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';
|
import 'package:tmail_ui_user/features/thread_detail/domain/model/email_in_thread_detail_info.dart';
|
||||||
|
|
||||||
extension ListEmailInThreadDetailInfoExtension on List<EmailInThreadDetailInfo> {
|
extension ListEmailInThreadDetailInfoExtension on List<EmailInThreadDetailInfo> {
|
||||||
List<EmailId> get emailIdsToDisplay =>
|
List<EmailId> emailIdsToDisplay(bool isSentMailbox) => isSentMailbox
|
||||||
where((email) => email.isValidToDisplay)
|
? map((email) => email.emailId).toList()
|
||||||
|
: where((email) => email.isValidToDisplay)
|
||||||
.map((email) => email.emailId)
|
.map((email) => email.emailId)
|
||||||
.toList();
|
.toList();
|
||||||
}
|
}
|
||||||
@@ -21,6 +21,7 @@ class GetThreadByIdInteractor {
|
|||||||
AccountId accountId,
|
AccountId accountId,
|
||||||
MailboxId sentMailboxId,
|
MailboxId sentMailboxId,
|
||||||
String ownEmailAddress, {
|
String ownEmailAddress, {
|
||||||
|
required bool isSentMailbox,
|
||||||
bool updateCurrentThreadDetail = false,
|
bool updateCurrentThreadDetail = false,
|
||||||
}) async* {
|
}) async* {
|
||||||
try {
|
try {
|
||||||
@@ -36,7 +37,7 @@ class GetThreadByIdInteractor {
|
|||||||
);
|
);
|
||||||
|
|
||||||
yield Right(GetThreadByIdSuccess(
|
yield Right(GetThreadByIdSuccess(
|
||||||
result.emailIdsToDisplay,
|
result.emailIdsToDisplay(isSentMailbox),
|
||||||
threadId: threadId,
|
threadId: threadId,
|
||||||
updateCurrentThreadDetail: updateCurrentThreadDetail,
|
updateCurrentThreadDetail: updateCurrentThreadDetail,
|
||||||
emailsInThreadDetailInfo: result,
|
emailsInThreadDetailInfo: result,
|
||||||
@@ -51,6 +52,8 @@ class GetThreadByIdInteractor {
|
|||||||
accountId,
|
accountId,
|
||||||
sentMailboxId,
|
sentMailboxId,
|
||||||
ownEmailAddress,
|
ownEmailAddress,
|
||||||
|
isSentMailbox: isSentMailbox,
|
||||||
|
updateCurrentThreadDetail: updateCurrentThreadDetail,
|
||||||
),
|
),
|
||||||
updateCurrentThreadDetail: updateCurrentThreadDetail,
|
updateCurrentThreadDetail: updateCurrentThreadDetail,
|
||||||
));
|
));
|
||||||
|
|||||||
@@ -41,10 +41,14 @@ class EmailMovedAction extends ThreadDetailUIAction {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class LoadThreadDetailAfterSelectedEmailAction extends ThreadDetailUIAction {
|
class LoadThreadDetailAfterSelectedEmailAction extends ThreadDetailUIAction {
|
||||||
LoadThreadDetailAfterSelectedEmailAction(this.threadId);
|
LoadThreadDetailAfterSelectedEmailAction(
|
||||||
|
this.threadId, {
|
||||||
|
required this.isSentMailbox,
|
||||||
|
});
|
||||||
|
|
||||||
final ThreadId threadId;
|
final ThreadId threadId;
|
||||||
|
final bool isSentMailbox;
|
||||||
|
|
||||||
@override
|
@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: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/email/presentation/bindings/email_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
|
||||||
import 'package:model/email/email_in_thread_status.dart';
|
import 'package:model/email/email_in_thread_status.dart';
|
||||||
@@ -24,8 +26,14 @@ extension HandleGetEmailsByIdsSuccess on ThreadDetailController {
|
|||||||
|
|
||||||
if (isThreadDetailEnabled && isInternetConnected) {
|
if (isThreadDetailEnabled && isInternetConnected) {
|
||||||
loadThreadOnThreadChanged = false;
|
loadThreadOnThreadChanged = false;
|
||||||
|
final mailboxContain = email.findMailboxContain(
|
||||||
|
mailboxDashBoardController.mapMailboxById,
|
||||||
|
);
|
||||||
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
||||||
LoadThreadDetailAfterSelectedEmailAction(email.threadId!),
|
LoadThreadDetailAfterSelectedEmailAction(
|
||||||
|
email.threadId!,
|
||||||
|
isSentMailbox: mailboxContain?.isSent == true,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
emailIdsPresentation[emailId] = emailIdsPresentation[emailId]?.copyWith(
|
emailIdsPresentation[emailId] = emailIdsPresentation[emailId]?.copyWith(
|
||||||
|
|||||||
+6
@@ -1,6 +1,8 @@
|
|||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:model/email/presentation_email.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/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/presentation/extensions/list_presentation_email_extensions.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_emails_by_ids_state.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);
|
_preloadSelectedEmail(selectedEmail);
|
||||||
|
|
||||||
if (isThreadDetailEnabled && selectedEmail.threadId != null) {
|
if (isThreadDetailEnabled && selectedEmail.threadId != null) {
|
||||||
|
final mailboxContain = selectedEmail.findMailboxContain(
|
||||||
|
mailboxDashBoardController.mapMailboxById,
|
||||||
|
);
|
||||||
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
||||||
LoadThreadDetailAfterSelectedEmailAction(
|
LoadThreadDetailAfterSelectedEmailAction(
|
||||||
selectedEmail.threadId!,
|
selectedEmail.threadId!,
|
||||||
|
isSentMailbox: mailboxContain?.isSent == true,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,18 +96,19 @@ class ThreadDetailController extends BaseController {
|
|||||||
EmailProperty.messageId,
|
EmailProperty.messageId,
|
||||||
});
|
});
|
||||||
final cachedEmailLoaded = <EmailId, EmailLoaded>{};
|
final cachedEmailLoaded = <EmailId, EmailLoaded>{};
|
||||||
late final _threadGetDebouncer = Debouncer<ThreadId?>(
|
late final _threadGetDebouncer = Debouncer<({ThreadId? threadId, bool isSentMailbox})?>(
|
||||||
const Duration(milliseconds: 500),
|
const Duration(milliseconds: 500),
|
||||||
initialValue: null,
|
initialValue: null,
|
||||||
checkEquality: false,
|
checkEquality: false,
|
||||||
onChanged: (threadId) {
|
onChanged: (value) {
|
||||||
if (_validateLoadThread(threadId)) {
|
if (_validateLoadThread(value?.threadId)) {
|
||||||
consumeState(_getEmailIdsByThreadIdInteractor.execute(
|
consumeState(_getEmailIdsByThreadIdInteractor.execute(
|
||||||
threadId!,
|
value!.threadId!,
|
||||||
session!,
|
session!,
|
||||||
accountId!,
|
accountId!,
|
||||||
sentMailboxId!,
|
sentMailboxId!,
|
||||||
ownEmailAddress!,
|
ownEmailAddress!,
|
||||||
|
isSentMailbox: value.isSentMailbox,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -189,7 +190,10 @@ class ThreadDetailController extends BaseController {
|
|||||||
} else if (action is EmailMovedAction) {
|
} else if (action is EmailMovedAction) {
|
||||||
handleEmailMovedAction(action);
|
handleEmailMovedAction(action);
|
||||||
} else if (action is LoadThreadDetailAfterSelectedEmailAction) {
|
} else if (action is LoadThreadDetailAfterSelectedEmailAction) {
|
||||||
_threadGetDebouncer.value = action.threadId;
|
_threadGetDebouncer.value = (
|
||||||
|
threadId: action.threadId,
|
||||||
|
isSentMailbox: action.isSentMailbox,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
// Reset [threadDetailUIAction] to original value
|
// Reset [threadDetailUIAction] to original value
|
||||||
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
||||||
|
|||||||
Reference in New Issue
Block a user