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

This commit is contained in:
dab246
2025-07-29 03:25:26 +07:00
committed by Dat H. Pham
parent b2989521d9
commit 226f6520a7
15 changed files with 515 additions and 266 deletions
@@ -1,6 +1,7 @@
import 'package:core/utils/app_logger.dart';
import 'package:get/get_rx/src/rx_workers/rx_workers.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/action/thread_detail_ui_action.dart';
@@ -14,7 +15,7 @@ extension HandleReactiveObxVariableExtension on MailboxDashBoardController {
searchInputFocusWorker = ever(
searchController.isSearchInputFocused,
_onSearchInputFocusChanged
onSearchInputFocusChanged
);
}
@@ -22,13 +23,17 @@ extension HandleReactiveObxVariableExtension on MailboxDashBoardController {
log('$runtimeType::_onAdvancedSearchVisibleChanged: visible is $visible | isEmailOpened = $isEmailOpened');
if (isEmailOpened) {
_performThreadDetailUIActionWhenEmailOpened(visible);
} else if (isEmailListDisplayed) {
_performDashboardUIActionWhenEmailListDisplayed(visible);
}
}
void _onSearchInputFocusChanged(bool focused) {
void onSearchInputFocusChanged(bool focused) {
log('$runtimeType::_onSearchInputFocusChanged: focused is $focused | isEmailOpened = $isEmailOpened');
if (isEmailOpened) {
_performThreadDetailUIActionWhenEmailOpened(focused);
} else if (isEmailListDisplayed) {
_performDashboardUIActionWhenEmailListDisplayed(focused);
}
}
@@ -40,6 +45,14 @@ extension HandleReactiveObxVariableExtension on MailboxDashBoardController {
dispatchThreadDetailUIAction(emailAction);
}
void _performDashboardUIActionWhenEmailListDisplayed(bool focused) {
final dashboardAction = focused
? ClearMailListKeyboardShortcutFocusAction()
: ReclaimMailListKeyboardShortcutFocusAction();
dispatchAction(dashboardAction);
}
void disposeReactiveObxVariableListener() {
advancedSearchVisibleWorker?.dispose();
advancedSearchVisibleWorker = null;