TF-3911 Support mail keyboard shortcut actions in email list view on web
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:tmail_ui_user/features/base/extensions/logical_key_set_helper.dart';
|
||||
import 'package:tmail_ui_user/features/base/shortcut/mail/mail_list_action_shortcut_type.dart';
|
||||
import 'package:tmail_ui_user/features/base/shortcut/mail/mail_view_action_shortcut_type.dart';
|
||||
|
||||
class AppShortcutManager {
|
||||
@@ -24,4 +25,21 @@ class AppShortcutManager {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
static MailListActionShortcutType? getMailListActionFromEvent(KeyEvent event) {
|
||||
final keysPressed = HardwareKeyboard.instance.logicalKeysPressed;
|
||||
log('AppShortcutManager::getMailListActionFromEvent: Keys pressed: $keysPressed');
|
||||
if (keysPressed.isOnly(LogicalKeyboardKey.delete) ||
|
||||
keysPressed.isOnly(LogicalKeyboardKey.backspace)) {
|
||||
return MailListActionShortcutType.delete;
|
||||
} else if (keysPressed.isOnly(LogicalKeyboardKey.keyN)) {
|
||||
return MailListActionShortcutType.newMessage;
|
||||
} else if (keysPressed.isOnly(LogicalKeyboardKey.keyQ)) {
|
||||
return MailListActionShortcutType.markAsRead;
|
||||
} else if (keysPressed.isOnly(LogicalKeyboardKey.keyU)) {
|
||||
return MailListActionShortcutType.markAsUnread;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/list_presentation_email_extension.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
|
||||
enum MailListActionShortcutType {
|
||||
delete,
|
||||
newMessage,
|
||||
markAsRead,
|
||||
markAsUnread;
|
||||
|
||||
EmailActionType? getEmailActionType({
|
||||
required List<PresentationEmail> selectedEmails,
|
||||
PresentationMailbox? selectedMailbox,
|
||||
}) {
|
||||
if (selectedEmails.isEmpty &&
|
||||
this != MailListActionShortcutType.newMessage) {
|
||||
return null;
|
||||
}
|
||||
|
||||
switch(this) {
|
||||
case MailListActionShortcutType.delete:
|
||||
return selectedMailbox?.isDeletePermanentlyEnabled == true
|
||||
? EmailActionType.deletePermanently
|
||||
: EmailActionType.moveToTrash;
|
||||
case MailListActionShortcutType.newMessage:
|
||||
return EmailActionType.compose;
|
||||
case MailListActionShortcutType.markAsRead:
|
||||
return selectedEmails.isAllEmailRead
|
||||
? null
|
||||
: EmailActionType.markAsRead;
|
||||
case MailListActionShortcutType.markAsUnread:
|
||||
return selectedEmails.isAllEmailUnread
|
||||
? null
|
||||
: EmailActionType.markAsUnread;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user