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 5998c2d86..ef3cee9eb 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -201,12 +201,6 @@ class AdvancedFilterController extends GetxController { hasAttachment.value = searchEmailFilter.hasAttachment; } - @override - void onDone() {} - - @override - void onError(error) {} - @override void onClose() { subjectFilterInputController.dispose(); diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 4e65aacbe..05eb6d0e2 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -272,7 +272,6 @@ class MailboxDashBoardController extends ReloadableController { _closeEmailDetailedView(); } if (value.isEmpty){ - searchController.disableSearch(); searchController.setEmailReceiveTimeType(null); } } diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index 99ada3bec..049f558a5 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -147,7 +147,7 @@ class SearchController extends BaseController { if (!hasFocus && (query == null || query.isEmpty) && isAdvancedSearchHasApply.isFalse) { updateFilterEmail(text: SearchQuery.initial()); searchInputController.clear(); - cleanSearchFilter(); + cleanSearchFilter(); searchFocus.unfocus(); } }); diff --git a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart index e986f02d9..7e0d19c04 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_form_bottom_view.dart @@ -36,6 +36,8 @@ class AdvancedSearchFilterFormBottomView colorButton: Colors.transparent, colorText: AppColor.colorMessageConfirmDialog, text: AppLocalizations.of(context).clearFilter, + context: context, + responsiveUtils: _responsiveUtils, ), const SizedBox(width: 12), _buildButton( @@ -46,6 +48,8 @@ class AdvancedSearchFilterFormBottomView colorButton: AppColor.primaryColor, colorText: AppColor.primaryLightColor, text: AppLocalizations.of(context).search, + context: context, + responsiveUtils: _responsiveUtils, ), ], ), @@ -73,6 +77,8 @@ class AdvancedSearchFilterFormBottomView required Color colorText, required String text, required VoidCallback onAction, + required BuildContext context, + required ResponsiveUtils responsiveUtils, }) { return InkWell( onTap: onAction, @@ -81,7 +87,8 @@ class AdvancedSearchFilterFormBottomView }, child: Container( height: 44, - constraints: const BoxConstraints(maxWidth: 144), + padding: const EdgeInsets.symmetric(horizontal: 26), + constraints: BoxConstraints(maxWidth: responsiveUtils.isMobile(context) ? double.infinity : 144), alignment: Alignment.center, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: colorButton), diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 2fb2c6caa..88f982c56 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -866,7 +866,7 @@ class ThreadController extends BaseController { limit: ThreadConstants.defaultLimit, sort: _sortOrder, filter: EmailFilterCondition( - text: searchQuery!.value, + text: searchQuery?.value, before: emailList.last.receivedAt), properties: ThreadConstants.propertiesDefault, lastEmailId: emailList.last.id diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index ab1bda11f..3d8155c8c 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -44,94 +44,96 @@ class ThreadView extends GetWidget with AppLoaderMixin, backgroundColor: BuildUtils.isWeb && _responsiveUtils.isDesktop(context) ? AppColor.colorBgDesktop : Colors.white, - body: Row(children: [ - if ((!BuildUtils.isWeb && _responsiveUtils.isDesktop(context) && _responsiveUtils.isTabletLarge(context)) - || (BuildUtils.isWeb && _responsiveUtils.isTabletLarge(context))) - const VerticalDivider(color: AppColor.lineItemListColor, width: 1, thickness: 0.2), - Expanded(child: SafeArea( - right: _responsiveUtils.isLandscapeMobile(context), - left: _responsiveUtils.isLandscapeMobile(context), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if ((!_responsiveUtils.isDesktop(context) && BuildUtils.isWeb) || !BuildUtils.isWeb) - ... [ - _buildAppBarNormal(context), - Obx(() { - return Stack(children: [ - if (!controller.isSearchActive()) - Container( - color: Colors.white, - padding: EdgeInsets.symmetric( - horizontal: 16, - vertical: BuildUtils.isWeb && !_responsiveUtils.isDesktop(context) ? 8 : 0), - margin: const EdgeInsets.only( - bottom: !BuildUtils.isWeb ? 16 : 0), - child: _buildSearchFormInActive(context)) - else - Container( - color: Colors.white, - padding: EdgeInsets.symmetric( - horizontal: 8, - vertical: BuildUtils.isWeb && !_responsiveUtils.isDesktop(context) ? 8 : 0), - margin: const EdgeInsets.only( - bottom: !BuildUtils.isWeb ? 16 : 0), - child: _buildSearchFormActive(context)) - ]); - }) - ] - else - const SizedBox.shrink(), - Obx(() { - if (controller.isMailboxTrash - && controller.emailList.isNotEmpty - && !controller.isSearchActive()) { - return _buildEmptyTrashButton(context); - } else { - return const SizedBox.shrink(); - } - }), - Obx(() { - if (controller.isSearchActive() - && controller.searchIsActive.isTrue - && _responsiveUtils.isDesktop(context) - && BuildUtils.isWeb) { - return _buildListButtonQuickSearchFilter(context); - } else { - return const SizedBox.shrink(); - } - }), - Expanded(child: Container( - alignment: Alignment.center, - margin: BuildUtils.isWeb && _responsiveUtils.isDesktop(context) - ? const EdgeInsets.only(right: 16, top: 16, bottom: 16) - : EdgeInsets.zero, - decoration: BoxDecoration( - borderRadius: BuildUtils.isWeb && _responsiveUtils.isDesktop(context) - ? BorderRadius.circular(20) - : null, - border: BuildUtils.isWeb && _responsiveUtils.isDesktop(context) - ? Border.all(color: AppColor.colorBorderBodyThread, width: 1) - : null, - color: Colors.white), - child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular( - BuildUtils.isWeb && _responsiveUtils.isDesktop(context) ? 20 : 0)), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _buildLoadingView(), - Expanded(child: _buildListEmail(context)), - _buildLoadingViewLoadMore(), - ] - ), - ) - )), - _buildListButtonSelectionForMobile(context), - ] - ) - )) - ]), + body: Portal( + child: Row(children: [ + if ((!BuildUtils.isWeb && _responsiveUtils.isDesktop(context) && _responsiveUtils.isTabletLarge(context)) + || (BuildUtils.isWeb && _responsiveUtils.isTabletLarge(context))) + const VerticalDivider(color: AppColor.lineItemListColor, width: 1, thickness: 0.2), + Expanded(child: SafeArea( + right: _responsiveUtils.isLandscapeMobile(context), + left: _responsiveUtils.isLandscapeMobile(context), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if ((!_responsiveUtils.isDesktop(context) && BuildUtils.isWeb) || !BuildUtils.isWeb) + ... [ + _buildAppBarNormal(context), + Obx(() { + return Stack(children: [ + if (!controller.isSearchActive()) + Container( + color: Colors.white, + padding: EdgeInsets.symmetric( + horizontal: 16, + vertical: BuildUtils.isWeb && !_responsiveUtils.isDesktop(context) ? 8 : 0), + margin: const EdgeInsets.only( + bottom: !BuildUtils.isWeb ? 16 : 0), + child: _buildSearchFormInActive(context)) + else + Container( + color: Colors.white, + padding: EdgeInsets.symmetric( + horizontal: 8, + vertical: BuildUtils.isWeb && !_responsiveUtils.isDesktop(context) ? 8 : 0), + margin: const EdgeInsets.only( + bottom: !BuildUtils.isWeb ? 16 : 0), + child: _buildSearchFormActive(context)) + ]); + }) + ] + else + const SizedBox.shrink(), + Obx(() { + if (controller.isMailboxTrash + && controller.emailList.isNotEmpty + && !controller.isSearchActive()) { + return _buildEmptyTrashButton(context); + } else { + return const SizedBox.shrink(); + } + }), + Obx(() { + if (controller.isSearchActive() + && controller.searchIsActive.isTrue + && _responsiveUtils.isDesktop(context) + && BuildUtils.isWeb) { + return _buildListButtonQuickSearchFilter(context); + } else { + return const SizedBox.shrink(); + } + }), + Expanded(child: Container( + alignment: Alignment.center, + margin: BuildUtils.isWeb && _responsiveUtils.isDesktop(context) + ? const EdgeInsets.only(right: 16, top: 16, bottom: 16) + : EdgeInsets.zero, + decoration: BoxDecoration( + borderRadius: BuildUtils.isWeb && _responsiveUtils.isDesktop(context) + ? BorderRadius.circular(20) + : null, + border: BuildUtils.isWeb && _responsiveUtils.isDesktop(context) + ? Border.all(color: AppColor.colorBorderBodyThread, width: 1) + : null, + color: Colors.white), + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular( + BuildUtils.isWeb && _responsiveUtils.isDesktop(context) ? 20 : 0)), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildLoadingView(), + Expanded(child: _buildListEmail(context)), + _buildLoadingViewLoadMore(), + ] + ), + ) + )), + _buildListButtonSelectionForMobile(context), + ] + ) + )) + ]), + ), floatingActionButton: _buildFloatingButtonCompose(context), ), ); diff --git a/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.mocks.dart b/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.mocks.dart index 12f294734..dc82f464a 100644 --- a/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.mocks.dart +++ b/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.2.0 from annotations +// Mocks generated by Mockito 5.0.17 from annotations // in tmail_ui_user/test/features/thread/domain/usecases/get_emails_in_mailbox_interactor_test.dart. // Do not manually edit this file. @@ -24,7 +24,6 @@ import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dar import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart' as _i2; -// ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values // ignore_for_file: avoid_setters_without_getters // ignore_for_file: comment_references diff --git a/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.mocks.dart b/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.mocks.dart index 824dfe96a..b2a94e9d3 100644 --- a/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.mocks.dart +++ b/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.mocks.dart @@ -1,4 +1,4 @@ -// Mocks generated by Mockito 5.2.0 from annotations +// Mocks generated by Mockito 5.0.17 from annotations // in tmail_ui_user/test/features/thread/domain/usecases/refresh_changes_emails_in_mailbox_interactor_test.dart. // Do not manually edit this file. @@ -24,7 +24,6 @@ import 'package:tmail_ui_user/features/thread/domain/model/get_email_request.dar import 'package:tmail_ui_user/features/thread/domain/repository/thread_repository.dart' as _i2; -// ignore_for_file: type=lint // ignore_for_file: avoid_redundant_argument_values // ignore_for_file: avoid_setters_without_getters // ignore_for_file: comment_references