diff --git a/lib/features/destination_picker/presentation/destination_picker_view.dart b/lib/features/destination_picker/presentation/destination_picker_view.dart index f653ce96a..b1d9597e9 100644 --- a/lib/features/destination_picker/presentation/destination_picker_view.dart +++ b/lib/features/destination_picker/presentation/destination_picker_view.dart @@ -76,28 +76,35 @@ class DestinationPickerView extends GetWidget onTap: () => controller.closeDestinationPicker(), child: ResponsiveWidget( responsiveUtils: _responsiveUtils, - mobile: SizedBox(child: _buildBodyMailboxLocation(context, actions), width: double.infinity), + mobile: SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: double.infinity), landscapeMobile: Row(children: [ - SizedBox(child: _buildBodyMailboxLocation(context, actions), width: ResponsiveUtils.defaultSizeDrawer), + SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: ResponsiveUtils.defaultSizeDrawer), Expanded(child: Container(color: Colors.transparent)), ]), tablet: Row(children: [ Expanded(child: Container(color: Colors.transparent)), SizedBox( child: _buildBodyMailboxLocation(context, actions), - width: _responsiveUtils.getSizeScreenWidth(context) - ResponsiveUtils.defaultSizeDrawer), + width: _responsiveUtils.getSizeScreenWidth(context) - + ResponsiveUtils.defaultSizeDrawer), + ]), + landscapeTablet: Row(children: [ + Expanded(child: Container(color: Colors.transparent)), + SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: _responsiveUtils.getSizeScreenWidth(context) - + ResponsiveUtils.defaultSizeLeftMenuMobile), ]), tabletLarge: Row(children: [ Expanded(child: Container(color: Colors.transparent)), SizedBox( child: _buildBodyMailboxLocation(context, actions), - width: _responsiveUtils.getSizeScreenWidth(context) - ResponsiveUtils.defaultSizeDrawer), - ]), - desktop: Row(children: [ - Expanded(child: Container(color: Colors.transparent)), - SizedBox( - child: _buildBodyMailboxLocation(context, actions), - width: _responsiveUtils.getSizeScreenWidth(context) - ResponsiveUtils.defaultSizeDrawer), + width: _responsiveUtils.getSizeScreenWidth(context) - + ResponsiveUtils.defaultSizeLeftMenuMobile), ]), ), ) @@ -111,21 +118,31 @@ class DestinationPickerView extends GetWidget onTap: () => controller.closeDestinationPicker(), child: ResponsiveWidget( responsiveUtils: _responsiveUtils, - mobile: SizedBox(child: _buildBodyMailboxLocation(context, actions), width: double.infinity), + mobile: SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: double.infinity), landscapeMobile: Row(children: [ - SizedBox(child: _buildBodyMailboxLocation(context, actions), width: ResponsiveUtils.defaultSizeDrawer), + SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: ResponsiveUtils.defaultSizeDrawer), Expanded(child: Container(color: Colors.transparent)), ]), tablet: Row(children: [ - SizedBox(child: _buildBodyMailboxLocation(context, actions), width: ResponsiveUtils.defaultSizeDrawer), + SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: ResponsiveUtils.defaultSizeDrawer), + Expanded(child: Container(color: Colors.transparent)), + ]), + landscapeTablet: Row(children: [ + SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: ResponsiveUtils.defaultSizeLeftMenuMobile), Expanded(child: Container(color: Colors.transparent)), ]), tabletLarge: Row(children: [ - SizedBox(child: _buildBodyMailboxLocation(context, actions), width: ResponsiveUtils.defaultSizeDrawer), - Expanded(child: Container(color: Colors.transparent)), - ]), - desktop: Row(children: [ - SizedBox(child: _buildBodyMailboxLocation(context, actions), width: ResponsiveUtils.defaultSizeDrawer), + SizedBox( + child: _buildBodyMailboxLocation(context, actions), + width: ResponsiveUtils.defaultSizeLeftMenuMobile), Expanded(child: Container(color: Colors.transparent)), ]), ), @@ -158,30 +175,41 @@ class DestinationPickerView extends GetWidget onTap: () => {}, child: ClipRRect( borderRadius: BorderRadius.only( - topRight: Radius.circular( - !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context) - ? 14 : 0), - topLeft: Radius.circular( - !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context) - ? 14 : 0)), + topRight: Radius.circular(!BuildUtils.isWeb && + _responsiveUtils.isPortraitMobile(context) + ? 14 + : 0), + topLeft: Radius.circular(!BuildUtils.isWeb && + _responsiveUtils.isPortraitMobile(context) + ? 14 + : 0)), child: Container( color: Colors.white, child: Column(children: [ SafeArea( - left: !BuildUtils.isWeb && _responsiveUtils.isLandscapeMobile(context), + left: !BuildUtils.isWeb && + _responsiveUtils.isLandscapeMobile(context), right: false, bottom: false, child: _buildAppBar(context)), - const Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2), + const Divider( + color: AppColor.colorDividerMailbox, + height: 0.5, + thickness: 0.2), Obx(() => controller.isSearchActive() - ? SafeArea(bottom: false, top: false, right: false, child: _buildInputSearchFormWidget(context)) + ? SafeArea( + bottom: false, + top: false, + right: false, + child: _buildInputSearchFormWidget(context)) : const SizedBox.shrink()), Expanded(child: Container( - color: actions == MailboxActions.create ? AppColor.colorBgMailbox : Colors.white, + color: actions?.getBackgroundColor(), child: SafeArea( top: false, bottom: false, - left: !BuildUtils.isWeb && _responsiveUtils.isLandscapeMobile(context), + left: !BuildUtils.isWeb && + _responsiveUtils.isLandscapeMobile(context), right: false, child: _buildBodyDestinationPicker(context, actions)))) ]) @@ -192,16 +220,15 @@ class DestinationPickerView extends GetWidget } Widget _buildAppBar(BuildContext context) { - return Obx(() => (AppBarDestinationPickerBuilder(context, _imagePaths, controller.mailboxAction.value) - ..addCloseActionClick(() => controller.closeDestinationPicker())) - .build()); + return Obx(() => AppBarDestinationPickerBuilder( + controller.mailboxAction.value, + onCloseAction: () => controller.closeDestinationPicker())); } Widget _buildSearchBarWidget(BuildContext context) { return Padding( padding: EdgeInsets.only( - top: _responsiveUtils.isScreenWithShortestSide(context) && - !BuildUtils.isWeb ? 12 : 0, + top: !BuildUtils.isWeb ? 12 : 0, left: _responsiveUtils.isLandscapeMobile(context) && !BuildUtils.isWeb ? 0 : 16, right: 16), @@ -237,11 +264,31 @@ class DestinationPickerView extends GetWidget if (actions?.hasSearchActive() == true) _buildSearchBarWidget(context), _buildLoadingView(), - if (actions == MailboxActions.create && !BuildUtils.isWeb && _responsiveUtils.isScreenWithShortestSide(context)) + if (actions == MailboxActions.create && !BuildUtils.isWeb) const SizedBox(height: 12), if (actions?.hasAllMailboxDefault() == true) - _buildUnifiedMailbox(context, actions), - const SizedBox(height: 12), + ...[ + _buildUnifiedMailbox(context, actions), + const SizedBox(height: 12), + if (actions != MailboxActions.create && + ( + _responsiveUtils.isLandscapeMobile(context) || + _responsiveUtils.isPortraitMobile(context) || + _responsiveUtils.isTablet(context) || + _responsiveUtils.isLandscapeTablet(context) || + _responsiveUtils.isTabletLarge(context) + ) + && !BuildUtils.isWeb + ) + Padding( + padding: EdgeInsets.only( + left: _responsiveUtils.isLandscapeMobile(context) ? 40 : 55, + right: 20), + child: const Divider( + color: AppColor.lineItemListColor, + height: 0.5, + thickness: 0.2)), + ], Obx(() => controller.defaultMailboxHasChild ? _buildMailboxCategory(context, MailboxCategories.exchange, controller.defaultRootNode, actions) : const SizedBox.shrink()), @@ -393,10 +440,21 @@ class DestinationPickerView extends GetWidget borderRadius: const BorderRadius.all(Radius.circular(14)), child: Container( color: Colors.white, - margin: const EdgeInsets.only( - left: BuildUtils.isWeb ? 8 : 0, + margin: EdgeInsets.only( + left: BuildUtils.isWeb || + _responsiveUtils.isTablet(context) || + _responsiveUtils.isLandscapeTablet(context) || + _responsiveUtils.isTabletLarge(context) || + _responsiveUtils.isPortraitMobile(context) + ? 8 + : 0, top: 8), - padding: const EdgeInsets.only(left: 16, top: 16), + padding: EdgeInsets.only( + left: !BuildUtils.isWeb && + _responsiveUtils.isLandscapeMobile(context) + ? 8 + : 16, + top: 16), child: Row(children: [ SvgPicture.asset( _imagePaths.icFolderMailbox, diff --git a/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart b/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart index 415d752b8..c3ba06eae 100644 --- a/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart +++ b/lib/features/destination_picker/presentation/widgets/app_bar_destination_picker_builder.dart @@ -2,31 +2,27 @@ import 'package:core/core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:get/get.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; -typedef OnCloseActionClick = void Function(); +class AppBarDestinationPickerBuilder extends StatelessWidget { -class AppBarDestinationPickerBuilder { - OnCloseActionClick? _onCloseActionClick; - - final BuildContext _context; - final ImagePaths _imagePaths; final MailboxActions? _mailboxAction; + final VoidCallback? onCloseAction; - AppBarDestinationPickerBuilder( - this._context, - this._imagePaths, - this._mailboxAction, - ); + const AppBarDestinationPickerBuilder( + this._mailboxAction, + { + Key? key, + this.onCloseAction + } + ) : super(key: key); - void addCloseActionClick(OnCloseActionClick onCloseActionClick) { - _onCloseActionClick = onCloseActionClick; - } - - Widget build() { + @override + Widget build(BuildContext context) { + final imagePaths = Get.find(); return Container( - key: const Key('app_bar_destination_picker'), alignment: Alignment.center, decoration: const BoxDecoration( borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)), @@ -37,17 +33,28 @@ class AppBarDestinationPickerBuilder { child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - _buildBackButton(), - Expanded(child: _buildTitle()), - _buildCancelButton(), + _buildBackButton(context, imagePaths), + Expanded(child: Text( + _mailboxAction?.getTitle(context) ?? '', + maxLines: 1, + softWrap: CommonTextStyle.defaultSoftWrap, + overflow: CommonTextStyle.defaultTextOverFlow, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 20, + color: AppColor.colorNameEmail, + fontWeight: FontWeight.w700))), + _buildCancelButton(context), ] ) ) ); } - Widget _buildCancelButton() { - if (_mailboxAction == MailboxActions.moveEmail || _mailboxAction == MailboxActions.move) { + Widget _buildCancelButton(BuildContext context) { + if (_mailboxAction == MailboxActions.moveEmail || + _mailboxAction == MailboxActions.move || + _mailboxAction == MailboxActions.select) { return Padding( padding: const EdgeInsets.only(right: 12), child: Material( @@ -55,9 +62,11 @@ class AppBarDestinationPickerBuilder { color: Colors.transparent, child: TextButton( child: Text( - AppLocalizations.of(_context).cancel, - style: const TextStyle(fontSize: 17, color: AppColor.colorTextButton)), - onPressed: () => _onCloseActionClick?.call() + AppLocalizations.of(context).cancel, + style: const TextStyle( + fontSize: 17, + color: AppColor.colorTextButton)), + onPressed: () => onCloseAction?.call() ) )); } else { @@ -65,23 +74,16 @@ class AppBarDestinationPickerBuilder { } } - Widget _buildBackButton() { + Widget _buildBackButton(BuildContext context, ImagePaths imagePaths) { if (_mailboxAction == MailboxActions.create) { return buildIconWeb( - icon: SvgPicture.asset(_imagePaths.icBack, color: AppColor.colorTextButton, fit: BoxFit.fill), - onTap: () => _onCloseActionClick?.call()); + icon: SvgPicture.asset( + imagePaths.icBack, + color: AppColor.colorTextButton, + fit: BoxFit.fill), + onTap: () => onCloseAction?.call()); } else { - return const SizedBox(width: 100, height: 40); + return const SizedBox(width: 70, height: 40); } } - - Widget _buildTitle() { - return Text( - _mailboxAction?.getTitle(_context) ?? '', - maxLines: 1, - softWrap: CommonTextStyle.defaultSoftWrap, - overflow: CommonTextStyle.defaultTextOverFlow, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 20, color: AppColor.colorNameEmail, fontWeight: FontWeight.w700)); - } } \ No newline at end of file diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart index cc3d8cfcc..21bba1a1f 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_controller.dart @@ -140,8 +140,14 @@ class MailboxCreatorController extends BaseController { arguments: DestinationPickerArguments(accountId!, MailboxActions.create) ); - selectedMailbox.value = destinationMailbox; - _createListMailboxNameAsStringInMailboxLocation(); + if (destinationMailbox is PresentationMailbox) { + final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox + ? null + : destinationMailbox; + + selectedMailbox.value = mailboxDestination; + _createListMailboxNameAsStringInMailboxLocation(); + } } } diff --git a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart index 509752e35..cfb4632d6 100644 --- a/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart +++ b/lib/features/mailbox_creator/presentation/mailbox_creator_view.dart @@ -32,8 +32,12 @@ class MailboxCreatorView extends GetWidget { SizedBox(child: _buildBody(context), width: ResponsiveUtils.defaultSizeDrawer), Expanded(child: Container(color: Colors.transparent)), ]), + landscapeTablet: Row(children: [ + SizedBox(child: _buildBody(context), width: ResponsiveUtils.defaultSizeLeftMenuMobile), + Expanded(child: Container(color: Colors.transparent)), + ]), tabletLarge: Row(children: [ - SizedBox(child: _buildBody(context), width: ResponsiveUtils.defaultSizeDrawer), + SizedBox(child: _buildBody(context), width: ResponsiveUtils.defaultSizeLeftMenuMobile), Expanded(child: Container(color: Colors.transparent)), ]), desktop: Row(children: [ diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart index 05c042660..b89e7735e 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -111,23 +111,26 @@ class AdvancedFilterController extends GetxController { ); } - Future selectedMailBox() async { - final PresentationMailbox destinationMailbox = await push( + void selectedMailBox() async { + final destinationMailbox = await push( AppRoutes.DESTINATION_PICKER, arguments: DestinationPickerArguments( _mailboxDashBoardController.accountId.value!, MailboxActions.select)); - searchController.updateFilterEmail(mailbox: destinationMailbox); - mailBoxFilterInputController.text = - StringConvert.writeNullToEmpty(destinationMailbox.name?.name); + + if (destinationMailbox is PresentationMailbox) { + searchController.updateFilterEmail(mailbox: destinationMailbox); + mailBoxFilterInputController.text = + StringConvert.writeNullToEmpty(destinationMailbox.name?.name); + } } void applyAdvancedSearchFilter(BuildContext context) { _updateFilterEmailFromAdvancedSearchView(); + searchController.isAdvancedSearchHasApply.value = _checkAdvancedSearchHasApply(); + searchController.isAdvancedSearchViewOpen.toggle(); _mailboxDashBoardController.searchEmail( context, StringConvert.writeNullToEmpty(searchEmailFilter.text?.value)); - searchController.isAdvancedSearchViewOpen.toggle(); - searchController.isAdvancedSearchHasApply.value = _checkAdvancedSearchHasApply(); } void _checkContactPermission() async { diff --git a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart index 96e9ee56b..f5cec117f 100644 --- a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart @@ -67,7 +67,9 @@ class SearchEmailFilter { Filter mappingToEmailFilterCondition({Filter? moreFilterCondition}) { final emailEmailFilterConditionShared = EmailFilterCondition( text: text?.value, - inMailbox: mailbox?.id, + inMailbox: mailbox == PresentationMailbox.unifiedMailbox + ? null + : mailbox?.id, after: emailReceiveTimeType.toUTCDate(), hasAttachment: hasAttachment == false ? null : hasAttachment, subject: subject, diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart index 6c0915502..0d3f0981c 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form.dart @@ -71,9 +71,7 @@ class AdvancedSearchInputForm extends GetWidget currentFocusNode: controller.focusManager.mailboxFieldFocusNode, nextFocusNode: controller.focusManager.attachmentCheckboxFocusNode, mouseCursor: SystemMouseCursors.click, - onTap: () async { - await controller.selectedMailBox(); - }), + onTap: () => controller.selectedMailBox()), _buildFilterField( textEditingController: controller.dateFilterInputController, context: context,