fix: Duplicated email subject after enabling thread mode
This commit is contained in:
+3
@@ -3273,6 +3273,9 @@ class MailboxDashBoardController extends ReloadableController
|
||||
|
||||
jmap.State? get currentEmailState => _currentEmailState;
|
||||
|
||||
bool get isThreadDetailedViewVisible =>
|
||||
dashboardRoute.value == DashboardRoutes.threadDetailed;
|
||||
|
||||
void _loadAppGrid() {
|
||||
if (PlatformInfo.isWeb && AppConfig.appGridDashboardAvailable) {
|
||||
appGridDashboardController.loadAppDashboardConfiguration();
|
||||
|
||||
@@ -25,6 +25,8 @@ class UpdatedEmailKeywordsAction extends ThreadDetailUIAction {
|
||||
|
||||
class UpdatedThreadDetailSettingAction extends ThreadDetailUIAction {}
|
||||
|
||||
class ResyncThreadDetailWhenSettingChangedAction extends ThreadDetailUIAction {}
|
||||
|
||||
class EmailMovedAction extends ThreadDetailUIAction {
|
||||
EmailMovedAction({
|
||||
required this.emailId,
|
||||
|
||||
+10
-1
@@ -1,10 +1,19 @@
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_manager.dart';
|
||||
|
||||
extension RefreshThreadDetailOnSettingChanged on ThreadDetailManager {
|
||||
void refreshThreadDetailOnSettingChanged() {
|
||||
if (threadDetailWasEnabled != isThreadDetailEnabled) {
|
||||
threadDetailWasEnabled = isThreadDetailEnabled;
|
||||
mailboxDashBoardController.selectedEmail.refresh();
|
||||
if (PlatformInfo.isWeb &&
|
||||
mailboxDashBoardController.isThreadDetailedViewVisible) {
|
||||
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
||||
ResyncThreadDetailWhenSettingChangedAction(),
|
||||
);
|
||||
} else {
|
||||
mailboxDashBoardController.selectedEmail.refresh();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
-2
@@ -8,7 +8,6 @@ import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action
|
||||
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_thread_by_id_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/close_thread_detail_action.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
@@ -16,7 +15,6 @@ import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_
|
||||
extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
|
||||
void onSelectedEmailUpdated(
|
||||
PresentationEmail? selectedEmail,
|
||||
GetThreadByIdInteractor getThreadByIdInteractor,
|
||||
BuildContext? context,
|
||||
) {
|
||||
if (selectedEmail?.id == null) {
|
||||
@@ -76,4 +74,19 @@ extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
|
||||
Right(PreloadEmailsByIdsSuccess([selectedEmail])),
|
||||
]));
|
||||
}
|
||||
|
||||
void resyncThreadDetailWhenSettingChanged() {
|
||||
final selectedEmail = mailboxDashBoardController.selectedEmail.value;
|
||||
if (selectedEmail == null) return;
|
||||
|
||||
emailIdsPresentation.clear();
|
||||
scrollController ??= ScrollController();
|
||||
|
||||
mailboxDashBoardController.dispatchEmailUIAction(
|
||||
DisposePreviousExpandedEmailAction(selectedEmail.id!),
|
||||
);
|
||||
|
||||
loadThreadOnThreadChanged = isThreadDetailEnabled;
|
||||
_preloadSelectedEmail(selectedEmail);
|
||||
}
|
||||
}
|
||||
@@ -177,7 +177,6 @@ class ThreadDetailController extends BaseController {
|
||||
ever(mailboxDashBoardController.selectedEmail, (presentationEmail) async {
|
||||
onSelectedEmailUpdated(
|
||||
presentationEmail,
|
||||
_getEmailIdsByThreadIdInteractor,
|
||||
currentContext,
|
||||
);
|
||||
});
|
||||
@@ -206,6 +205,8 @@ class ThreadDetailController extends BaseController {
|
||||
refocusMailShortcutFocus();
|
||||
} else if (action is ClearMailViewKeyboardShortcutFocusAction) {
|
||||
clearMailShortcutFocus();
|
||||
} else if (action is ResyncThreadDetailWhenSettingChangedAction) {
|
||||
resyncThreadDetailWhenSettingChanged();
|
||||
}
|
||||
// Reset [threadDetailUIAction] to original value
|
||||
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
||||
|
||||
-6
@@ -11,7 +11,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
||||
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_thread_by_id_state.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/thread_detail_on_selected_email_updated.dart';
|
||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
|
||||
|
||||
@@ -21,17 +20,14 @@ import 'thread_detail_on_selected_email_updated_test.mocks.dart';
|
||||
|
||||
@GenerateNiceMocks([
|
||||
MockSpec<ThreadDetailController>(),
|
||||
MockSpec<GetThreadByIdInteractor>(),
|
||||
MockSpec<MailboxDashBoardController>(),
|
||||
])
|
||||
void main() {
|
||||
late MockThreadDetailController threadDetailController;
|
||||
late MockGetThreadByIdInteractor getThreadByIdInteractor;
|
||||
late MockMailboxDashBoardController mailboxDashboardController;
|
||||
|
||||
setUp(() {
|
||||
threadDetailController = MockThreadDetailController();
|
||||
getThreadByIdInteractor = MockGetThreadByIdInteractor();
|
||||
mailboxDashboardController = MockMailboxDashBoardController();
|
||||
when(threadDetailController.session)
|
||||
.thenReturn(SessionFixtures.aliceSession);
|
||||
@@ -51,7 +47,6 @@ void main() {
|
||||
// act
|
||||
threadDetailController.onSelectedEmailUpdated(
|
||||
null,
|
||||
getThreadByIdInteractor,
|
||||
null,
|
||||
);
|
||||
|
||||
@@ -76,7 +71,6 @@ void main() {
|
||||
// act
|
||||
threadDetailController.onSelectedEmailUpdated(
|
||||
selectedEmail,
|
||||
getThreadByIdInteractor,
|
||||
null,
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user