TF-3764 Add Create filter button in context menu

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-06-12 11:48:20 +07:00
committed by Dat H. Pham
parent bab0331fe0
commit 5068a11524
19 changed files with 172 additions and 74 deletions
@@ -85,6 +85,7 @@ import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_ma
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/handle_create_filter_for_folder.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/open_and_close_composer_extension.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart';
import 'package:tmail_ui_user/features/push_notification/presentation/websocket/web_socket_message.dart';
@@ -1285,6 +1286,9 @@ class MailboxController extends BaseMailboxController
case MailboxActions.newSubfolder:
goToCreateNewMailboxView(context, parentMailbox: mailbox);
break;
case MailboxActions.createFilter:
mailboxDashBoardController.openCreateEmailRuleView(mailbox);
break;
case MailboxActions.recoverDeletedMessages:
mailboxDashBoardController.gotoEmailRecovery();
break;
@@ -27,6 +27,7 @@ mixin MailboxWidgetMixin {
MailboxActions.openInNewTab,
if (!mailbox.isRecovered)
MailboxActions.newSubfolder,
MailboxActions.createFilter,
if (mailbox.isTrash)
...[
MailboxActions.emptyTrash,
@@ -49,6 +50,7 @@ mixin MailboxWidgetMixin {
if (PlatformInfo.isWeb && mailbox.isSubscribedMailbox)
MailboxActions.openInNewTab,
MailboxActions.newSubfolder,
MailboxActions.createFilter,
if (mailbox.countUnReadEmailsAsString.isNotEmpty)
MailboxActions.markAsRead,
MailboxActions.move,
@@ -202,11 +204,8 @@ mixin MailboxWidgetMixin {
iconAction: contextMenuItem.action.getContextMenuIcon(imagePaths),
nameAction: contextMenuItem.action.getTitleContextMenu(context),
colorIcon: contextMenuItem.action.getColorContextMenuIcon(),
padding: const EdgeInsetsDirectional.only(start: 12),
iconSize: 24,
styleName: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 16,
padding: const EdgeInsetsDirectional.symmetric(horizontal: 12),
styleName: ThemeUtils.textStyleBodyBody3(
color: contextMenuItem.action.getColorContextMenuTitle()
),
onCallbackAction: () => handleMailboxAction(context, contextMenuItem.action, mailbox)
@@ -24,6 +24,7 @@ enum MailboxActions {
emptyTrash,
emptySpam,
newSubfolder,
createFilter,
confirmMailSpam,
recoverDeletedMessages,
allowSubaddressing,
@@ -55,6 +56,8 @@ extension MailboxActionsExtension on MailboxActions {
return AppLocalizations.of(context).copySubaddress;
case MailboxActions.newSubfolder:
return AppLocalizations.of(context).newSubfolder;
case MailboxActions.createFilter:
return AppLocalizations.of(context).createFilter;
case MailboxActions.disableSpamReport:
return AppLocalizations.of(context).disableSpamReport;
case MailboxActions.enableSpamReport:
@@ -96,6 +99,8 @@ extension MailboxActionsExtension on MailboxActions {
return imagePaths.icCopy;
case MailboxActions.newSubfolder:
return imagePaths.icAddNewFolder;
case MailboxActions.createFilter:
return imagePaths.icCreateFilter;
case MailboxActions.disableSpamReport:
return imagePaths.icSpamReportDisable;
case MailboxActions.enableSpamReport:
@@ -132,7 +137,7 @@ extension MailboxActionsExtension on MailboxActions {
Color getColorContextMenuTitle() {
switch(this) {
case MailboxActions.delete:
return AppColor.colorActionDeleteConfirmDialog;
return AppColor.redFF3347;
default:
return Colors.black;
}
@@ -141,9 +146,9 @@ extension MailboxActionsExtension on MailboxActions {
Color getColorContextMenuIcon() {
switch(this) {
case MailboxActions.delete:
return AppColor.colorActionDeleteConfirmDialog;
return AppColor.redFF3347;
default:
return AppColor.primaryColor;
return AppColor.steelGrayA540;
}
}
@@ -188,6 +193,7 @@ extension MailboxActionsExtension on MailboxActions {
case MailboxActions.openInNewTab:
case MailboxActions.copySubaddress:
case MailboxActions.newSubfolder:
case MailboxActions.createFilter:
case MailboxActions.disableSpamReport:
case MailboxActions.enableSpamReport:
case MailboxActions.enableMailbox:
@@ -42,6 +42,7 @@ class FoldersBarWidget extends StatelessWidget {
backgroundColor: Colors.transparent,
iconColor: AppColor.steelGrayA540,
iconSize: 20,
padding: const EdgeInsets.all(5),
tooltipMessage: AppLocalizations.of(context).searchForFolders,
onTapActionCallback: onOpenSearchFolder,
);
@@ -57,7 +58,7 @@ class FoldersBarWidget extends StatelessWidget {
icon: imagePaths.icAddNewFolder,
backgroundColor: Colors.transparent,
iconColor: AppColor.steelGrayA540,
iconSize: 24,
iconSize: 20,
padding: const EdgeInsets.all(5),
tooltipMessage: AppLocalizations.of(context).newFolder,
onTapActionCallback: onAddNewFolder,
@@ -11,8 +11,8 @@ class MailboxBottomSheetActionTileBuilder extends CupertinoActionSheetActionBuil
final PresentationMailbox presentationMailbox;
final SvgPicture? actionSelected;
final Color? bgColor;
final EdgeInsets? iconLeftPadding;
final EdgeInsets? iconRightPadding;
final EdgeInsetsGeometry? iconLeftPadding;
final EdgeInsetsGeometry? iconRightPadding;
final bool opacity;
final bool absorbing;
@@ -46,8 +46,10 @@ class MailboxBottomSheetActionTileBuilder extends CupertinoActionSheetActionBuil
key: key,
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
Padding(
padding: iconLeftPadding ?? const EdgeInsets.only(left: 12, right: 16),
child: actionIcon),
padding: iconLeftPadding ??
const EdgeInsetsDirectional.only(start: 12, end: 16),
child: actionIcon,
),
Expanded(child: Text(actionName, textAlign: TextAlign.left, style: actionTextStyle())),
]),
onPressed: () {