TF-3911 Support mail keyboard shortcut actions in email searched list view on web desktop
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
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_email_extension.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
|
||||
@@ -13,7 +14,7 @@ enum MailListActionShortcutType {
|
||||
|
||||
EmailActionType? getEmailActionType({
|
||||
required List<PresentationEmail> selectedEmails,
|
||||
PresentationMailbox? selectedMailbox,
|
||||
required PresentationMailbox selectedMailbox,
|
||||
}) {
|
||||
if (selectedEmails.isEmpty &&
|
||||
this != MailListActionShortcutType.newMessage) {
|
||||
@@ -22,7 +23,35 @@ enum MailListActionShortcutType {
|
||||
|
||||
switch(this) {
|
||||
case MailListActionShortcutType.delete:
|
||||
return selectedMailbox?.isDeletePermanentlyEnabled == true
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
EmailActionType? getEmailActionTypeBySearch({
|
||||
required List<PresentationEmail> selectedEmails,
|
||||
}) {
|
||||
if (selectedEmails.isEmpty &&
|
||||
this != MailListActionShortcutType.newMessage) {
|
||||
return null;
|
||||
}
|
||||
|
||||
switch(this) {
|
||||
case MailListActionShortcutType.delete:
|
||||
final isDeletePermanentlyEnabled =
|
||||
selectedEmails.every((e) => e.isDeletePermanentlyEnabled);
|
||||
return isDeletePermanentlyEnabled
|
||||
? EmailActionType.deletePermanently
|
||||
: EmailActionType.moveToTrash;
|
||||
case MailListActionShortcutType.newMessage:
|
||||
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/mail_list_shortcut_action_view_event.dart';
|
||||
|
||||
class MailSearchedListShortcutActionViewEvent
|
||||
extends MailListShortcutActionViewEvent {
|
||||
MailSearchedListShortcutActionViewEvent(
|
||||
super.actionType,
|
||||
super.listPresentationEmail,
|
||||
);
|
||||
}
|
||||
+21
-1
@@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:rxdart/rxdart.dart';
|
||||
import 'package:tmail_ui_user/features/base/shortcut/app_shortcut_manager.dart';
|
||||
import 'package:tmail_ui_user/features/base/shortcut/mail/mail_list_action_shortcut_type.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/presentation/model/mail_searched_list_shortcut_action_view_event.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/extensions/handle_shift_selection_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/mail_list_shortcut_action_view_event.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
||||
@@ -53,7 +54,12 @@ extension HandleKeyboardShortcutActionsExtension on ThreadController {
|
||||
final shortcutType = AppShortcutManager.getMailListActionFromEvent(event);
|
||||
log('$runtimeType::onKeyDownEventAction:🔥Shortcut triggered: $shortcutType');
|
||||
if (shortcutType == null) return;
|
||||
handleMailListShortcutAction(shortcutType);
|
||||
|
||||
if (searchController.isSearchEmailRunning) {
|
||||
handleMailSearchListShortcutAction(shortcutType);
|
||||
} else {
|
||||
handleMailListShortcutAction(shortcutType);
|
||||
}
|
||||
}
|
||||
|
||||
void handleMailListShortcutAction(MailListActionShortcutType shortcutType) {
|
||||
@@ -73,4 +79,18 @@ extension HandleKeyboardShortcutActionsExtension on ThreadController {
|
||||
MailListShortcutActionViewEvent(emailActionType, selectedEmails),
|
||||
);
|
||||
}
|
||||
|
||||
void handleMailSearchListShortcutAction(MailListActionShortcutType shortcutType) {
|
||||
log('$runtimeType::handleMailSearchListShortcutAction: 🔥 Shortcut triggered: $shortcutType');
|
||||
final selectedEmails = listEmailSelected;
|
||||
final emailActionType = shortcutType.getEmailActionTypeBySearch(
|
||||
selectedEmails: selectedEmails,
|
||||
);
|
||||
|
||||
if (emailActionType == null) return;
|
||||
|
||||
shortcutActionEventController?.add(
|
||||
MailSearchedListShortcutActionViewEvent(emailActionType, selectedEmails),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user