TF-1735 Fix filter not applied to search

(cherry picked from commit 9eb95386d2de383f83cfc3065e96855787918f44)
This commit is contained in:
dab246
2023-05-04 15:58:43 +07:00
committed by Dat Vu
parent 94d066305a
commit 8b8655b3e3
6 changed files with 45 additions and 51 deletions
@@ -104,10 +104,7 @@ class AdvancedFilterController extends BaseController {
} }
if(lastTextForm.isNotEmpty && !searchController.searchEmailFilter.value.from.contains(lastTextForm.value)){ if(lastTextForm.isNotEmpty && !searchController.searchEmailFilter.value.from.contains(lastTextForm.value)){
searchController.updateFilterEmail( searchController.updateFilterEmail(fromOption: Some(searchController.searchEmailFilter.value.from..add(lastTextForm.value)));
from: searchController.searchEmailFilter.value.from..add(lastTextForm.value),
);
lastTextForm.value = ''; lastTextForm.value = '';
} }
@@ -529,7 +529,11 @@ class MailboxDashBoardController extends ReloadableController {
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE; bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
void searchEmail(BuildContext context, String value) { void searchEmail(BuildContext context, String value) {
log('MailboxDashBoardController::searchEmail():');
clearFilterMessageOption(); clearFilterMessageOption();
if (searchController.listFilterOnSuggestionForm.isNotEmpty) {
searchController.applyFilterSuggestionToSearchFilter(userProfile.value);
}
searchController.updateFilterEmail(text: SearchQuery(value)); searchController.updateFilterEmail(text: SearchQuery(value));
dispatchAction(StartSearchEmailAction()); dispatchAction(StartSearchEmailAction());
KeyboardUtils.hideKeyboard(context); KeyboardUtils.hideKeyboard(context);
@@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart'; import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -62,13 +61,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
this._getAllRecentSearchLatestInteractor, this._getAllRecentSearchLatestInteractor,
); );
@override void selectOpenAdvanceSearch() {
void onInit() {
_registerSearchFocusListener();
super.onInit();
}
selectOpenAdvanceSearch() {
isAdvancedSearchViewOpen.toggle(); isAdvancedSearchViewOpen.toggle();
} }
@@ -90,7 +83,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
isFilterSelected isFilterSelected
? searchEmailFilter.value.from.removeWhere((e) => e == userProfile.email) ? searchEmailFilter.value.from.removeWhere((e) => e == userProfile.email)
: searchEmailFilter.value.from.add(userProfile.email); : searchEmailFilter.value.from.add(userProfile.email);
updateFilterEmail(from: searchEmailFilter.value.from); updateFilterEmail(fromOption: Some(searchEmailFilter.value.from));
return; return;
} }
} }
@@ -152,8 +145,37 @@ class SearchController extends BaseController with DateRangePickerMixin {
: null; : null;
} }
void applyFilterSuggestionToSearchFilter(UserProfile? userProfile) {
final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days)
? EmailReceiveTimeType.last7Days
: EmailReceiveTimeType.allTime;
final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false;
var listFromAddress = searchEmailFilter.value.from;
if (userProfile != null) {
if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
listFromAddress.add(userProfile.email);
} else {
listFromAddress.remove(userProfile.email);
}
}
updateFilterEmail(
emailReceiveTimeType: receiveTime,
hasAttachment: hasAttachment,
fromOption: Some(listFromAddress)
);
clearFilterSuggestion();
}
void clearFilterSuggestion() {
listFilterOnSuggestionForm.clear();
}
void updateFilterEmail({ void updateFilterEmail({
Set<String>? from, Option<Set<String>>? fromOption,
Set<String>? to, Set<String>? to,
SearchQuery? text, SearchQuery? text,
Option<String>? subjectOption, Option<String>? subjectOption,
@@ -166,7 +188,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
Option<UTCDate>? endDateOption Option<UTCDate>? endDateOption
}) { }) {
searchEmailFilter.value = searchEmailFilter.value.copyWith( searchEmailFilter.value = searchEmailFilter.value.copyWith(
from: from, fromOption: fromOption,
to: to, to: to,
text: text, text: text,
subjectOption: subjectOption, subjectOption: subjectOption,
@@ -181,20 +203,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
searchEmailFilter.refresh(); searchEmailFilter.refresh();
} }
void _registerSearchFocusListener() {
searchFocus.addListener(() {
final hasFocus = searchFocus.hasFocus;
final query = searchEmailFilter.value.text?.value;
log('SearchController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
if (!hasFocus && (query == null || query.isEmpty) && advancedSearchIsActivated.isFalse) {
updateFilterEmail(text: SearchQuery.initial());
searchInputController.clear();
clearSearchFilter();
searchFocus.unfocus();
}
});
}
EmailReceiveTimeType get receiveTimeFiltered => searchEmailFilter.value.emailReceiveTimeType; EmailReceiveTimeType get receiveTimeFiltered => searchEmailFilter.value.emailReceiveTimeType;
DateTime? get startDateFiltered => searchEmailFilter.value.startDate?.value.toLocal(); DateTime? get startDateFiltered => searchEmailFilter.value.startDate?.value.toLocal();
@@ -217,31 +225,14 @@ class SearchController extends BaseController with DateRangePickerMixin {
} }
void clearTextSearch() { void clearTextSearch() {
updateFilterEmail(text: SearchQuery.initial());
searchInputController.clear(); searchInputController.clear();
searchFocus.requestFocus(); searchFocus.requestFocus();
} }
void onChangeTextSearch(String value) {
updateFilterEmail(text: SearchQuery(value));
}
void updateTextSearch(String value) { void updateTextSearch(String value) {
searchInputController.text = value; searchInputController.text = value;
} }
bool checkQuickSearchFilterSelected(QuickSearchFilter quickSearchFilter, UserProfile userProfile) {
switch (quickSearchFilter) {
case QuickSearchFilter.hasAttachment:
return searchEmailFilter.value.hasAttachment == true;
case QuickSearchFilter.last7Days:
return true;
case QuickSearchFilter.fromMe:
return searchEmailFilter.value.from.contains(userProfile.email) &&
searchEmailFilter.value.from.length == 1;
}
}
void saveRecentSearch(RecentSearch recentSearch) { void saveRecentSearch(RecentSearch recentSearch) {
consumeState(_saveRecentSearchInteractor.execute(recentSearch)); consumeState(_saveRecentSearchInteractor.execute(recentSearch));
} }
@@ -80,7 +80,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
if (controller.appInformation.value != null) { if (controller.appInformation.value != null) {
return Padding(padding: const EdgeInsets.only(top: 6), return Padding(padding: const EdgeInsets.only(top: 6),
child: Text( child: Text(
'v.${controller.appInformation.value!.version}', 'v${controller.appInformation.value!.version}',
textAlign: TextAlign.center, textAlign: TextAlign.center,
style: const TextStyle( style: const TextStyle(
fontSize: 13, fontSize: 13,
@@ -45,7 +45,7 @@ class SearchEmailFilter with EquatableMixin {
emailReceiveTimeType ?? EmailReceiveTimeType.allTime; emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
SearchEmailFilter copyWith({ SearchEmailFilter copyWith({
Set<String>? from, Option<Set<String>>? fromOption,
Set<String>? to, Set<String>? to,
SearchQuery? text, SearchQuery? text,
Option<String>? subjectOption, Option<String>? subjectOption,
@@ -58,7 +58,7 @@ class SearchEmailFilter with EquatableMixin {
Option<UTCDate>? endDateOption, Option<UTCDate>? endDateOption,
}) { }) {
return SearchEmailFilter( return SearchEmailFilter(
from: from ?? this.from, from: _getOptionParam(fromOption, from),
to: to ?? this.to, to: to ?? this.to,
text: text ?? this.text, text: text ?? this.text,
subject: _getOptionParam(subjectOption, subject), subject: _getOptionParam(subjectOption, subject),
@@ -69,7 +69,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
borderRadius: const BorderRadius.all(Radius.circular(16)), borderRadius: const BorderRadius.all(Radius.circular(16)),
constraints: BoxConstraints(maxWidth: maxWidth) constraints: BoxConstraints(maxWidth: maxWidth)
), ),
debounceDuration: const Duration(milliseconds: 500), debounceDuration: const Duration(milliseconds: 300),
listActionButton: QuickSearchFilter.values, listActionButton: QuickSearchFilter.values,
actionButtonBuilder: (context, filterAction) { actionButtonBuilder: (context, filterAction) {
if (filterAction is QuickSearchFilter) { if (filterAction is QuickSearchFilter) {
@@ -122,6 +122,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
if (query.isNotEmpty) { if (query.isNotEmpty) {
dashBoardController.searchController.saveRecentSearch(RecentSearch.now(query)); dashBoardController.searchController.saveRecentSearch(RecentSearch.now(query));
}
if (query.isNotEmpty || dashBoardController.searchController.listFilterOnSuggestionForm.isNotEmpty) {
dashBoardController.searchEmail(context, query); dashBoardController.searchEmail(context, query);
} else { } else {
dashBoardController.clearSearchEmail(); dashBoardController.clearSearchEmail();
@@ -179,7 +182,6 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
focusNode: controller.searchFocus, focusNode: controller.searchFocus,
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
onSubmitted: (keyword) => _invokeSearchEmailAction(context, keyword.trim()), onSubmitted: (keyword) => _invokeSearchEmailAction(context, keyword.trim()),
onChanged: controller.onChangeTextSearch,
decoration: InputDecoration( decoration: InputDecoration(
border: InputBorder.none, border: InputBorder.none,
focusedBorder: InputBorder.none, focusedBorder: InputBorder.none,