feat: Apply EmailMoreActionContextMenu mixin for ThreadView and SearchEmailView
This commit is contained in:
@@ -309,7 +309,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
handleEmailActionType(
|
||||
EmailActionType.preview,
|
||||
newEmail,
|
||||
mailboxContain: mailboxContain,
|
||||
mailboxContain,
|
||||
);
|
||||
mailboxDashBoardController.clearDashBoardAction();
|
||||
} else if (action is StartSearchEmailAction
|
||||
@@ -1332,9 +1332,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
void handleEmailActionType(
|
||||
EmailActionType actionType,
|
||||
PresentationEmail selectedEmail,
|
||||
{
|
||||
required PresentationMailbox? mailboxContain,
|
||||
}
|
||||
PresentationMailbox? mailboxContain,
|
||||
) {
|
||||
switch(actionType) {
|
||||
case EmailActionType.preview:
|
||||
@@ -1477,7 +1475,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
handleEmailActionType(
|
||||
EmailActionType.preview,
|
||||
presentationEmailWithRouter,
|
||||
mailboxContain: mailboxContain
|
||||
mailboxContain,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1496,7 +1494,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
handleEmailActionType(
|
||||
EmailActionType.preview,
|
||||
presentationEmailWithRouter,
|
||||
mailboxContain: mailboxContain
|
||||
mailboxContain,
|
||||
);
|
||||
} else {
|
||||
searchController.enableSearch();
|
||||
@@ -1512,7 +1510,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
handleEmailActionType(
|
||||
EmailActionType.preview,
|
||||
presentationEmailWithRouter,
|
||||
mailboxContain: mailboxContain
|
||||
mailboxContain,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1532,7 +1530,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
handleEmailActionType(
|
||||
EmailActionType.preview,
|
||||
presentationEmailWithRouter,
|
||||
mailboxContain: email.findMailboxContain(mailboxDashBoardController.mapMailboxById)
|
||||
email.findMailboxContain(mailboxDashBoardController.mapMailboxById),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -12,13 +12,9 @@ import 'package:tmail_ui_user/features/base/mixin/popup_menu_widget_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/clean_messages_banner.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/compose_floating_button.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/keyboard/keyboard_handler_wrapper.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_action_group_widget.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_submenu_controller.dart';
|
||||
import 'package:tmail_ui_user/features/base/widget/report_message_banner.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/presentation_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/context_item_email_action.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/model/popup_menu_item_email_action.dart';
|
||||
import 'package:tmail_ui_user/features/labels/presentation/mixin/label_sub_menu_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/state/clear_mailbox_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
|
||||
@@ -46,6 +42,7 @@ import 'package:tmail_ui_user/features/thread/presentation/extensions/handle_pre
|
||||
import 'package:tmail_ui_user/features/thread/presentation/extensions/handle_pull_to_refresh_list_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/extensions/handle_select_message_filter_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/extensions/handle_shift_selection_email_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/mixin/email_more_action_context_menu_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/loading_more_status.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/styles/item_email_tile_styles.dart';
|
||||
@@ -59,12 +56,12 @@ import 'package:tmail_ui_user/features/thread/presentation/widgets/empty_emails_
|
||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/scroll_to_top_button_widget.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/thread_view_loading_bar_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
class ThreadView extends GetWidget<ThreadController>
|
||||
with AppLoaderMixin,
|
||||
PopupMenuWidgetMixin,
|
||||
LabelSubMenuMixin {
|
||||
LabelSubMenuMixin,
|
||||
EmailMoreActionContextMenu {
|
||||
|
||||
ThreadView({Key? key}) : super(key: key);
|
||||
|
||||
@@ -660,8 +657,22 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
isAINeedsActionEnabled: isAINeedsActionEnabled,
|
||||
labels: emailLabels,
|
||||
emailActionClick: _handleEmailActionClicked,
|
||||
onMoreActionClick: (email, position) =>
|
||||
_handleEmailContextMenuAction(context, email, position),
|
||||
onMoreActionClick: (email, position) async {
|
||||
await openMoreActionContextMenu(
|
||||
EmailContextMenuParams(
|
||||
context: context,
|
||||
email: email,
|
||||
imagePaths: controller.imagePaths,
|
||||
isLabelAvailable: isLabelAvailable,
|
||||
labels: listLabels,
|
||||
position: position,
|
||||
openBottomSheetContextMenu: dashboardController.openBottomSheetContextMenu,
|
||||
openPopupMenu: dashboardController.openPopupMenuActionGroup,
|
||||
onHandleEmailByActionType: controller.handleEmailActionType,
|
||||
onSelectLabelAction: (label, isSelected) {},
|
||||
),
|
||||
);
|
||||
}
|
||||
),
|
||||
);
|
||||
});
|
||||
@@ -674,110 +685,10 @@ class ThreadView extends GetWidget<ThreadController>
|
||||
controller.handleEmailActionType(
|
||||
actionType,
|
||||
presentationEmail,
|
||||
mailboxContain: presentationEmail.mailboxContain,
|
||||
presentationEmail.mailboxContain,
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> _handleEmailContextMenuAction(
|
||||
BuildContext context,
|
||||
PresentationEmail presentationEmail,
|
||||
RelativeRect? position
|
||||
) {
|
||||
final mailboxContain = presentationEmail.mailboxContain;
|
||||
final isDrafts = mailboxContain?.isDrafts ?? false;
|
||||
final isChildOfTeamMailboxes =
|
||||
mailboxContain?.isChildOfTeamMailboxes ?? false;
|
||||
final isSpam = mailboxContain?.isSpam ?? false;
|
||||
final isArchive = mailboxContain?.isArchive ?? false;
|
||||
final isTemplates = mailboxContain?.isTemplates ?? false;
|
||||
final isRead = presentationEmail.hasRead;
|
||||
final isTrash = mailboxContain?.isTrash ?? false;
|
||||
final canPermanentlyDelete = isDrafts || isSpam || isTrash;
|
||||
final isLabelAvailable =
|
||||
controller.mailboxDashBoardController.isLabelAvailable;
|
||||
final listLabels =
|
||||
controller.mailboxDashBoardController.labelController.labels;
|
||||
final shouldShowLabelAs = isLabelAvailable && listLabels.isNotEmpty;
|
||||
|
||||
final listEmailActions = [
|
||||
isRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
|
||||
EmailActionType.moveToMailbox,
|
||||
if (shouldShowLabelAs) EmailActionType.labelAs,
|
||||
canPermanentlyDelete ? EmailActionType.deletePermanently : EmailActionType.moveToTrash,
|
||||
EmailActionType.openInNewTab,
|
||||
if (!isDrafts && !isChildOfTeamMailboxes)
|
||||
isSpam ? EmailActionType.unSpam : EmailActionType.moveToSpam,
|
||||
if (!isArchive) EmailActionType.archiveMessage,
|
||||
if (!isDrafts && !isTemplates) EmailActionType.editAsNewEmail,
|
||||
];
|
||||
|
||||
if (position == null) {
|
||||
final contextMenuActions = listEmailActions
|
||||
.map((action) => ContextItemEmailAction(
|
||||
action,
|
||||
AppLocalizations.of(context),
|
||||
controller.imagePaths,
|
||||
category: action.category,
|
||||
))
|
||||
.toList();
|
||||
|
||||
return controller.mailboxDashBoardController.openBottomSheetContextMenu(
|
||||
context: context,
|
||||
itemActions: contextMenuActions,
|
||||
onContextMenuActionClick: (menuAction) {
|
||||
popBack();
|
||||
controller.handleEmailActionType(
|
||||
menuAction.action,
|
||||
presentationEmail,
|
||||
mailboxContain: presentationEmail.mailboxContain,
|
||||
);
|
||||
},
|
||||
useGroupedActions: true,
|
||||
);
|
||||
} else {
|
||||
final submenuController = PopupSubmenuController();
|
||||
|
||||
final popupMenuItemEmailActions = listEmailActions.map((actionType) {
|
||||
return PopupMenuItemEmailAction(
|
||||
actionType,
|
||||
AppLocalizations.of(context),
|
||||
controller.imagePaths,
|
||||
category: actionType.category,
|
||||
submenu: buildLabelSubmenuForEmail(
|
||||
actionType: actionType,
|
||||
imagePaths: controller.imagePaths,
|
||||
presentationEmail: presentationEmail,
|
||||
labels: listLabels,
|
||||
onSelectLabelAction: (label, isSelected) {
|
||||
submenuController.hide();
|
||||
popBack();
|
||||
},
|
||||
),
|
||||
);
|
||||
}).toList();
|
||||
|
||||
final popupMenuWidget = PopupMenuActionGroupWidget(
|
||||
actions: popupMenuItemEmailActions,
|
||||
submenuController: submenuController,
|
||||
onActionSelected: (action) {
|
||||
if (shouldHandleAction(action.action)) {
|
||||
controller.handleEmailActionType(
|
||||
action.action,
|
||||
presentationEmail,
|
||||
mailboxContain: mailboxContain,
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
return controller.mailboxDashBoardController.openPopupMenuActionGroup(
|
||||
context,
|
||||
position,
|
||||
popupMenuWidget,
|
||||
).whenComplete(submenuController.hide);
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildFeedBackWidget(BuildContext context) {
|
||||
return SizedBox(
|
||||
height: 60,
|
||||
|
||||
Reference in New Issue
Block a user