TF-3759 Update style popup context menu for search filter option on mailbox dashboard view
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -9,6 +9,7 @@ import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/mailbox_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
extension HandleMailboxActionExtension on MailboxController {
|
extension HandleMailboxActionExtension on MailboxController {
|
||||||
|
|
||||||
@@ -113,6 +114,7 @@ extension HandleMailboxActionExtension on MailboxController {
|
|||||||
child: PopupMenuItemActionWidget(
|
child: PopupMenuItemActionWidget(
|
||||||
menuAction: menuAction,
|
menuAction: menuAction,
|
||||||
menuActionClick: (menuAction) {
|
menuActionClick: (menuAction) {
|
||||||
|
popBack();
|
||||||
handleMailboxAction(context, menuAction.action, mailbox);
|
handleMailboxAction(context, menuAction.action, mailbox);
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1196,8 +1196,6 @@ class MailboxController extends BaseMailboxController
|
|||||||
MailboxActions actions,
|
MailboxActions actions,
|
||||||
PresentationMailbox mailbox
|
PresentationMailbox mailbox
|
||||||
) {
|
) {
|
||||||
popBack();
|
|
||||||
|
|
||||||
switch(actions) {
|
switch(actions) {
|
||||||
case MailboxActions.delete:
|
case MailboxActions.delete:
|
||||||
openConfirmationDialogDeleteMailboxAction(
|
openConfirmationDialogDeleteMailboxAction(
|
||||||
|
|||||||
-3
@@ -2045,8 +2045,6 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
|
|
||||||
void selectReceiveTimeQuickSearchFilter(BuildContext context, EmailReceiveTimeType receiveTime) {
|
void selectReceiveTimeQuickSearchFilter(BuildContext context, EmailReceiveTimeType receiveTime) {
|
||||||
log('MailboxDashBoardController::selectReceiveTimeQuickSearchFilter():receiveTime: $receiveTime');
|
log('MailboxDashBoardController::selectReceiveTimeQuickSearchFilter():receiveTime: $receiveTime');
|
||||||
popBack();
|
|
||||||
|
|
||||||
if (receiveTime == EmailReceiveTimeType.customRange) {
|
if (receiveTime == EmailReceiveTimeType.customRange) {
|
||||||
searchController.showMultipleViewDateRangePicker(
|
searchController.showMultipleViewDateRangePicker(
|
||||||
context,
|
context,
|
||||||
@@ -2075,7 +2073,6 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
|
|
||||||
void selectSortOrderQuickSearchFilter(EmailSortOrderType sortOrder) {
|
void selectSortOrderQuickSearchFilter(EmailSortOrderType sortOrder) {
|
||||||
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
||||||
popBack();
|
|
||||||
searchController.updateFilterEmail(sortOrderTypeOption: Some(sortOrder));
|
searchController.updateFilterEmail(sortOrderTypeOption: Some(sortOrder));
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import 'package:get/get.dart';
|
|||||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:model/extensions/session_extension.dart';
|
import 'package:model/extensions/session_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/clean_messages_banner.dart';
|
import 'package:tmail_ui_user/features/base/widget/clean_messages_banner.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/popup_item_no_icon_widget.dart';
|
|
||||||
import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_action_widget.dart';
|
import 'package:tmail_ui_user/features/base/widget/popup_menu/popup_menu_item_action_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/view/web/composer_overlay_view.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/view/web/composer_overlay_view.dart';
|
||||||
@@ -40,6 +39,8 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/va
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/styles/vacation_notification_message_widget_style.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/styles/vacation_notification_message_widget_style.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_banner_widget.dart';
|
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_banner_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/features/search/email/presentation/model/popup_menu_item_date_filter_action.dart';
|
||||||
|
import 'package:tmail_ui_user/features/search/email/presentation/model/popup_menu_item_sort_order_type_action.dart';
|
||||||
import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart';
|
import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart';
|
||||||
import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_view.dart';
|
import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_view.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
||||||
@@ -636,6 +637,13 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
buttonPadding = MailboxDashboardViewWebStyle.getSearchFilterButtonPadding(isSelected);
|
buttonPadding = MailboxDashboardViewWebStyle.getSearchFilterButtonPadding(isSelected);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final isFilterApplied = listAddressOfFrom.isNotEmpty ||
|
||||||
|
listAddressOfTo.isNotEmpty ||
|
||||||
|
startDate != null ||
|
||||||
|
endDate != null ||
|
||||||
|
receiveTimeType != EmailReceiveTimeType.allTime ||
|
||||||
|
mailbox != null;
|
||||||
|
|
||||||
return SearchFilterButton(
|
return SearchFilterButton(
|
||||||
key: Key('${searchFilter.name}_search_filter_button'),
|
key: Key('${searchFilter.name}_search_filter_button'),
|
||||||
searchFilter: searchFilter,
|
searchFilter: searchFilter,
|
||||||
@@ -650,6 +658,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
listAddressOfTo: listAddressOfTo,
|
listAddressOfTo: listAddressOfTo,
|
||||||
mailbox: mailbox,
|
mailbox: mailbox,
|
||||||
buttonPadding: buttonPadding,
|
buttonPadding: buttonPadding,
|
||||||
|
isContextMenuAlignEndButton: isFilterApplied ||
|
||||||
|
searchFilter == QuickSearchFilter.sortBy,
|
||||||
onSelectSearchFilterAction: _onSelectSearchFilterAction,
|
onSelectSearchFilterAction: _onSelectSearchFilterAction,
|
||||||
onDeleteSearchFilterAction: controller.onDeleteSearchFilterAction,
|
onDeleteSearchFilterAction: controller.onDeleteSearchFilterAction,
|
||||||
);
|
);
|
||||||
@@ -693,66 +703,50 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PopupMenuEntry> popupMenuEmailReceiveTimeType(
|
|
||||||
BuildContext context,
|
|
||||||
EmailReceiveTimeType? receiveTimeSelected,
|
|
||||||
{Function(EmailReceiveTimeType)? onCallBack}
|
|
||||||
) {
|
|
||||||
return EmailReceiveTimeType.values
|
|
||||||
.map((receiveTime) => PopupMenuItem(
|
|
||||||
padding: EdgeInsets.zero,
|
|
||||||
child: PopupItemNoIconWidget(
|
|
||||||
receiveTime.getTitle(context),
|
|
||||||
svgIconSelected: controller.imagePaths.icFilterSelected,
|
|
||||||
maxWidth: 320,
|
|
||||||
isSelected: receiveTimeSelected == receiveTime,
|
|
||||||
onCallbackAction: () => onCallBack?.call(receiveTime),
|
|
||||||
)))
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<PopupMenuEntry> popupMenuEmailSortOrderType(
|
|
||||||
BuildContext context,
|
|
||||||
EmailSortOrderType? sortOrderSelected,
|
|
||||||
{Function(EmailSortOrderType)? onCallBack}
|
|
||||||
) {
|
|
||||||
return EmailSortOrderType.values
|
|
||||||
.map((sortType) => PopupMenuItem(
|
|
||||||
padding: EdgeInsets.zero,
|
|
||||||
child: PopupItemNoIconWidget(
|
|
||||||
sortType.getTitle(context),
|
|
||||||
svgIconSelected: controller.imagePaths.icFilterSelected,
|
|
||||||
maxWidth: 332,
|
|
||||||
isSelected: sortOrderSelected == sortType,
|
|
||||||
onCallbackAction: () => onCallBack?.call(sortType),
|
|
||||||
)))
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _openPopupMenuDateFilter(BuildContext context, RelativeRect position) {
|
void _openPopupMenuDateFilter(BuildContext context, RelativeRect position) {
|
||||||
controller.openPopupMenuAction(
|
final popupMenuItems = EmailReceiveTimeType.values.map((timeType) {
|
||||||
context,
|
return PopupMenuItem(
|
||||||
position,
|
padding: EdgeInsets.zero,
|
||||||
popupMenuEmailReceiveTimeType(
|
child: PopupMenuItemActionWidget(
|
||||||
context,
|
menuAction: PopupMenuItemDateFilterAction(
|
||||||
controller.searchController.receiveTimeFiltered,
|
timeType,
|
||||||
onCallBack: (receiveTime) => controller.selectReceiveTimeQuickSearchFilter(
|
controller.searchController.receiveTimeFiltered,
|
||||||
context,
|
AppLocalizations.of(context),
|
||||||
receiveTime
|
controller.imagePaths,
|
||||||
)
|
),
|
||||||
)
|
menuActionClick: (menuAction) {
|
||||||
);
|
popBack();
|
||||||
|
controller.selectReceiveTimeQuickSearchFilter(
|
||||||
|
context,
|
||||||
|
menuAction.action,
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
controller.openPopupMenuAction(context, position, popupMenuItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _openPopupMenuSortFilter(BuildContext context, RelativeRect position) {
|
void _openPopupMenuSortFilter(BuildContext context, RelativeRect position) {
|
||||||
controller.openPopupMenuAction(
|
final popupMenuItems = EmailSortOrderType.values.map((sortType) {
|
||||||
context,
|
return PopupMenuItem(
|
||||||
position,
|
padding: EdgeInsets.zero,
|
||||||
popupMenuEmailSortOrderType(
|
child: PopupMenuItemActionWidget(
|
||||||
context,
|
menuAction: PopupMenuItemSortOrderTypeAction(
|
||||||
controller.searchController.sortOrderFiltered,
|
sortType,
|
||||||
onCallBack: controller.selectSortOrderQuickSearchFilter
|
controller.searchController.sortOrderFiltered,
|
||||||
)
|
AppLocalizations.of(context),
|
||||||
);
|
controller.imagePaths,
|
||||||
|
),
|
||||||
|
menuActionClick: (menuAction) {
|
||||||
|
popBack();
|
||||||
|
controller.selectSortOrderQuickSearchFilter(menuAction.action);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
controller.openPopupMenuAction(context, position, popupMenuItems);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+6
-1
@@ -31,6 +31,7 @@ class SearchFilterButton extends StatefulWidget {
|
|||||||
final PresentationMailbox? mailbox;
|
final PresentationMailbox? mailbox;
|
||||||
final Color? backgroundColor;
|
final Color? backgroundColor;
|
||||||
final EdgeInsetsGeometry? buttonPadding;
|
final EdgeInsetsGeometry? buttonPadding;
|
||||||
|
final bool isContextMenuAlignEndButton;
|
||||||
final OnSelectSearchFilterAction? onSelectSearchFilterAction;
|
final OnSelectSearchFilterAction? onSelectSearchFilterAction;
|
||||||
final OnDeleteSearchFilterAction? onDeleteSearchFilterAction;
|
final OnDeleteSearchFilterAction? onDeleteSearchFilterAction;
|
||||||
|
|
||||||
@@ -40,6 +41,7 @@ class SearchFilterButton extends StatefulWidget {
|
|||||||
required this.imagePaths,
|
required this.imagePaths,
|
||||||
required this.responsiveUtils,
|
required this.responsiveUtils,
|
||||||
this.isSelected = false,
|
this.isSelected = false,
|
||||||
|
this.isContextMenuAlignEndButton = true,
|
||||||
this.receiveTimeType,
|
this.receiveTimeType,
|
||||||
this.sortOrderType,
|
this.sortOrderType,
|
||||||
this.startDate,
|
this.startDate,
|
||||||
@@ -228,10 +230,13 @@ class _SearchFilterButtonState extends State<SearchFilterButton> {
|
|||||||
ancestor: overlayBox,
|
ancestor: overlayBox,
|
||||||
);
|
);
|
||||||
final buttonSize = buttonBox.size;
|
final buttonSize = buttonBox.size;
|
||||||
|
final dX = widget.isContextMenuAlignEndButton
|
||||||
|
? buttonPosition.dx + buttonSize.width
|
||||||
|
: buttonPosition.dx;
|
||||||
|
|
||||||
position = RelativeRect.fromRect(
|
position = RelativeRect.fromRect(
|
||||||
Rect.fromLTWH(
|
Rect.fromLTWH(
|
||||||
buttonPosition.dx + buttonSize.width,
|
dX,
|
||||||
buttonPosition.dy + buttonSize.height + 8,
|
buttonPosition.dy + buttonSize.height + 8,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|||||||
Reference in New Issue
Block a user