TF-1735 Fix filter not applied to search
(cherry picked from commit 9eb95386d2de383f83cfc3065e96855787918f44)
This commit is contained in:
+1
-4
@@ -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 = '';
|
||||
}
|
||||
|
||||
|
||||
+4
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user