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)){
searchController.updateFilterEmail(
from: searchController.searchEmailFilter.value.from..add(lastTextForm.value),
);
searchController.updateFilterEmail(fromOption: Some(searchController.searchEmailFilter.value.from..add(lastTextForm.value)));
lastTextForm.value = '';
}
@@ -529,7 +529,11 @@ class MailboxDashBoardController extends ReloadableController {
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
void searchEmail(BuildContext context, String value) {
log('MailboxDashBoardController::searchEmail():');
clearFilterMessageOption();
if (searchController.listFilterOnSuggestionForm.isNotEmpty) {
searchController.applyFilterSuggestionToSearchFilter(userProfile.value);
}
searchController.updateFilterEmail(text: SearchQuery(value));
dispatchAction(StartSearchEmailAction());
KeyboardUtils.hideKeyboard(context);
@@ -1,7 +1,6 @@
import 'dart:async';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -62,13 +61,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
this._getAllRecentSearchLatestInteractor,
);
@override
void onInit() {
_registerSearchFocusListener();
super.onInit();
}
selectOpenAdvanceSearch() {
void selectOpenAdvanceSearch() {
isAdvancedSearchViewOpen.toggle();
}
@@ -90,7 +83,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
isFilterSelected
? searchEmailFilter.value.from.removeWhere((e) => e == userProfile.email)
: searchEmailFilter.value.from.add(userProfile.email);
updateFilterEmail(from: searchEmailFilter.value.from);
updateFilterEmail(fromOption: Some(searchEmailFilter.value.from));
return;
}
}
@@ -152,8 +145,37 @@ class SearchController extends BaseController with DateRangePickerMixin {
: 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({
Set<String>? from,
Option<Set<String>>? fromOption,
Set<String>? to,
SearchQuery? text,
Option<String>? subjectOption,
@@ -166,7 +188,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
Option<UTCDate>? endDateOption
}) {
searchEmailFilter.value = searchEmailFilter.value.copyWith(
from: from,
fromOption: fromOption,
to: to,
text: text,
subjectOption: subjectOption,
@@ -181,20 +203,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
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;
DateTime? get startDateFiltered => searchEmailFilter.value.startDate?.value.toLocal();
@@ -217,31 +225,14 @@ class SearchController extends BaseController with DateRangePickerMixin {
}
void clearTextSearch() {
updateFilterEmail(text: SearchQuery.initial());
searchInputController.clear();
searchFocus.requestFocus();
}
void onChangeTextSearch(String value) {
updateFilterEmail(text: SearchQuery(value));
}
void updateTextSearch(String 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) {
consumeState(_saveRecentSearchInteractor.execute(recentSearch));
}
@@ -80,7 +80,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
if (controller.appInformation.value != null) {
return Padding(padding: const EdgeInsets.only(top: 6),
child: Text(
'v.${controller.appInformation.value!.version}',
'v${controller.appInformation.value!.version}',
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 13,
@@ -45,7 +45,7 @@ class SearchEmailFilter with EquatableMixin {
emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
SearchEmailFilter copyWith({
Set<String>? from,
Option<Set<String>>? fromOption,
Set<String>? to,
SearchQuery? text,
Option<String>? subjectOption,
@@ -58,7 +58,7 @@ class SearchEmailFilter with EquatableMixin {
Option<UTCDate>? endDateOption,
}) {
return SearchEmailFilter(
from: from ?? this.from,
from: _getOptionParam(fromOption, from),
to: to ?? this.to,
text: text ?? this.text,
subject: _getOptionParam(subjectOption, subject),
@@ -69,7 +69,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
borderRadius: const BorderRadius.all(Radius.circular(16)),
constraints: BoxConstraints(maxWidth: maxWidth)
),
debounceDuration: const Duration(milliseconds: 500),
debounceDuration: const Duration(milliseconds: 300),
listActionButton: QuickSearchFilter.values,
actionButtonBuilder: (context, filterAction) {
if (filterAction is QuickSearchFilter) {
@@ -122,6 +122,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
if (query.isNotEmpty) {
dashBoardController.searchController.saveRecentSearch(RecentSearch.now(query));
}
if (query.isNotEmpty || dashBoardController.searchController.listFilterOnSuggestionForm.isNotEmpty) {
dashBoardController.searchEmail(context, query);
} else {
dashBoardController.clearSearchEmail();
@@ -179,7 +182,6 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
focusNode: controller.searchFocus,
textInputAction: TextInputAction.done,
onSubmitted: (keyword) => _invokeSearchEmailAction(context, keyword.trim()),
onChanged: controller.onChangeTextSearch,
decoration: InputDecoration(
border: InputBorder.none,
focusedBorder: InputBorder.none,