TF-3911 Support mail keyboard shortcut actions in email detailed view on web

This commit is contained in:
dab246
2025-07-29 02:00:32 +07:00
committed by Dat H. Pham
parent 1c7778d6cc
commit b2989521d9
36 changed files with 763 additions and 270 deletions
@@ -50,9 +50,11 @@ import 'package:tmail_ui_user/features/thread_detail/presentation/extension/hand
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_get_emails_by_ids_success.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_get_thread_by_id_failure.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_mark_multiple_emails_read_success.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_mail_shortcut_actions_extension.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_refresh_thread_detail_action.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/initialize_thread_detail_emails.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/model/mail_view_shortcut_action_view_event.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_manager.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -124,6 +126,9 @@ class ThreadDetailController extends BaseController {
CreateNewEmailRuleFilterInteractor? _createNewEmailRuleFilterInteractor;
bool loadThreadOnThreadChanged = false;
bool isDisplayAllAttachments = false;
FocusNode? keyboardShortcutFocusNode;
StreamController<MailViewShortcutActionViewEvent>? shortcutActionEventController;
StreamSubscription<MailViewShortcutActionViewEvent>? shortcutActionEventSubscription;
AccountId? get accountId => mailboxDashBoardController.accountId.value;
Session? get session => mailboxDashBoardController.sessionCurrent;
@@ -197,6 +202,10 @@ class ThreadDetailController extends BaseController {
threadId: action.threadId,
isSentMailbox: action.isSentMailbox,
);
} else if (action is ReclaimMailViewKeyboardShortcutFocusAction) {
refocusMailShortcutFocus();
} else if (action is ClearMailViewKeyboardShortcutFocusAction) {
clearMailShortcutFocus();
}
// Reset [threadDetailUIAction] to original value
mailboxDashBoardController.dispatchThreadDetailUIAction(
@@ -212,6 +221,8 @@ class ThreadDetailController extends BaseController {
);
}
});
onKeyboardShortcutInit();
}
bool _validateLoadThread(ThreadId? threadId) {
@@ -295,4 +306,10 @@ class ThreadDetailController extends BaseController {
}
super.handleFailureViewState(failure);
}
@override
void onClose() {
onKeyboardShortcutDispose();
super.onClose();
}
}