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)){
|
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 = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user