From b10b2200ff05b3929d58a32c31646aee1b6bfcf0 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 13 Sep 2024 09:08:46 +0700 Subject: [PATCH] TF-3002 [WEB] Add `Advanced Search` & `Clear filter` button in search filters --- .../presentation/action/dashboard_action.dart | 20 ++++++++++++++- .../advanced_filter_controller.dart | 5 ++++ .../mailbox_dashboard_controller.dart | 14 +++++++++++ .../controller/search_controller.dart | 13 ++++++++-- .../mailbox_dashboard_view_web.dart | 25 +++++++++++++++++-- 5 files changed, 72 insertions(+), 5 deletions(-) diff --git a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart index e9383ba80..ae20142cd 100644 --- a/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart +++ b/lib/features/mailbox_dashboard/presentation/action/dashboard_action.dart @@ -161,4 +161,22 @@ class SearchEmailByFromFieldsAction extends DashBoardAction { class CloseSearchEmailViewAction extends DashBoardAction {} -class CancelSelectionSearchEmailAction extends DashBoardAction {} \ No newline at end of file +class CancelSelectionSearchEmailAction extends DashBoardAction {} + +class OpenAdvancedSearchViewAction extends DashBoardAction { + final BuildContext context; + + OpenAdvancedSearchViewAction(this.context); + + @override + List get props => [context]; +} + +class ClearSearchFilterAppliedAction extends DashBoardAction { + final BuildContext context; + + ClearSearchFilterAppliedAction(this.context); + + @override + List get props => [context]; +} \ No newline at end of file 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 898a5b5a3..5b8295e07 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -83,6 +83,7 @@ class AdvancedFilterController extends BaseController { _resetAllToOriginalValue(); _clearAllTextFieldInput(); searchController.searchInputController.clear(); + searchController.clearSortOrder(); searchController.deactivateAdvancedSearch(); searchController.isAdvancedSearchViewOpen.value = false; _mailboxDashBoardController.searchEmail(context); @@ -421,6 +422,10 @@ class AdvancedFilterController extends BaseController { searchController.updateFilterEmail(fromOption: Some(listAddress)); _mailboxDashBoardController.dispatchAction(StartSearchEmailAction()); + } else if (action is OpenAdvancedSearchViewAction) { + initSearchFilterField(action.context); + } else if (action is ClearSearchFilterAppliedAction) { + clearSearchFilter(action.context); } } ); 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 d0e85765a..9c1de5809 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -2815,6 +2815,20 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo && selectedMailbox.value!.countTotalEmails <= 0; } + bool get isSearchFilterHasApplied { + return searchController.isSearchFilterHasApplied || + filterMessageOption.value != FilterMessageOption.all; + } + + void openAdvancedSearchView(BuildContext context) { + dispatchAction(OpenAdvancedSearchViewAction(context)); + searchController.openAdvanceSearch(); + } + + void clearAllSearchFilterApplied(BuildContext context) { + dispatchAction(ClearSearchFilterAppliedAction(context)); + } + @override void onClose() { if (PlatformInfo.isWeb) { diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index fb7f7d146..c584f7075 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -200,6 +200,15 @@ class SearchController extends BaseController with DateRangePickerMixin { bool get isSearchEmailRunning => simpleSearchIsActivated.isTrue || advancedSearchIsActivated.isTrue; + bool get isSearchFilterHasApplied { + return searchEmailFilter.value.from.isNotEmpty || + searchEmailFilter.value.to.isNotEmpty || + searchEmailFilter.value.emailReceiveTimeType != EmailReceiveTimeType.allTime || + (searchEmailFilter.value.mailbox != PresentationMailbox.unifiedMailbox && searchEmailFilter.value.mailbox != null) || + searchEmailFilter.value.hasAttachment == true || + sortOrderFiltered.value != EmailSortOrderType.mostRecent; + } + void enableSearch() { searchState.value = searchState.value.enableSearchState(); } @@ -263,7 +272,7 @@ class SearchController extends BaseController with DateRangePickerMixin { searchFocus.unfocus(); } - void _clearSortOrder() { + void clearSortOrder() { sortOrderFiltered.value = EmailSortOrderType.mostRecent; } @@ -272,7 +281,7 @@ class SearchController extends BaseController with DateRangePickerMixin { deactivateSimpleSearch(); hideSimpleSearchFormView(); - _clearSortOrder(); + clearSortOrder(); clearSearchFilter(); deactivateAdvancedSearch(); hideAdvancedSearchFormView(); 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 ca839eab0..4b0a94d32 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -441,7 +441,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded( + Flexible( child: SizedBox( height: 45, child: ScrollbarListView( @@ -469,12 +469,33 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { _buildQuickSearchFilterButton(context, QuickSearchFilter.dateTime), MailboxDashboardViewWebStyle.searchFilterSizeBoxMargin, _buildQuickSearchFilterButton(context, QuickSearchFilter.hasAttachment), - MailboxDashboardViewWebStyle.searchFilterSizeBoxMargin, ], ), ), ) ), + if (controller.isSearchFilterHasApplied) + TMailButtonWidget.fromText( + text: AppLocalizations.of(context).clearFilter, + backgroundColor: Colors.transparent, + margin: const EdgeInsetsDirectional.only(start: 8), + borderRadius: 10, + textStyle: const TextStyle( + color: AppColor.primaryColor, + fontSize: 13, + fontWeight: FontWeight.w500), + onTapActionCallback: () => controller.clearAllSearchFilterApplied(context)) + else + TMailButtonWidget.fromText( + text: AppLocalizations.of(context).advancedSearch, + backgroundColor: Colors.transparent, + margin: const EdgeInsetsDirectional.only(start: 8), + borderRadius: 10, + textStyle: const TextStyle( + color: AppColor.primaryColor, + fontSize: 13, + fontWeight: FontWeight.w500), + onTapActionCallback: () => controller.openAdvancedSearchView(context)) ] ), );