able filter message option after using advanced search

This commit is contained in:
ManhNTX
2022-06-27 02:46:38 +07:00
committed by Dat H. Pham
parent 9ea8fc1cb8
commit 7ca8b83822
9 changed files with 52 additions and 33 deletions
@@ -35,7 +35,7 @@ class AdvancedFilterController extends BaseController {
_searchController.isAdvancedSearchViewOpen.toggle();
}
cleanSearchFilter() {
cleanSearchFilter(BuildContext context) {
_searchController.cleanSearchFilter();
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime;
fromFilterInputController.text = '';
@@ -45,22 +45,31 @@ class AdvancedFilterController extends BaseController {
notKeyWordFilterInputController.text = '';
dateFilterInputController.text = '';
hasAttachment.value = false;
_searchController.isAdvancedSearchHasApply.isFalse;
_searchController.isAdvancedSearchHasApply.value = false;
_searchController.isAdvancedSearchViewOpen.toggle();
_mailboxDashBoardController.searchEmail(context, StringConvert.writeNullToEmpty(_searchEmailFilter.text?.value));
}
void _updateFilterEmailFromAdvancedSearchView() {
if (fromFilterInputController.text.isNotEmpty) {
_searchController.updateFilterEmail(from: fromFilterInputController.text.split(',').toSet());
} else {
_searchController.updateFilterEmail(from: {});
}
if (toFilterInputController.text.isNotEmpty) {
_searchController.updateFilterEmail(to: toFilterInputController.text.split(',').toSet());
} else {
_searchController.updateFilterEmail(to: {});
}
if (hasKeyWordFilterInputController.text.isNotEmpty) {
_searchController.updateFilterEmail(hasKeyword: hasKeyWordFilterInputController.text.split(',').toSet());
} else {
_searchController.updateFilterEmail(hasKeyword: {});
}
if (notKeyWordFilterInputController.text.isNotEmpty) {
_searchController.updateFilterEmail(notKeyword: notKeyWordFilterInputController.text.split(',').toSet());
} else {
_searchController.updateFilterEmail(notKeyword: {});
}
_searchController.updateFilterEmail(
@@ -93,7 +102,7 @@ class AdvancedFilterController extends BaseController {
notKeyWordFilterInputController.text.isNotEmpty ||
dateFilterInputController.text.isNotEmpty ||
mailBoxFilterInputController.text.isNotEmpty ||
hasAttachment.isFalse;
hasAttachment.isTrue;
}
initSearchFilterField(BuildContext context) {
@@ -201,7 +201,6 @@ class MailboxDashBoardController extends ReloadableController {
void _getUserProfile() async {
userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null;
searchController.userProfile.value = userProfile.value;
}
void _setSessionCurrent() {
@@ -210,7 +209,6 @@ class MailboxDashBoardController extends ReloadableController {
if (arguments is Session) {
sessionCurrent = arguments;
accountId.value = sessionCurrent?.accounts.keys.first;
searchController.accountId.value = accountId.value;
} else {
if (kIsWeb) {
reload();
@@ -382,7 +380,6 @@ class MailboxDashBoardController extends ReloadableController {
void handleReloaded(Session session) {
sessionCurrent = session;
accountId.value = sessionCurrent?.accounts.keys.first;
searchController.accountId.value = accountId.value;
_getUserProfile();
}
@@ -35,8 +35,6 @@ class SearchController extends BaseController {
final searchInputController = TextEditingController();
final searchEmailFilter = SearchEmailFilter().obs;
final searchState = SearchState.initial().obs;
final accountId = Rxn<AccountId>();
final userProfile = Rxn<UserProfile>();
final isAdvancedSearchViewOpen = false.obs;
final isAdvancedSearchHasApply = false.obs;
final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs;
@@ -29,8 +29,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
MailboxDashBoardView({Key? key}) : super(key: key);
final SearchController searchController = Get.find<SearchController>();
final SearchController searchController = Get.find<SearchController>();
@override
Widget build(BuildContext context) {
if (controller.isDrawerOpen && (responsiveUtils.isDesktop(context)
@@ -417,7 +417,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
color: AppColor.colorBgSearchBar),
height: 45,
child: PortalTarget(
visible: controller.searchController.isAdvancedSearchViewOpen.isTrue,
visible: searchController.isAdvancedSearchViewOpen.isTrue,
anchor: const Aligned(
follower: Alignment.topLeft,
target: Alignment.bottomLeft,
@@ -431,10 +431,10 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
portalFollower:const AdvancedSearchFilterOverlay(),
child: QuickSearchInputForm<PresentationEmail, RecentSearch>(
textFieldConfiguration: QuickSearchTextFieldConfiguration(
controller: controller.searchController.searchInputController,
controller: searchController.searchInputController,
autofocus: true,
enabled: controller.searchController.isAdvancedSearchViewOpen.isFalse,
focusNode: controller.searchController.searchFocus,
enabled: searchController.isAdvancedSearchViewOpen.isFalse,
focusNode: searchController.searchFocus,
textInputAction: TextInputAction.done,
onSubmitted: (keyword) {
if (keyword.trim().isNotEmpty) {
@@ -444,7 +444,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
},
onChanged: (query) {
log('MailboxDashBoardView::_buildSearchForm(): onChanged: $query');
controller.searchController.onChangeTextSearch(query);
searchController.onChangeTextSearch(query);
},
decoration: InputDecoration(
border: InputBorder.none,
@@ -466,9 +466,9 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
height: 16,
fit: BoxFit.fill),
onTap: () {
final keyword = controller.searchController.searchInputController.text;
final keyword = searchController.searchInputController.text;
if (keyword.trim().isNotEmpty) {
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
searchController.saveRecentSearch(RecentSearch.now(keyword));
}
controller.searchEmail(context, keyword);
}),
@@ -479,7 +479,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
height: 16,
fit: BoxFit.fill),
onTap: () {
controller.searchController.clearTextSearch();
searchController.clearTextSearch();
}),
rightButton: IconOpenAdvancedSearchWidget(context)
),
@@ -505,7 +505,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
},
buttonActionCallback: (filterAction) {
if (filterAction is QuickSearchFilter) {
controller.searchController.selectQuickSearchFilter(
controller.selectQuickSearchFilter(
quickSearchFilter: filterAction,
fromSuggestionBox: true,
);
@@ -529,7 +529,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return InkWell(
onTap: () {
if (keyword.trim().isNotEmpty) {
controller.searchController.saveRecentSearch(RecentSearch.now(keyword));
searchController.saveRecentSearch(RecentSearch.now(keyword));
}
controller.searchEmail(context, keyword);
},
@@ -561,17 +561,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
child: loadingWidget,
),
fetchRecentActionCallback: (pattern) async {
return controller.searchController.getAllRecentSearchAction(pattern);
return searchController.getAllRecentSearchAction(pattern);
},
itemRecentBuilder: (context, recent) {
return RecentSearchItemTileWidget(recent);
},
onRecentSelected: (recent) {
controller.searchController.searchInputController.text = recent.value;
searchController.searchInputController.text = recent.value;
controller.searchEmail(context, recent.value);
},
suggestionsCallback: (pattern) async {
return controller.searchController.quickSearchEmails();
return controller.quickSearchEmails();
},
itemBuilder: (context, email) {
return EmailQuickSearchItemTileWidget(
@@ -59,7 +59,7 @@ class SearchEmailFilter {
);
}
Filter? mappingToEmailFilterCondition() {
Filter? mappingToEmailFilterCondition({Filter? moreFilterCondition}) {
final emailEmailFilterConditionShared = EmailFilterCondition(
text: text?.value,
inMailbox: mailbox?.id,
@@ -77,6 +77,7 @@ class SearchEmailFilter {
Operator.AND, hasKeyword.map((e) => EmailFilterCondition(hasKeyword: e)).toSet()),
LogicFilterOperator(
Operator.AND, notKeyword.map((e) => EmailFilterCondition(notKeyword: e)).toSet()),
if(moreFilterCondition !=null) moreFilterCondition
});
}
}
@@ -30,7 +30,7 @@ class AdvancedSearchFilterFormBottomView
Expanded(child: _buildCheckboxHasAttachment(context)),
_buildButton(
onAction: () {
controller.cleanSearchFilter();
controller.cleanSearchFilter(context);
popBack();
},
colorButton: AppColor.primaryColor.withOpacity(0.14),
@@ -103,7 +103,8 @@ class ThreadController extends BaseController {
MailboxId? _currentMailboxId;
jmap.State? _currentEmailState;
final ScrollController listEmailController = ScrollController();
late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker;
late Worker mailboxWorker, searchWorker, dashboardActionWorker, viewStateWorker, advancedSearchFilterWorker;
Set<Comparator>? get _sortOrder => <Comparator>{}
..add(EmailComparator(EmailComparatorProperty.receivedAt)
@@ -251,6 +252,12 @@ class ThreadController extends BaseController {
}
});
advancedSearchFilterWorker = ever(searchController.isAdvancedSearchViewOpen, (hasOpen) {
if (hasOpen == true) {
mailboxDashBoardController.filterMessageOption.value = FilterMessageOption.all;
}
});
dashboardActionWorker = ever(mailboxDashBoardController.dashBoardAction, (action) {
if (action is DashBoardAction) {
if (action is RefreshAllEmailAction) {
@@ -304,6 +311,7 @@ class ThreadController extends BaseController {
mailboxWorker.call();
dashboardActionWorker.call();
searchWorker.call();
advancedSearchFilterWorker.call();
viewStateWorker.call();
}
@@ -571,8 +579,8 @@ class ThreadController extends BaseController {
message: newFilterOption.getMessageToast(context),
icon: newFilterOption.getIconToast(_imagePaths));
if (isSearchActive()) {
_searchEmail();
if (isSearchActive() || searchController.isAdvancedSearchHasApply.isTrue) {
_searchEmail(filterMessageOption: _getFilterCondition());
} else {
refreshAllEmail();
}
@@ -816,7 +824,7 @@ class ThreadController extends BaseController {
searchController.clearTextSearch();
}
void _searchEmail({UnsignedInt? limit}) {
void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterMessageOption}) {
if (_accountId != null && searchQuery != null) {
searchIsActive.value = true;
@@ -824,11 +832,17 @@ class ThreadController extends BaseController {
searchController.updateFilterEmail(mailbox: currentMailbox);
}
filterMessageOption = EmailFilterCondition(
notKeyword: filterMessageOption?.notKeyword,
hasKeyword: filterMessageOption?.hasKeyword,
hasAttachment: filterMessageOption?.hasAttachment,
);
consumeState(_searchEmailInteractor.execute(
_accountId!,
limit: limit ?? ThreadConstants.defaultLimit,
sort: _sortOrder,
filter: _searchEmailFilter.mappingToEmailFilterCondition(),
filter: _searchEmailFilter.mappingToEmailFilterCondition(moreFilterCondition: filterMessageOption),
properties: ThreadConstants.propertiesDefault,
));
}
@@ -267,7 +267,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
},
buttonActionCallback: (filterAction) {
if (filterAction is QuickSearchFilter) {
controller.searchController.selectQuickSearchFilter(
controller.mailboxDashBoardController.selectQuickSearchFilter(
quickSearchFilter: filterAction,
fromSuggestionBox: true,
);
@@ -331,7 +331,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
controller.mailboxDashBoardController.searchEmail(context, recent.value);
},
suggestionsCallback: (pattern) async {
return controller.searchController.quickSearchEmails();
return controller.mailboxDashBoardController.quickSearchEmails();
},
itemBuilder: (context, email) {
return EmailQuickSearchItemTileWidget(
+1 -1
View File
@@ -1,5 +1,5 @@
{
"@@last_modified": "2022-06-26T22:28:09.520951",
"@@last_modified": "2022-06-24T14:16:53.170960",
"initializing_data": "Initializing data...",
"@initializing_data": {
"type": "text",