TF-1155 Automatically clear value of From/To field when disable advanced search

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit 6f6e6970887525f3fbb9d0003eda8e1c5d41afa0)
This commit is contained in:
dab246
2023-11-08 14:50:26 +07:00
committed by Dat Vu
parent a0fede7b8f
commit 0c4fe85b69
6 changed files with 37 additions and 43 deletions
@@ -37,8 +37,6 @@ class AdvancedFilterController extends BaseController {
final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs; final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs;
final hasAttachment = false.obs; final hasAttachment = false.obs;
final lastTextForm = ''.obs;
final lastTextTo = ''.obs;
final startDate = Rxn<DateTime>(); final startDate = Rxn<DateTime>();
final endDate = Rxn<DateTime>(); final endDate = Rxn<DateTime>();
@@ -90,19 +88,13 @@ class AdvancedFilterController extends BaseController {
super.onReady(); super.onReady();
} }
void cleanSearchFilter(BuildContext context) { void clearSearchFilter(BuildContext context) {
searchController.clearSearchFilter(); searchController.clearSearchFilter();
_updateDateRangeTime(EmailReceiveTimeType.allTime); _resetAllToOriginalValue();
subjectFilterInputController.text = ''; _clearAllTextFieldInput();
hasKeyWordFilterInputController.text = '';
notKeyWordFilterInputController.text = '';
fromEmailAddressController.text = '';
toEmailAddressController.text = '';
hasAttachment.value = false;
_destinationMailboxSelected = null;
searchController.searchInputController.clear(); searchController.searchInputController.clear();
searchController.deactivateAdvancedSearch(); searchController.deactivateAdvancedSearch();
searchController.isAdvancedSearchViewOpen.toggle(); searchController.isAdvancedSearchViewOpen.value = false;
_mailboxDashBoardController.searchEmail(context); _mailboxDashBoardController.searchEmail(context);
} }
@@ -120,17 +112,17 @@ class AdvancedFilterController extends BaseController {
searchController.updateFilterEmail(notKeyword: {}); searchController.updateFilterEmail(notKeyword: {});
} }
if (lastTextForm.isNotEmpty && !searchController.searchEmailFilter.value.from.contains(lastTextForm.value)){ if (listFromEmailAddress.isNotEmpty) {
searchController.updateFilterEmail(fromOption: Some(searchController.searchEmailFilter.value.from..add(lastTextForm.value))); final listAddress = listFromEmailAddress.map((emailAddress) => emailAddress.emailAddress).toSet();
lastTextForm.value = ''; searchController.updateFilterEmail(fromOption: Some(listAddress));
} else {
searchController.updateFilterEmail(fromOption: const None());
} }
if (listToEmailAddress.isNotEmpty) {
if (lastTextTo.isNotEmpty && !searchController.searchEmailFilter.value.to.contains(lastTextTo.value)){ final listAddress = listToEmailAddress.map((emailAddress) => emailAddress.emailAddress).toSet();
searchController.updateFilterEmail( searchController.updateFilterEmail(toOption: Some(listAddress));
to: searchController.searchEmailFilter.value.to..add(lastTextTo.value), } else {
); searchController.updateFilterEmail(toOption: const None());
lastTextTo.value = '';
} }
searchController.updateFilterEmail( searchController.updateFilterEmail(
@@ -181,7 +173,7 @@ class AdvancedFilterController extends BaseController {
if (!isAdvancedSearchHasApplied) { if (!isAdvancedSearchHasApplied) {
searchController.updateFilterEmail(beforeOption: const None()); searchController.updateFilterEmail(beforeOption: const None());
} }
searchController.isAdvancedSearchViewOpen.toggle(); searchController.isAdvancedSearchViewOpen.value = false;
_mailboxDashBoardController.searchEmail(context); _mailboxDashBoardController.searchEmail(context);
} }
@@ -271,6 +263,12 @@ class AdvancedFilterController extends BaseController {
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(searchEmailFilter.mailbox?.getDisplayName(context)); mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(searchEmailFilter.mailbox?.getDisplayName(context));
} }
hasAttachment.value = searchEmailFilter.hasAttachment; hasAttachment.value = searchEmailFilter.hasAttachment;
if (searchEmailFilter.from.isEmpty) {
listFromEmailAddress.clear();
}
if (searchEmailFilter.to.isEmpty) {
listToEmailAddress.clear();
}
} }
void selectDateRange(BuildContext context) { void selectDateRange(BuildContext context) {
@@ -369,11 +367,9 @@ class AdvancedFilterController extends BaseController {
switch(field) { switch(field) {
case AdvancedSearchFilterField.from: case AdvancedSearchFilterField.from:
listFromEmailAddress = List.from(listEmailAddress); listFromEmailAddress = List.from(listEmailAddress);
searchEmailFilter.from.addAll(listEmailAddress.map((emailAddress) => emailAddress.emailAddress));
break; break;
case AdvancedSearchFilterField.to: case AdvancedSearchFilterField.to:
listToEmailAddress = List.from(listEmailAddress); listToEmailAddress = List.from(listEmailAddress);
searchEmailFilter.to.addAll(listEmailAddress.map((emailAddress) => emailAddress.emailAddress));
break; break;
default: default:
break; break;
@@ -420,12 +416,11 @@ class AdvancedFilterController extends BaseController {
} }
void _resetAllToOriginalValue() { void _resetAllToOriginalValue() {
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime; _updateDateRangeTime(EmailReceiveTimeType.allTime);
hasAttachment.value = false; hasAttachment.value = false;
lastTextForm.value = ''; listFromEmailAddress.clear();
lastTextTo.value = ''; listToEmailAddress.clear();
startDate.value = null; _destinationMailboxSelected = null;
endDate.value = null;
} }
void _clearAllTextFieldInput() { void _clearAllTextFieldInput() {
@@ -172,7 +172,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
void updateFilterEmail({ void updateFilterEmail({
Option<Set<String>>? fromOption, Option<Set<String>>? fromOption,
Set<String>? to, Option<Set<String>>? toOption,
SearchQuery? text, SearchQuery? text,
Option<String>? subjectOption, Option<String>? subjectOption,
Set<String>? notKeyword, Set<String>? notKeyword,
@@ -185,7 +185,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
}) { }) {
searchEmailFilter.value = searchEmailFilter.value.copyWith( searchEmailFilter.value = searchEmailFilter.value.copyWith(
fromOption: fromOption, fromOption: fromOption,
to: to, toOption: toOption,
text: text, text: text,
subjectOption: subjectOption, subjectOption: subjectOption,
notKeyword: notKeyword, notKeyword: notKeyword,
@@ -47,7 +47,7 @@ class SearchEmailFilter with EquatableMixin {
SearchEmailFilter copyWith({ SearchEmailFilter copyWith({
Option<Set<String>>? fromOption, Option<Set<String>>? fromOption,
Set<String>? to, Option<Set<String>>? toOption,
SearchQuery? text, SearchQuery? text,
Option<String>? subjectOption, Option<String>? subjectOption,
Set<String>? notKeyword, Set<String>? notKeyword,
@@ -60,7 +60,7 @@ class SearchEmailFilter with EquatableMixin {
}) { }) {
return SearchEmailFilter( return SearchEmailFilter(
from: _getOptionParam(fromOption, from), from: _getOptionParam(fromOption, from),
to: to ?? this.to, to: _getOptionParam(toOption, to),
text: text ?? this.text, text: text ?? this.text,
subject: _getOptionParam(subjectOption, subject), subject: _getOptionParam(subjectOption, subject),
notKeyword: notKeyword ?? this.notKeyword, notKeyword: notKeyword ?? this.notKeyword,
@@ -47,7 +47,7 @@ class AdvancedSearchFilterFormBottomView extends GetWidget<AdvancedFilterControl
Expanded( Expanded(
child: _buildButton( child: _buildButton(
onAction: () { onAction: () {
controller.cleanSearchFilter(context); controller.clearSearchFilter(context);
popBack(); popBack();
}, },
colorButton: Colors.white, colorButton: Colors.white,
@@ -79,7 +79,7 @@ class AdvancedSearchFilterFormBottomView extends GetWidget<AdvancedFilterControl
const Spacer(), const Spacer(),
_buildButton( _buildButton(
onAction: () { onAction: () {
controller.cleanSearchFilter(context); controller.clearSearchFilter(context);
popBack(); popBack();
}, },
colorButton: Colors.transparent, colorButton: Colors.transparent,
@@ -27,9 +27,9 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return FocusTraversalGroup( return FocusTraversalGroup(
child: Obx(() => Column( child: Column(
children: [ children: [
TextFieldAutocompleteEmailAddressWeb( Obx(() => TextFieldAutocompleteEmailAddressWeb(
field: AdvancedSearchFilterField.from, field: AdvancedSearchFilterField.from,
listEmailAddress: controller.listFromEmailAddress, listEmailAddress: controller.listFromEmailAddress,
expandMode: controller.fromAddressExpandMode.value, expandMode: controller.fromAddressExpandMode.value,
@@ -40,8 +40,8 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
onShowFullListEmailAddressAction: controller.showFullEmailAddress, onShowFullListEmailAddressAction: controller.showFullEmailAddress,
onUpdateListEmailAddressAction: controller.updateListEmailAddress, onUpdateListEmailAddressAction: controller.updateListEmailAddress,
onSuggestionEmailAddress: controller.getAutoCompleteSuggestion, onSuggestionEmailAddress: controller.getAutoCompleteSuggestion,
), )),
TextFieldAutocompleteEmailAddressWeb( Obx(() => TextFieldAutocompleteEmailAddressWeb(
field: AdvancedSearchFilterField.to, field: AdvancedSearchFilterField.to,
listEmailAddress: controller.listToEmailAddress, listEmailAddress: controller.listToEmailAddress,
expandMode: controller.toAddressExpandMode.value, expandMode: controller.toAddressExpandMode.value,
@@ -52,7 +52,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
onShowFullListEmailAddressAction: controller.showFullEmailAddress, onShowFullListEmailAddressAction: controller.showFullEmailAddress,
onUpdateListEmailAddressAction: controller.updateListEmailAddress, onUpdateListEmailAddressAction: controller.updateListEmailAddress,
onSuggestionEmailAddress: controller.getAutoCompleteSuggestion, onSuggestionEmailAddress: controller.getAutoCompleteSuggestion,
), )),
_buildFilterField( _buildFilterField(
textEditingController: controller.subjectFilterInputController, textEditingController: controller.subjectFilterInputController,
context: context, context: context,
@@ -109,7 +109,7 @@ class AdvancedSearchInputForm extends GetWidget<AdvancedFilterController>
]), ]),
AdvancedSearchFilterFormBottomView(focusManager: controller.focusManager) AdvancedSearchFilterFormBottomView(focusManager: controller.focusManager)
], ],
)), ),
); );
} }
@@ -110,7 +110,6 @@ class _TextFieldAutocompleteEmailAddressWebState extends State<TextFieldAutocomp
textInputAction: TextInputAction.done, textInputAction: TextInputAction.done,
debounceDuration: TextFieldAutoCompleteEmailAddressWebStyles.debounceDuration, debounceDuration: TextFieldAutoCompleteEmailAddressWebStyles.debounceDuration,
hasAddButton: false, hasAddButton: false,
autofocus: widget.field == AdvancedSearchFilterField.from && _currentListEmailAddress.isEmpty,
inputDecoration: InputDecoration( inputDecoration: InputDecoration(
filled: true, filled: true,
fillColor: TextFieldAutoCompleteEmailAddressWebStyles.textInputFillColor, fillColor: TextFieldAutoCompleteEmailAddressWebStyles.textInputFillColor,