Skip to content

Commit d95f4b6

Browse files
committed
fix: Duplicated email subject after enabling thread mode
1 parent 51b85c8 commit d95f4b6

File tree

5 files changed

+32
-4
lines changed

5 files changed

+32
-4
lines changed

lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3259,6 +3259,9 @@ class MailboxDashBoardController extends ReloadableController
32593259

32603260
jmap.State? get currentEmailState => _currentEmailState;
32613261

3262+
bool get isThreadDetailedViewVisible =>
3263+
dashboardRoute.value == DashboardRoutes.threadDetailed;
3264+
32623265
void _loadAppGrid() {
32633266
if (PlatformInfo.isWeb && AppConfig.appGridDashboardAvailable) {
32643267
appGridDashboardController.loadAppDashboardConfiguration();

lib/features/thread_detail/presentation/action/thread_detail_ui_action.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ class UpdatedEmailKeywordsAction extends ThreadDetailUIAction {
2525

2626
class UpdatedThreadDetailSettingAction extends ThreadDetailUIAction {}
2727

28+
class ResyncThreadDetailWhenSettingChangedAction extends ThreadDetailUIAction {}
29+
2830
class EmailMovedAction extends ThreadDetailUIAction {
2931
EmailMovedAction({
3032
required this.emailId,
Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,19 @@
1+
import 'package:core/utils/platform_info.dart';
2+
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
13
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_manager.dart';
24

35
extension RefreshThreadDetailOnSettingChanged on ThreadDetailManager {
46
void refreshThreadDetailOnSettingChanged() {
57
if (threadDetailWasEnabled != isThreadDetailEnabled) {
68
threadDetailWasEnabled = isThreadDetailEnabled;
7-
mailboxDashBoardController.selectedEmail.refresh();
9+
if (PlatformInfo.isWeb &&
10+
mailboxDashBoardController.isThreadDetailedViewVisible) {
11+
mailboxDashBoardController.dispatchThreadDetailUIAction(
12+
ResyncThreadDetailWhenSettingChangedAction(),
13+
);
14+
} else {
15+
mailboxDashBoardController.selectedEmail.refresh();
16+
}
817
}
918
}
1019
}

lib/features/thread_detail/presentation/extension/thread_detail_on_selected_email_updated.dart

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@ import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action
88
import 'package:tmail_ui_user/features/thread/presentation/extensions/list_presentation_email_extensions.dart';
99
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_emails_by_ids_state.dart';
1010
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_thread_by_id_state.dart';
11-
import 'package:tmail_ui_user/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart';
1211
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
1312
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/close_thread_detail_action.dart';
1413
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
1514

1615
extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
1716
void onSelectedEmailUpdated(
1817
PresentationEmail? selectedEmail,
19-
GetThreadByIdInteractor getThreadByIdInteractor,
2018
BuildContext? context,
2119
) {
2220
if (selectedEmail?.id == null) {
@@ -76,4 +74,19 @@ extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
7674
Right(PreloadEmailsByIdsSuccess([selectedEmail])),
7775
]));
7876
}
77+
78+
void resyncThreadDetailWhenSettingChanged() {
79+
final selectedEmail = mailboxDashBoardController.selectedEmail.value;
80+
if (selectedEmail == null) return;
81+
82+
emailIdsPresentation.clear();
83+
scrollController ??= ScrollController();
84+
85+
mailboxDashBoardController.dispatchEmailUIAction(
86+
DisposePreviousExpandedEmailAction(selectedEmail.id!),
87+
);
88+
89+
loadThreadOnThreadChanged = isThreadDetailEnabled;
90+
_preloadSelectedEmail(selectedEmail);
91+
}
7992
}

lib/features/thread_detail/presentation/thread_detail_controller.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,6 @@ class ThreadDetailController extends BaseController {
172172
ever(mailboxDashBoardController.selectedEmail, (presentationEmail) async {
173173
onSelectedEmailUpdated(
174174
presentationEmail,
175-
_getEmailIdsByThreadIdInteractor,
176175
currentContext,
177176
);
178177
});
@@ -197,6 +196,8 @@ class ThreadDetailController extends BaseController {
197196
threadId: action.threadId,
198197
isSentMailbox: action.isSentMailbox,
199198
);
199+
} else if (action is ResyncThreadDetailWhenSettingChangedAction) {
200+
resyncThreadDetailWhenSettingChanged();
200201
}
201202
// Reset [threadDetailUIAction] to original value
202203
mailboxDashBoardController.dispatchThreadDetailUIAction(

0 commit comments

Comments
 (0)