TF-3939 Display minor action on menu in mobile search view

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-08-05 13:39:44 +07:00
committed by Dat H. Pham
parent 6fcccfd09a
commit 6c069d69f6
13 changed files with 280 additions and 329 deletions
@@ -83,7 +83,7 @@ class ThreadView extends GetWidget<ThreadController>
selectMode: controller.mailboxDashBoardController.currentSelectMode.value,
filterOption: controller.mailboxDashBoardController.filterMessageOption.value,
openMailboxAction: controller.openMailboxLeftMenu,
cancelEditThreadAction: controller.cancelSelectEmail,
onCancelSelectionAction: controller.cancelSelectEmail,
emailSelectionAction: controller.pressEmailSelectionAction,
onContextMenuFilterEmailAction: controller.responsiveUtils.isScreenWithShortestSide(context)
? (filterOption) => controller.handleSelectMessageFilter(context, filterOption)
@@ -19,7 +19,7 @@ typedef OnContextMenuFilterEmailAction = void Function(
FilterMessageOption option,
);
typedef OnOpenMailboxMenuActionClick = void Function();
typedef OnCancelEditThreadAction = void Function();
typedef OnCancelSelectionAction = void Function();
typedef OnEmailSelectionAction = void Function(
EmailActionType type,
List<PresentationEmail> emails,
@@ -35,7 +35,7 @@ class AppBarThreadWidget extends StatelessWidget {
final OnPopupMenuFilterEmailAction? onPopupMenuFilterEmailAction;
final OnContextMenuFilterEmailAction? onContextMenuFilterEmailAction;
final OnOpenMailboxMenuActionClick openMailboxAction;
final OnCancelEditThreadAction cancelEditThreadAction;
final OnCancelSelectionAction onCancelSelectionAction;
final OnEmailSelectionAction emailSelectionAction;
final PresentationMailbox? mailboxSelected;
final List<PresentationEmail> listEmailSelected;
@@ -52,7 +52,7 @@ class AppBarThreadWidget extends StatelessWidget {
required this.selectMode,
required this.filterOption,
required this.openMailboxAction,
required this.cancelEditThreadAction,
required this.onCancelSelectionAction,
required this.emailSelectionAction,
this.onPopupMenuFilterEmailAction,
this.onContextMenuFilterEmailAction,
@@ -71,7 +71,7 @@ class AppBarThreadWidget extends StatelessWidget {
selectMode: selectMode,
filterOption: filterOption,
openMailboxAction: openMailboxAction,
cancelEditThreadAction: cancelEditThreadAction,
onCancelSelectionAction: onCancelSelectionAction,
emailSelectionAction: emailSelectionAction,
onPopupMenuFilterEmailAction: onPopupMenuFilterEmailAction,
onContextMenuFilterEmailAction: onContextMenuFilterEmailAction,
@@ -86,7 +86,7 @@ class AppBarThreadWidget extends StatelessWidget {
selectMode: selectMode,
filterOption: filterOption,
openMailboxAction: openMailboxAction,
cancelEditThreadAction: cancelEditThreadAction,
onCancelSelectionAction: onCancelSelectionAction,
onPopupMenuFilterEmailAction: onPopupMenuFilterEmailAction,
onContextMenuFilterEmailAction: onContextMenuFilterEmailAction,
onPressEmailSelectionActionClick: onPressEmailSelectionActionClick,
@@ -3,9 +3,7 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/app_bar/mobile_app_bar_thread_widget_style.dart';
@@ -17,73 +15,65 @@ class DefaultMobileAppBarThreadWidget extends StatelessWidget {
final ResponsiveUtils responsiveUtils;
final ImagePaths imagePaths;
final PresentationMailbox? mailboxSelected;
final List<PresentationEmail> listEmailSelected;
final SelectMode selectMode;
final FilterMessageOption filterOption;
final OnOpenMailboxMenuActionClick openMailboxAction;
final OnPopupMenuFilterEmailAction? onPopupMenuFilterEmailAction;
final OnContextMenuFilterEmailAction? onContextMenuFilterEmailAction;
final OnCancelEditThreadAction cancelEditThreadAction;
const DefaultMobileAppBarThreadWidget({
super.key,
required this.responsiveUtils,
required this.imagePaths,
required this.listEmailSelected,
required this.mailboxSelected,
required this.selectMode,
required this.filterOption,
required this.openMailboxAction,
required this.cancelEditThreadAction,
this.onPopupMenuFilterEmailAction,
this.onContextMenuFilterEmailAction,
});
@override
Widget build(BuildContext context) {
return LayoutBuilder(builder: (context, constraints) {
return Container(
color: MobileAppBarThreadWidgetStyle.backgroundColor,
padding: MobileAppBarThreadWidgetStyle.getPadding(
context,
responsiveUtils,
),
height: MobileAppBarThreadWidgetStyle.height,
child: Row(
children: [
TMailButtonWidget.fromIcon(
key: const Key('mobile_mailbox_menu_button'),
icon: imagePaths.icMenuDrawer,
backgroundColor: Colors.transparent,
padding: MobileAppBarThreadWidgetStyle.mailboxMenuPadding,
maxWidth: MobileAppBarThreadWidgetStyle.buttonMaxWidth,
tooltipMessage: AppLocalizations.of(context).openFolderMenu,
onTapActionCallback: openMailboxAction,
),
Expanded(
child: Padding(
padding: MobileAppBarThreadWidgetStyle.titlePadding,
child: Text(
mailboxSelected?.getDisplayName(context) ?? '',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: MobileAppBarThreadWidgetStyle.titleTextStyle
),
return Container(
color: MobileAppBarThreadWidgetStyle.backgroundColor,
padding: MobileAppBarThreadWidgetStyle.getPadding(
context,
responsiveUtils,
),
height: MobileAppBarThreadWidgetStyle.height,
child: Row(
children: [
TMailButtonWidget.fromIcon(
key: const Key('mobile_mailbox_menu_button'),
icon: imagePaths.icMenuDrawer,
backgroundColor: Colors.transparent,
padding: MobileAppBarThreadWidgetStyle.mailboxMenuPadding,
maxWidth: MobileAppBarThreadWidgetStyle.buttonMaxWidth,
tooltipMessage: AppLocalizations.of(context).openFolderMenu,
onTapActionCallback: openMailboxAction,
),
Expanded(
child: Padding(
padding: MobileAppBarThreadWidgetStyle.titlePadding,
child: Text(
mailboxSelected?.getDisplayName(context) ?? '',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: MobileAppBarThreadWidgetStyle.titleTextStyle,
),
),
TMailButtonWidget.fromIcon(
key: const Key('mobile_filter_message_button'),
icon: imagePaths.icFilter,
iconColor: MobileAppBarThreadWidgetStyle.getFilterButtonColor(filterOption),
backgroundColor: Colors.transparent,
maxWidth: MobileAppBarThreadWidgetStyle.buttonMaxWidth,
tooltipMessage: AppLocalizations.of(context).filter_messages,
onTapActionCallback: () => onContextMenuFilterEmailAction?.call(filterOption),
onTapActionAtPositionCallback: (position) => onPopupMenuFilterEmailAction?.call(filterOption, position),
),
]
),
);
});
),
TMailButtonWidget.fromIcon(
key: const Key('mobile_filter_message_button'),
icon: imagePaths.icFilter,
iconColor: MobileAppBarThreadWidgetStyle.getFilterButtonColor(filterOption),
backgroundColor: Colors.transparent,
maxWidth: MobileAppBarThreadWidgetStyle.buttonMaxWidth,
tooltipMessage: AppLocalizations.of(context).filter_messages,
onTapActionCallback: () => onContextMenuFilterEmailAction?.call(filterOption),
onTapActionAtPositionCallback: (position) => onPopupMenuFilterEmailAction?.call(filterOption, position),
),
],
),
);
}
}
@@ -22,7 +22,7 @@ class MobileAppBarThreadWidget extends StatelessWidget {
final OnOpenMailboxMenuActionClick openMailboxAction;
final OnPopupMenuFilterEmailAction? onPopupMenuFilterEmailAction;
final OnContextMenuFilterEmailAction? onContextMenuFilterEmailAction;
final OnCancelEditThreadAction cancelEditThreadAction;
final OnCancelSelectionAction onCancelSelectionAction;
final OnPressEmailSelectionActionClick? onPressEmailSelectionActionClick;
const MobileAppBarThreadWidget({
@@ -34,7 +34,7 @@ class MobileAppBarThreadWidget extends StatelessWidget {
required this.selectMode,
required this.filterOption,
required this.openMailboxAction,
required this.cancelEditThreadAction,
required this.onCancelSelectionAction,
this.onPopupMenuFilterEmailAction,
this.onContextMenuFilterEmailAction,
this.onPressEmailSelectionActionClick,
@@ -62,7 +62,7 @@ class MobileAppBarThreadWidget extends StatelessWidget {
imagePaths: imagePaths,
responsiveUtils: responsiveUtils,
selectedEmails: listEmailSelected,
cancelEditThreadAction: cancelEditThreadAction,
onCancelSelectionAction: onCancelSelectionAction,
emailSelectionActionTypes: actionTypes,
onPressEmailSelectionActionClick: (type, emails) =>
onPressEmailSelectionActionClick?.call(type, emails),
@@ -71,12 +71,9 @@ class MobileAppBarThreadWidget extends StatelessWidget {
return DefaultMobileAppBarThreadWidget(
imagePaths: imagePaths,
responsiveUtils: responsiveUtils,
listEmailSelected: listEmailSelected,
mailboxSelected: mailboxSelected,
selectMode: selectMode,
filterOption: filterOption,
openMailboxAction: openMailboxAction,
cancelEditThreadAction: cancelEditThreadAction,
onPopupMenuFilterEmailAction: onPopupMenuFilterEmailAction,
onContextMenuFilterEmailAction: onContextMenuFilterEmailAction,
);
@@ -14,7 +14,8 @@ class SelectionMobileAppBarThreadWidget extends StatelessWidget {
final List<PresentationEmail> selectedEmails;
final List<EmailSelectionActionType> emailSelectionActionTypes;
final OnPressEmailSelectionActionClick onPressEmailSelectionActionClick;
final OnCancelEditThreadAction cancelEditThreadAction;
final OnCancelSelectionAction onCancelSelectionAction;
final EdgeInsetsGeometry? padding;
const SelectionMobileAppBarThreadWidget({
super.key,
@@ -23,14 +24,15 @@ class SelectionMobileAppBarThreadWidget extends StatelessWidget {
required this.selectedEmails,
required this.emailSelectionActionTypes,
required this.onPressEmailSelectionActionClick,
required this.cancelEditThreadAction,
required this.onCancelSelectionAction,
this.padding,
});
@override
Widget build(BuildContext context) {
return Container(
color: MobileAppBarThreadWidgetStyle.backgroundColor,
padding: MobileAppBarThreadWidgetStyle.getPadding(
padding: padding ?? MobileAppBarThreadWidgetStyle.getPadding(
context,
responsiveUtils,
),
@@ -54,7 +56,7 @@ class SelectionMobileAppBarThreadWidget extends StatelessWidget {
flexibleText: true,
mainAxisSize: MainAxisSize.min,
maxLines: 1,
onTapActionCallback: cancelEditThreadAction,
onTapActionCallback: onCancelSelectionAction,
),
)
],
@@ -9,7 +9,6 @@ import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/list_presentation_email_extension.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/presentation/styles/app_bar/selection_web_app_bar_thread_widget_style.dart';
import 'package:tmail_ui_user/features/thread/presentation/widgets/app_bar/app_bar_thread_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -20,12 +19,8 @@ class SelectionWebAppBarThreadWidget extends StatelessWidget {
final ImagePaths imagePaths;
final PresentationMailbox? mailboxSelected;
final List<PresentationEmail> listEmailSelected;
final FilterMessageOption filterOption;
final OnOpenMailboxMenuActionClick openMailboxAction;
final OnCancelEditThreadAction cancelEditThreadAction;
final OnCancelSelectionAction onCancelSelectionAction;
final OnEmailSelectionAction emailSelectionAction;
final OnPopupMenuFilterEmailAction? onPopupMenuFilterEmailAction;
final OnContextMenuFilterEmailAction? onContextMenuFilterEmailAction;
const SelectionWebAppBarThreadWidget({
super.key,
@@ -33,12 +28,8 @@ class SelectionWebAppBarThreadWidget extends StatelessWidget {
required this.imagePaths,
required this.listEmailSelected,
required this.mailboxSelected,
required this.filterOption,
required this.openMailboxAction,
required this.cancelEditThreadAction,
required this.onCancelSelectionAction,
required this.emailSelectionAction,
this.onPopupMenuFilterEmailAction,
this.onContextMenuFilterEmailAction,
});
@override
@@ -57,7 +48,7 @@ class SelectionWebAppBarThreadWidget extends StatelessWidget {
iconColor: SelectionWebAppBarThreadWidgetStyle.iconColor,
iconSize: SelectionWebAppBarThreadWidgetStyle.iconSize,
tooltipMessage: AppLocalizations.of(context).cancel,
onTapActionCallback: cancelEditThreadAction,
onTapActionCallback: onCancelSelectionAction,
),
Expanded(
child: Text(
@@ -19,7 +19,7 @@ class WebAppBarThreadWidget extends StatelessWidget {
final SelectMode selectMode;
final FilterMessageOption filterOption;
final OnOpenMailboxMenuActionClick openMailboxAction;
final OnCancelEditThreadAction cancelEditThreadAction;
final OnCancelSelectionAction onCancelSelectionAction;
final OnEmailSelectionAction emailSelectionAction;
final OnPopupMenuFilterEmailAction? onPopupMenuFilterEmailAction;
final OnContextMenuFilterEmailAction? onContextMenuFilterEmailAction;
@@ -33,7 +33,7 @@ class WebAppBarThreadWidget extends StatelessWidget {
required this.selectMode,
required this.filterOption,
required this.openMailboxAction,
required this.cancelEditThreadAction,
required this.onCancelSelectionAction,
required this.emailSelectionAction,
this.onPopupMenuFilterEmailAction,
this.onContextMenuFilterEmailAction,
@@ -59,12 +59,8 @@ class WebAppBarThreadWidget extends StatelessWidget {
responsiveUtils: responsiveUtils,
listEmailSelected: listEmailSelected,
mailboxSelected: mailboxSelected,
filterOption: filterOption,
openMailboxAction: openMailboxAction,
cancelEditThreadAction: cancelEditThreadAction,
onCancelSelectionAction: onCancelSelectionAction,
emailSelectionAction: emailSelectionAction,
onPopupMenuFilterEmailAction: onPopupMenuFilterEmailAction,
onContextMenuFilterEmailAction: onContextMenuFilterEmailAction,
);
}
}