TF-3002 [WEB] Add Advanced Search & Clear filter button in search filters

This commit is contained in:
dab246
2024-09-13 09:08:46 +07:00
committed by Dat H. Pham
parent e6eeabedee
commit b10b2200ff
5 changed files with 72 additions and 5 deletions
@@ -161,4 +161,22 @@ class SearchEmailByFromFieldsAction extends DashBoardAction {
class CloseSearchEmailViewAction extends DashBoardAction {} class CloseSearchEmailViewAction extends DashBoardAction {}
class CancelSelectionSearchEmailAction extends DashBoardAction {} class CancelSelectionSearchEmailAction extends DashBoardAction {}
class OpenAdvancedSearchViewAction extends DashBoardAction {
final BuildContext context;
OpenAdvancedSearchViewAction(this.context);
@override
List<Object?> get props => [context];
}
class ClearSearchFilterAppliedAction extends DashBoardAction {
final BuildContext context;
ClearSearchFilterAppliedAction(this.context);
@override
List<Object?> get props => [context];
}
@@ -83,6 +83,7 @@ class AdvancedFilterController extends BaseController {
_resetAllToOriginalValue(); _resetAllToOriginalValue();
_clearAllTextFieldInput(); _clearAllTextFieldInput();
searchController.searchInputController.clear(); searchController.searchInputController.clear();
searchController.clearSortOrder();
searchController.deactivateAdvancedSearch(); searchController.deactivateAdvancedSearch();
searchController.isAdvancedSearchViewOpen.value = false; searchController.isAdvancedSearchViewOpen.value = false;
_mailboxDashBoardController.searchEmail(context); _mailboxDashBoardController.searchEmail(context);
@@ -421,6 +422,10 @@ class AdvancedFilterController extends BaseController {
searchController.updateFilterEmail(fromOption: Some(listAddress)); searchController.updateFilterEmail(fromOption: Some(listAddress));
_mailboxDashBoardController.dispatchAction(StartSearchEmailAction()); _mailboxDashBoardController.dispatchAction(StartSearchEmailAction());
} else if (action is OpenAdvancedSearchViewAction) {
initSearchFilterField(action.context);
} else if (action is ClearSearchFilterAppliedAction) {
clearSearchFilter(action.context);
} }
} }
); );
@@ -2815,6 +2815,20 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
&& selectedMailbox.value!.countTotalEmails <= 0; && 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 @override
void onClose() { void onClose() {
if (PlatformInfo.isWeb) { if (PlatformInfo.isWeb) {
@@ -200,6 +200,15 @@ class SearchController extends BaseController with DateRangePickerMixin {
bool get isSearchEmailRunning => simpleSearchIsActivated.isTrue || advancedSearchIsActivated.isTrue; 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() { void enableSearch() {
searchState.value = searchState.value.enableSearchState(); searchState.value = searchState.value.enableSearchState();
} }
@@ -263,7 +272,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
searchFocus.unfocus(); searchFocus.unfocus();
} }
void _clearSortOrder() { void clearSortOrder() {
sortOrderFiltered.value = EmailSortOrderType.mostRecent; sortOrderFiltered.value = EmailSortOrderType.mostRecent;
} }
@@ -272,7 +281,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
deactivateSimpleSearch(); deactivateSimpleSearch();
hideSimpleSearchFormView(); hideSimpleSearchFormView();
_clearSortOrder(); clearSortOrder();
clearSearchFilter(); clearSearchFilter();
deactivateAdvancedSearch(); deactivateAdvancedSearch();
hideAdvancedSearchFormView(); hideAdvancedSearchFormView();
@@ -441,7 +441,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Expanded( Flexible(
child: SizedBox( child: SizedBox(
height: 45, height: 45,
child: ScrollbarListView( child: ScrollbarListView(
@@ -469,12 +469,33 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
_buildQuickSearchFilterButton(context, QuickSearchFilter.dateTime), _buildQuickSearchFilterButton(context, QuickSearchFilter.dateTime),
MailboxDashboardViewWebStyle.searchFilterSizeBoxMargin, MailboxDashboardViewWebStyle.searchFilterSizeBoxMargin,
_buildQuickSearchFilterButton(context, QuickSearchFilter.hasAttachment), _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))
] ]
), ),
); );