diff --git a/lib/features/base/shortcut/mail/mail_list_action_shortcut_type.dart b/lib/features/base/shortcut/mail/mail_list_action_shortcut_type.dart index 0a9c1f003..49a2eaceb 100644 --- a/lib/features/base/shortcut/mail/mail_list_action_shortcut_type.dart +++ b/lib/features/base/shortcut/mail/mail_list_action_shortcut_type.dart @@ -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 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 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: diff --git a/lib/features/search/email/presentation/model/mail_searched_list_shortcut_action_view_event.dart b/lib/features/search/email/presentation/model/mail_searched_list_shortcut_action_view_event.dart new file mode 100644 index 000000000..aad85437d --- /dev/null +++ b/lib/features/search/email/presentation/model/mail_searched_list_shortcut_action_view_event.dart @@ -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, + ); +} diff --git a/lib/features/thread/presentation/extensions/handle_keyboard_shortcut_actions_extension.dart b/lib/features/thread/presentation/extensions/handle_keyboard_shortcut_actions_extension.dart index 7504a59e5..10c0e674a 100644 --- a/lib/features/thread/presentation/extensions/handle_keyboard_shortcut_actions_extension.dart +++ b/lib/features/thread/presentation/extensions/handle_keyboard_shortcut_actions_extension.dart @@ -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), + ); + } } \ No newline at end of file