add advanced search filter by mailbox

This commit is contained in:
ManhNTX
2022-06-26 22:40:18 +07:00
committed by Dat H. Pham
parent 8ab7b3adaa
commit 1c26fd5ec1
15 changed files with 83 additions and 32 deletions
@@ -4,15 +4,18 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class AdvancedFilterController extends BaseController {
final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs;
final mailboxFilterSelectedFormAdvancedSearch = Rxn<PresentationMailbox>();
final hasAttachment = false.obs;
TextEditingController fromFilterInputController = TextEditingController();
@@ -34,34 +37,66 @@ class AdvancedFilterController extends BaseController {
cleanSearchFilter() {
_searchController.cleanSearchFilter();
dateFilterSelectedFormAdvancedSearch.value = EmailReceiveTimeType.allTime;
fromFilterInputController.text = '';
toFilterInputController.text = '';
subjectFilterInputController.text = '';
hasKeyWordFilterInputController.text = '';
notKeyWordFilterInputController.text = '';
dateFilterInputController.text = '';
hasAttachment.value = false;
_searchController.isAdvancedSearchHasApply.isFalse;
_searchController.isAdvancedSearchViewOpen.toggle();
}
void _updateFilterEmailFromAdvancedSearchView() {
if (fromFilterInputController.text.isNotEmpty) {
_searchEmailFilter.from.add(fromFilterInputController.text);
_searchController.updateFilterEmail(from: fromFilterInputController.text.split(',').toSet());
}
if (toFilterInputController.text.isNotEmpty) {
_searchEmailFilter.to.add(toFilterInputController.text);
_searchController.updateFilterEmail(to: toFilterInputController.text.split(',').toSet());
}
_searchController.searchEmailFilter.value = _searchEmailFilter.copyWith(
_searchController.updateFilterEmail(
subject: StringConvert.writeEmptyToNull(subjectFilterInputController.text),
hasKeyword: Wrapped.value(
StringConvert.writeEmptyToNull(hasKeyWordFilterInputController.text)),
notKeyword: Wrapped.value(
StringConvert.writeNullToEmpty(notKeyWordFilterInputController.text)),
mailbox: mailboxFilterSelectedFormAdvancedSearch.value,
StringConvert.writeEmptyToNull(notKeyWordFilterInputController.text)),
emailReceiveTimeType: dateFilterSelectedFormAdvancedSearch.value,
hasAttachment: hasAttachment.value,
);
}
Future<void> selectedMailBox() async{
final PresentationMailbox destinationMailbox = await push(
AppRoutes.DESTINATION_PICKER,
arguments: DestinationPickerArguments(_mailboxDashBoardController.accountId.value!, MailboxActions.moveEmail));
_searchController.updateFilterEmail(mailbox: destinationMailbox);
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(destinationMailbox.name?.name);
}
applyAdvancedSearchFilter(BuildContext context){
_updateFilterEmailFromAdvancedSearchView();
_mailboxDashBoardController.searchEmail(context, StringConvert.writeNullToEmpty(_searchEmailFilter.text?.value));
_searchController.isAdvancedSearchViewOpen.toggle();
_searchController.isAdvancedSearchHasApply.value = _checkAdvancedSearchHasApply();
}
bool _checkAdvancedSearchHasApply() {
return fromFilterInputController.text.isNotEmpty ||
toFilterInputController.text.isNotEmpty ||
subjectFilterInputController.text.isNotEmpty ||
hasKeyWordFilterInputController.text.isNotEmpty ||
notKeyWordFilterInputController.text.isNotEmpty ||
dateFilterInputController.text.isNotEmpty ||
mailBoxFilterInputController.text.isNotEmpty ||
hasAttachment.isFalse;
}
initSearchFilterField(BuildContext context) {
fromFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.from.firstOrNull);
_searchController.updateFilterEmail(mailbox: _mailboxDashBoardController.selectedMailbox.value);
fromFilterInputController.text = StringConvert.writeNullToEmpty(_searchController.searchEmailFilter.value.from.firstOrNull);
toFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.to.firstOrNull);
subjectFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.subject);
hasKeyWordFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.hasKeyword);
@@ -69,18 +104,15 @@ class AdvancedFilterController extends BaseController {
dateFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.emailReceiveTimeType.getTitle(context));
mailBoxFilterInputController.text = StringConvert.writeNullToEmpty(_searchEmailFilter.mailbox?.name?.name);
dateFilterSelectedFormAdvancedSearch.value = _searchEmailFilter.emailReceiveTimeType;
mailboxFilterSelectedFormAdvancedSearch.value = _searchEmailFilter.mailbox;
hasAttachment.value = _searchEmailFilter.hasAttachment;
}
@override
void onDone() {
// TODO: implement onDone
}
@override
void onError(error) {
// TODO: implement onError
}
@override
@@ -243,6 +243,7 @@ class MailboxDashBoardController extends ReloadableController {
void setNewFirstSelectedMailbox(PresentationMailbox? newPresentationMailbox) {
selectedMailbox.firstRebuild = true;
selectedMailbox.value = newPresentationMailbox;
}
void setSelectedEmail(PresentationEmail? newPresentationEmail) {
@@ -38,6 +38,7 @@ class SearchController extends BaseController {
final accountId = Rxn<AccountId>();
final userProfile = Rxn<UserProfile>();
final isAdvancedSearchViewOpen = false.obs;
final isAdvancedSearchHasApply = false.obs;
final dateFilterSelectedFormAdvancedSearch = EmailReceiveTimeType.allTime.obs;
final mailboxFilterSelectedFormAdvancedSearch = Rxn<PresentationMailbox>();
final hasAttachment = false.obs;
@@ -144,11 +145,11 @@ class SearchController extends BaseController {
searchFocus.addListener(() {
final hasFocus = searchFocus.hasFocus;
final query = searchEmailFilter.value.text?.value;
log('MailboxDashBoardController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
if (!hasFocus && (query == null || query.isEmpty)) {
log('SearchController::_registerSearchFocusListener(): hasFocus: $hasFocus | query: $query');
if (!hasFocus && (query == null || query.isEmpty) && isAdvancedSearchHasApply.isFalse) {
updateFilterEmail(text: SearchQuery.initial());
searchInputController.clear();
cleanSearchFilter();
cleanSearchFilter();
searchFocus.unfocus();
}
});
@@ -165,7 +166,6 @@ class SearchController extends BaseController {
searchState.value = searchState.value.disableSearchState();
updateFilterEmail(text: SearchQuery.initial());
searchInputController.clear();
cleanSearchFilter();
searchFocus.unfocus();
}