TF-3911 Support keyboard shortcut actions ESC to close composer on web

This commit is contained in:
dab246
2025-07-29 10:28:42 +07:00
committed by Dat H. Pham
parent f169ff5feb
commit 6c86682111
10 changed files with 151 additions and 50 deletions
@@ -2,7 +2,6 @@
import 'package:core/presentation/constants/constants_ui.dart';
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/composer/presentation/view/mobile/editor_fullscreen_dialog_view.dart';
@@ -14,8 +13,8 @@ extension HandleContentHeightExceededExtension on ComposerController {
isContentHeightExceeded.value = height == ConstantsUI.composerHtmlContentMaxHeight;
}
Future<void> viewEntireContent(BuildContext context) async {
clearFocus(context);
Future<void> viewEntireContent() async {
clearFocus();
final currentContent = await getContentInEditor();
log('HandleContentHeightExceededExtension::showComposerFullscreen:currentContent = $currentContent');
@@ -0,0 +1,52 @@
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart' hide SearchController;
import 'package:tmail_ui_user/features/base/shortcut/app_shortcut_manager.dart';
import 'package:tmail_ui_user/features/base/shortcut/composer/composer_action_shortcut_type.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
extension HandleKeyboardShortcutActionsExtension on ComposerController {
void onKeyDownEditorAction(int? keyCode) {
log('$runtimeType::onKeyDownEditorAction:🔥keyCode: $keyCode');
final shortcutType = AppShortcutManager.getComposerActionFromKeyCode(keyCode);
log('$runtimeType::onKeyDownEditorAction:🔥Shortcut triggered: $shortcutType');
if (shortcutType == null) return;
handleComposerShortcutAction(shortcutType);
}
void onKeyboardShortcutInit() {
if (PlatformInfo.isWeb) {
keyboardShortcutFocusNode = FocusNode();
keyboardShortcutFocusNode?.addListener(() {
log('$runtimeType::onKeyboardShortcutInit: keyboardShortcutFocusNode: ${keyboardShortcutFocusNode?.hasFocus}');
});
}
}
void onKeyboardShortcutDispose() {
if (PlatformInfo.isWeb) {
keyboardShortcutFocusNode?.dispose();
}
}
void refocusKeyboardShortcutFocus() {
if (keyboardShortcutFocusNode?.hasFocus == false) {
keyboardShortcutFocusNode?.requestFocus();
}
}
void onKeyDownEventAction(KeyEvent event) {
final shortcutType = AppShortcutManager.getComposerActionFromEvent(event);
log('$runtimeType::onKeyDownEventAction:🔥Shortcut triggered: $shortcutType');
if (shortcutType == null) return;
handleComposerShortcutAction(shortcutType);
}
void handleComposerShortcutAction(ComposerActionShortcutType shortcutType) {
log('$runtimeType::handleComposerShortcutAction: 🔥 Shortcut triggered: $shortcutType');
if (currentContext == null) return;
handleClickCloseComposer(currentContext!);
}
}
@@ -57,7 +57,7 @@ extension HandleOpenContextMenuExtension on ComposerController {
handleClickSaveAsTemplateButton(context);
break;
case ComposerActionType.delete:
handleClickDeleteComposer(context);
handleClickDeleteComposer();
break;
}
}