feat: Add Label as to context menu for each email item in list
This commit is contained in:
+28
-7
@@ -3,8 +3,10 @@ import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/presentation_mailbox_extension.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/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/mailbox_dashboard/presentation/extensions/labels/handle_logic_label_extension.dart';
|
||||
import 'package:tmail_ui_user/features/search/email/presentation/search_email_controller.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
@@ -21,10 +23,14 @@ extension HandleEmailMoreActionExtension on SearchEmailController {
|
||||
final isRead = presentationEmail.hasRead;
|
||||
final isTrash = mailboxContain?.isTrash ?? false;
|
||||
final canPermanentlyDelete = isDrafts || isSpam || isTrash;
|
||||
final isLabelAvailable = mailboxDashBoardController.isLabelAvailable;
|
||||
final listLabels = 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,
|
||||
isSpam ? EmailActionType.unSpam : EmailActionType.moveToSpam,
|
||||
if (!isDrafts) EmailActionType.editAsNewEmail,
|
||||
@@ -57,31 +63,46 @@ extension HandleEmailMoreActionExtension on SearchEmailController {
|
||||
useGroupedActions: true,
|
||||
);
|
||||
} else {
|
||||
final submenuController = PopupSubmenuController();
|
||||
|
||||
final popupMenuItemEmailActions = listEmailActions.map((actionType) {
|
||||
return PopupMenuItemEmailAction(
|
||||
actionType,
|
||||
AppLocalizations.of(context),
|
||||
imagePaths,
|
||||
category: actionType.category,
|
||||
submenu: buildLabelSubmenuForEmail(
|
||||
actionType: actionType,
|
||||
imagePaths: imagePaths,
|
||||
presentationEmail: presentationEmail,
|
||||
labels: listLabels,
|
||||
onSelectLabelAction: (label, isSelected) {
|
||||
submenuController.hide();
|
||||
popBack();
|
||||
},
|
||||
),
|
||||
);
|
||||
}).toList();
|
||||
|
||||
final popupMenuWidget = PopupMenuActionGroupWidget(
|
||||
actions: popupMenuItemEmailActions,
|
||||
submenuController: submenuController,
|
||||
onActionSelected: (action) {
|
||||
pressEmailAction(
|
||||
context,
|
||||
action.action,
|
||||
presentationEmail,
|
||||
mailboxContain: mailboxContain,
|
||||
);
|
||||
if (shouldHandleAction(action.action)) {
|
||||
pressEmailAction(
|
||||
context,
|
||||
action.action,
|
||||
presentationEmail,
|
||||
mailboxContain: mailboxContain,
|
||||
);
|
||||
}
|
||||
},
|
||||
);
|
||||
|
||||
return popupMenuWidget.show(
|
||||
context,
|
||||
position,
|
||||
);
|
||||
).whenComplete(submenuController.hide);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,6 +40,7 @@ import 'package:tmail_ui_user/features/email/presentation/action/email_ui_action
|
||||
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
||||
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/labels/presentation/mixin/label_sub_menu_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_all_recent_search_latest_state.dart';
|
||||
@@ -88,7 +89,8 @@ import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||
class SearchEmailController extends BaseController
|
||||
with EmailActionController,
|
||||
DateRangePickerMixin,
|
||||
SearchLabelFilterModalMixin {
|
||||
SearchLabelFilterModalMixin,
|
||||
LabelSubMenuMixin {
|
||||
|
||||
final networkConnectionController = Get.find<NetworkConnectionController>();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user