able filter message option after using advanced search
This commit is contained in:
+12
-3
@@ -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) {
|
||||
|
||||
-3
@@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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,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",
|
||||
|
||||
Reference in New Issue
Block a user