diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 29cf1e195..60b72e95a 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -74,7 +74,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { (SloganBuilder(arrangedByHorizontal: true) ..setSloganText(AppLocalizations.of(context).app_name) ..setSloganTextAlign(TextAlign.center) - ..setSloganTextStyle(const TextStyle(color: Colors.black, fontSize: 20, fontWeight: FontWeight.bold)) + ..setSloganTextStyle(const TextStyle( + color: Colors.black, + fontSize: 20, + fontWeight: FontWeight.bold)) ..setSizeLogo(24) ..setLogo(imagePaths.icLogoTMail)) .build(), @@ -84,7 +87,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { child: Text( 'v.${controller.appInformation.value!.version}', textAlign: TextAlign.center, - style: const TextStyle(fontSize: 13, color: AppColor.colorContentEmail, fontWeight: FontWeight.w500), + style: const TextStyle( + fontSize: 13, + color: AppColor.colorContentEmail, + fontWeight: FontWeight.w500), )); } else { return const SizedBox.shrink(); @@ -111,45 +117,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { Expanded(child: Obx(() { switch(controller.dashboardRoute.value) { case DashboardRoutes.thread: - return Container( - margin: const EdgeInsets.only(right: 16, top: 16, bottom: 16), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20), - border: Border.all(color: AppColor.colorBorderBodyThread, width: 1), - color: Colors.white), - child: ClipRRect( - borderRadius: BorderRadius.circular(20), - child: Column(children: [ - Obx(() { - if (controller.isSelectionEnabled()) { - return Padding( - padding: const EdgeInsets.all(12.0), - child: TopBarThreadSelection( - context, - controller.listEmailSelected, - controller.mapMailboxById, - onCancelSelection: () => - controller.dispatchAction(CancelSelectionAllEmailAction()), - onEmailActionTypeAction: (listEmails, actionType) => - controller.dispatchAction( - HandleEmailActionTypeAction( - context, - listEmails, - actionType)), - ).build(), - ); - } else { - return Padding( - padding: const EdgeInsets.all(16.0), - child: _buildListButtonTopBar(context), - ); - } - }), - const Divider(color: AppColor.colorDivider, height: 1), - Expanded(child: ThreadView()) - ]), - ), - ); + return _buildThreadViewForWebDesktop(context); case DashboardRoutes.emailDetailed: return EmailView(); default: @@ -211,6 +179,48 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { ); } + Widget _buildThreadViewForWebDesktop(BuildContext context) { + return Container( + margin: const EdgeInsets.only(right: 16, top: 16, bottom: 16), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + border: Border.all(color: AppColor.colorBorderBodyThread, width: 1), + color: Colors.white), + child: ClipRRect( + borderRadius: BorderRadius.circular(20), + child: Column(children: [ + Obx(() { + if (controller.isSelectionEnabled()) { + return Padding( + padding: const EdgeInsets.all(12.0), + child: TopBarThreadSelection( + context, + controller.listEmailSelected, + controller.mapMailboxById, + onCancelSelection: () => + controller.dispatchAction(CancelSelectionAllEmailAction()), + onEmailActionTypeAction: (listEmails, actionType) => + controller.dispatchAction(HandleEmailActionTypeAction( + context, + listEmails, + actionType + )), + ).build(), + ); + } else { + return Padding( + padding: const EdgeInsets.all(16.0), + child: _buildListButtonTopBar(context), + ); + } + }), + const Divider(color: AppColor.colorDivider, height: 1), + Expanded(child: ThreadView()) + ]), + ), + ); + } + Widget _buildRightHeader(BuildContext context) { return LayoutBuilder(builder: (context, constraint) { return Row(children: [ @@ -313,8 +323,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { return Row(children: [ (ButtonBuilder(imagePaths.icRefresh) ..key(const Key('button_reload_thread')) - ..decoration(BoxDecoration( - borderRadius: BorderRadius.circular(10), + ..decoration(const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(10)), color: AppColor.colorButtonHeaderThread)) ..paddingIcon(EdgeInsets.zero) ..size(16) @@ -325,8 +335,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { const SizedBox(width: 16), (ButtonBuilder(imagePaths.icSelectAll) ..key(const Key('button_select_all')) - ..decoration(BoxDecoration( - borderRadius: BorderRadius.circular(10), + ..decoration(const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(10)), color: AppColor.colorButtonHeaderThread)) ..paddingIcon(const EdgeInsets.only(right: 8)) ..size(16) @@ -341,14 +351,16 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { padding: const EdgeInsets.only(left: 16), child: (ButtonBuilder(imagePaths.icMarkAllAsRead) ..key(const Key('button_mark_all_as_read')) - ..decoration(BoxDecoration( - borderRadius: BorderRadius.circular(10), + ..decoration(const BoxDecoration( + borderRadius:BorderRadius.all(Radius.circular(10)), color: AppColor.colorButtonHeaderThread)) ..paddingIcon(const EdgeInsets.only(right: 8)) ..size(16) ..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8)) ..radiusSplash(10) - ..textStyle(const TextStyle(fontSize: 12, color: AppColor.colorTextButtonHeaderThread)) + ..textStyle(const TextStyle( + fontSize: 12, + color: AppColor.colorTextButtonHeaderThread)) ..onPressActionClick(() => controller.markAsReadMailboxAction()) ..text(AppLocalizations.of(context).mark_all_as_read, isVertical: false)) .build(), @@ -357,26 +369,36 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { Obx(() => (ButtonBuilder(imagePaths.icFilterAdvanced) ..key(const Key('button_filter_messages')) ..context(context) - ..decoration(BoxDecoration(borderRadius: BorderRadius.circular(10), color: AppColor.colorButtonHeaderThread)) + ..decoration(const BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(10)), + color: AppColor.colorButtonHeaderThread)) ..paddingIcon(const EdgeInsets.only(right: 8)) ..size(16) ..padding(const EdgeInsets.symmetric(horizontal: 12, vertical: 8)) ..radiusSplash(10) ..textStyle(TextStyle( - fontSize: 12, - color: controller.filterMessageOption.value == FilterMessageOption.all - ? AppColor.colorTextButtonHeaderThread - : AppColor.colorNameEmail, - fontWeight: controller.filterMessageOption.value == FilterMessageOption.all - ? FontWeight.normal - : FontWeight.w500)) + fontSize: 12, + color: controller.filterMessageOption.value == FilterMessageOption.all + ? AppColor.colorTextButtonHeaderThread + : AppColor.colorNameEmail, + fontWeight: controller.filterMessageOption.value == FilterMessageOption.all + ? FontWeight.normal + : FontWeight.w500)) ..addIconAction(Padding( padding: const EdgeInsets.only(left: 8), child: SvgPicture.asset(imagePaths.icArrowDown, fit: BoxFit.fill))) - ..addOnPressActionWithPositionClick((position) => controller.openPopupMenuAction(context, position, - popupMenuFilterEmailActionTile(context, + ..addOnPressActionWithPositionClick((position) => + controller.openPopupMenuAction( + context, + position, + popupMenuFilterEmailActionTile( + context, controller.filterMessageOption.value, - (option) => controller.dispatchAction(FilterMessageAction(context, option))))) + (option) => controller.dispatchAction(FilterMessageAction(context, option)), + isSearchEmailRunning: searchController.isSearchEmailRunning + ) + ) + ) ..text(controller.filterMessageOption.value == FilterMessageOption.all ? AppLocalizations.of(context).filter_messages : controller.filterMessageOption.value.getTitle(context), isVertical: false)) diff --git a/lib/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart b/lib/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart index 2049254f7..7860c49ab 100644 --- a/lib/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart +++ b/lib/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart @@ -1,5 +1,6 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; @@ -8,25 +9,50 @@ import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option mixin FilterEmailPopupMenuMixin { final _imagePaths = Get.find(); - List popupMenuFilterEmailActionTile(BuildContext context, - FilterMessageOption optionSelected, Function(FilterMessageOption)? onCallBack) { + List popupMenuFilterEmailActionTile( + BuildContext context, + FilterMessageOption optionSelected, + Function(FilterMessageOption)? onCallBack, + { + bool isSearchEmailRunning = false + } + ) { return [ + if (!isSearchEmailRunning) + ...[ + PopupMenuItem( + padding: EdgeInsets.zero, + child: _filterEmailAction( + context, + optionSelected, + FilterMessageOption.attachments, + onCallBack)), + const PopupMenuDivider(height: 0.5) + ], PopupMenuItem( - padding: EdgeInsets.zero, - child: _filterEmailAction(context, optionSelected, FilterMessageOption.attachments, onCallBack)), + padding: EdgeInsets.zero, + child: _filterEmailAction( + context, + optionSelected, + FilterMessageOption.unread, + onCallBack)), const PopupMenuDivider(height: 0.5), PopupMenuItem( - padding: EdgeInsets.zero, - child: _filterEmailAction(context, optionSelected, FilterMessageOption.unread, onCallBack)), - const PopupMenuDivider(height: 0.5), - PopupMenuItem( - padding: EdgeInsets.zero, - child: _filterEmailAction(context, optionSelected, FilterMessageOption.starred, onCallBack)), + padding: EdgeInsets.zero, + child: _filterEmailAction( + context, + optionSelected, + FilterMessageOption.starred, + onCallBack)), ]; } - Widget _filterEmailAction(BuildContext context, FilterMessageOption optionSelected, - FilterMessageOption option, Function(FilterMessageOption)? onCallBack) { + Widget _filterEmailAction( + BuildContext context, + FilterMessageOption optionSelected, + FilterMessageOption option, + Function(FilterMessageOption)? onCallBack + ) { return InkWell( onTap: () => onCallBack?.call(option == optionSelected ? FilterMessageOption.all : option), child: Padding(