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;
|
jmap.State? get currentEmailState => _currentEmailState;
|
||||||
|
|
||||||
|
bool get isThreadDetailedViewVisible =>
|
||||||
|
dashboardRoute.value == DashboardRoutes.threadDetailed;
|
||||||
|
|
||||||
void _loadAppGrid() {
|
void _loadAppGrid() {
|
||||||
if (PlatformInfo.isWeb && AppConfig.appGridDashboardAvailable) {
|
if (PlatformInfo.isWeb && AppConfig.appGridDashboardAvailable) {
|
||||||
appGridDashboardController.loadAppDashboardConfiguration();
|
appGridDashboardController.loadAppDashboardConfiguration();
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ class UpdatedEmailKeywordsAction extends ThreadDetailUIAction {
|
|||||||
|
|
||||||
class UpdatedThreadDetailSettingAction extends ThreadDetailUIAction {}
|
class UpdatedThreadDetailSettingAction extends ThreadDetailUIAction {}
|
||||||
|
|
||||||
|
class ResyncThreadDetailWhenSettingChangedAction extends ThreadDetailUIAction {}
|
||||||
|
|
||||||
class EmailMovedAction extends ThreadDetailUIAction {
|
class EmailMovedAction extends ThreadDetailUIAction {
|
||||||
EmailMovedAction({
|
EmailMovedAction({
|
||||||
required this.emailId,
|
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';
|
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_manager.dart';
|
||||||
|
|
||||||
extension RefreshThreadDetailOnSettingChanged on ThreadDetailManager {
|
extension RefreshThreadDetailOnSettingChanged on ThreadDetailManager {
|
||||||
void refreshThreadDetailOnSettingChanged() {
|
void refreshThreadDetailOnSettingChanged() {
|
||||||
if (threadDetailWasEnabled != isThreadDetailEnabled) {
|
if (threadDetailWasEnabled != isThreadDetailEnabled) {
|
||||||
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/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';
|
||||||
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/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/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/extension/close_thread_detail_action.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.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 {
|
extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
|
||||||
void onSelectedEmailUpdated(
|
void onSelectedEmailUpdated(
|
||||||
PresentationEmail? selectedEmail,
|
PresentationEmail? selectedEmail,
|
||||||
GetThreadByIdInteractor getThreadByIdInteractor,
|
|
||||||
BuildContext? context,
|
BuildContext? context,
|
||||||
) {
|
) {
|
||||||
if (selectedEmail?.id == null) {
|
if (selectedEmail?.id == null) {
|
||||||
@@ -76,4 +74,19 @@ extension ThreadDetailOnSelectedEmailUpdated on ThreadDetailController {
|
|||||||
Right(PreloadEmailsByIdsSuccess([selectedEmail])),
|
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 {
|
ever(mailboxDashBoardController.selectedEmail, (presentationEmail) async {
|
||||||
onSelectedEmailUpdated(
|
onSelectedEmailUpdated(
|
||||||
presentationEmail,
|
presentationEmail,
|
||||||
_getEmailIdsByThreadIdInteractor,
|
|
||||||
currentContext,
|
currentContext,
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
@@ -206,6 +205,8 @@ class ThreadDetailController extends BaseController {
|
|||||||
refocusMailShortcutFocus();
|
refocusMailShortcutFocus();
|
||||||
} else if (action is ClearMailViewKeyboardShortcutFocusAction) {
|
} else if (action is ClearMailViewKeyboardShortcutFocusAction) {
|
||||||
clearMailShortcutFocus();
|
clearMailShortcutFocus();
|
||||||
|
} else if (action is ResyncThreadDetailWhenSettingChangedAction) {
|
||||||
|
resyncThreadDetailWhenSettingChanged();
|
||||||
}
|
}
|
||||||
// Reset [threadDetailUIAction] to original value
|
// Reset [threadDetailUIAction] to original value
|
||||||
mailboxDashBoardController.dispatchThreadDetailUIAction(
|
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/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';
|
||||||
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/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/extension/thread_detail_on_selected_email_updated.dart';
|
||||||
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.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([
|
@GenerateNiceMocks([
|
||||||
MockSpec<ThreadDetailController>(),
|
MockSpec<ThreadDetailController>(),
|
||||||
MockSpec<GetThreadByIdInteractor>(),
|
|
||||||
MockSpec<MailboxDashBoardController>(),
|
MockSpec<MailboxDashBoardController>(),
|
||||||
])
|
])
|
||||||
void main() {
|
void main() {
|
||||||
late MockThreadDetailController threadDetailController;
|
late MockThreadDetailController threadDetailController;
|
||||||
late MockGetThreadByIdInteractor getThreadByIdInteractor;
|
|
||||||
late MockMailboxDashBoardController mailboxDashboardController;
|
late MockMailboxDashBoardController mailboxDashboardController;
|
||||||
|
|
||||||
setUp(() {
|
setUp(() {
|
||||||
threadDetailController = MockThreadDetailController();
|
threadDetailController = MockThreadDetailController();
|
||||||
getThreadByIdInteractor = MockGetThreadByIdInteractor();
|
|
||||||
mailboxDashboardController = MockMailboxDashBoardController();
|
mailboxDashboardController = MockMailboxDashBoardController();
|
||||||
when(threadDetailController.session)
|
when(threadDetailController.session)
|
||||||
.thenReturn(SessionFixtures.aliceSession);
|
.thenReturn(SessionFixtures.aliceSession);
|
||||||
@@ -51,7 +47,6 @@ void main() {
|
|||||||
// act
|
// act
|
||||||
threadDetailController.onSelectedEmailUpdated(
|
threadDetailController.onSelectedEmailUpdated(
|
||||||
null,
|
null,
|
||||||
getThreadByIdInteractor,
|
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -76,7 +71,6 @@ void main() {
|
|||||||
// act
|
// act
|
||||||
threadDetailController.onSelectedEmailUpdated(
|
threadDetailController.onSelectedEmailUpdated(
|
||||||
selectedEmail,
|
selectedEmail,
|
||||||
getThreadByIdInteractor,
|
|
||||||
null,
|
null,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user