add advanced search filter by mailbox
This commit is contained in:
+42
-10
@@ -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
|
||||
|
||||
+1
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user