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