diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart index 10a1d7978..da3a463b4 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart @@ -91,16 +91,19 @@ class AdvancedFilterController extends BaseController { void _updateFilterEmailFromAdvancedSearchView() { if (hasKeyWordFilterInputController.text.isNotEmpty) { - searchController.updateFilterEmail(text: SearchQuery(hasKeyWordFilterInputController.text)); + searchController.updateFilterEmail( + textOption: Some(SearchQuery(hasKeyWordFilterInputController.text))); searchController.searchInputController.text = hasKeyWordFilterInputController.text; } else { - searchController.updateFilterEmail(text: SearchQuery.initial()); + searchController.updateFilterEmail( + textOption: Some(SearchQuery.initial())); } if (notKeyWordFilterInputController.text.isNotEmpty) { - searchController.updateFilterEmail(notKeyword: notKeyWordFilterInputController.text.split(',').toSet()); + searchController.updateFilterEmail( + notKeywordOption: Some(notKeyWordFilterInputController.text.split(',').toSet())); } else { - searchController.updateFilterEmail(notKeyword: {}); + searchController.updateFilterEmail(notKeywordOption: const None()); } if (listFromEmailAddress.isNotEmpty) { @@ -121,8 +124,8 @@ class AdvancedFilterController extends BaseController { searchController.updateFilterEmail( mailboxOption: optionOf(_destinationMailboxSelected), subjectOption: optionOf(subjectFilterInputController.text), - emailReceiveTimeType: dateFilterSelectedFormAdvancedSearch.value, - hasAttachment: hasAttachment.value, + emailReceiveTimeTypeOption: optionOf(dateFilterSelectedFormAdvancedSearch.value), + hasAttachmentOption: optionOf(hasAttachment.value), startDateOption: optionOf(startDate.value?.toUTCDate()), endDateOption: optionOf(endDate.value?.toUTCDate()) ); diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 3a4a59ba1..cdc91934b 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -672,7 +672,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo clearFilterMessageOption(); searchController.clearFilterSuggestion(); if (queryString?.isNotEmpty == true) { - searchController.updateFilterEmail(text: SearchQuery(queryString!)); + searchController.updateFilterEmail(textOption: Some(SearchQuery(queryString!))); } searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder()); dispatchAction(StartSearchEmailAction()); @@ -1657,7 +1657,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo } void selectHasAttachmentSearchFilter() { - searchController.updateFilterEmail(hasAttachment: true); + searchController.updateFilterEmail(hasAttachmentOption: const Some(true)); dispatchAction(StartSearchEmailAction()); } @@ -1743,7 +1743,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo onCallbackAction: (startDate, endDate) { dispatchAction(SelectDateRangeToAdvancedSearch(startDate, endDate)); searchController.updateFilterEmail( - emailReceiveTimeType: receiveTime, + emailReceiveTimeTypeOption: Some(receiveTime), startDateOption: optionOf(startDate?.toUTCDate()), endDateOption: optionOf(endDate?.toUTCDate()), beforeOption: const None() @@ -1754,7 +1754,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo } else { dispatchAction(ClearDateRangeToAdvancedSearch(receiveTime)); searchController.updateFilterEmail( - emailReceiveTimeType: receiveTime, + emailReceiveTimeTypeOption: Some(receiveTime), startDateOption: const None(), endDateOption: const None(), beforeOption: const None() @@ -1774,7 +1774,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo void _deleteDateTimeSearchFilter() { dispatchAction(ClearDateRangeToAdvancedSearch(EmailReceiveTimeType.allTime)); searchController.updateFilterEmail( - emailReceiveTimeType: EmailReceiveTimeType.allTime, + emailReceiveTimeTypeOption: const Some(EmailReceiveTimeType.allTime), startDateOption: const None(), endDateOption: const None(), beforeOption: const None() @@ -1800,7 +1800,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo } void _deleteHasAttachmentSearchFilter() { - searchController.updateFilterEmail(hasAttachment: false); + searchController.updateFilterEmail(hasAttachmentOption: const Some(false)); dispatchAction(StartSearchEmailAction()); } diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index de306a3ea..5f7490426 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -146,8 +146,8 @@ class SearchController extends BaseController with DateRangePickerMixin { } updateFilterEmail( - emailReceiveTimeType: receiveTime, - hasAttachment: hasAttachment, + emailReceiveTimeTypeOption: Some(receiveTime), + hasAttachmentOption: Some(hasAttachment), fromOption: Some(listFromAddress) ); @@ -161,12 +161,12 @@ class SearchController extends BaseController with DateRangePickerMixin { void updateFilterEmail({ Option>? fromOption, Option>? toOption, - SearchQuery? text, + Option? textOption, Option? subjectOption, - Set? notKeyword, + Option>? notKeywordOption, Option? mailboxOption, - EmailReceiveTimeType? emailReceiveTimeType, - bool? hasAttachment, + Option? emailReceiveTimeTypeOption, + Option? hasAttachmentOption, Option? beforeOption, Option? startDateOption, Option? endDateOption, @@ -176,12 +176,12 @@ class SearchController extends BaseController with DateRangePickerMixin { searchEmailFilter.value = searchEmailFilter.value.copyWith( fromOption: fromOption, toOption: toOption, - text: text, + textOption: textOption, subjectOption: subjectOption, - notKeyword: notKeyword, + notKeywordOption: notKeywordOption, mailboxOption: mailboxOption, - emailReceiveTimeType: emailReceiveTimeType, - hasAttachment: hasAttachment, + emailReceiveTimeTypeOption: emailReceiveTimeTypeOption, + hasAttachmentOption: hasAttachmentOption, beforeOption: beforeOption, startDateOption: startDateOption, endDateOption: endDateOption, @@ -199,6 +199,10 @@ class SearchController extends BaseController with DateRangePickerMixin { PresentationMailbox? get mailboxFiltered => searchEmailFilter.value.mailbox; + Set get listAddressOfToFiltered => searchEmailFilter.value.to; + + Set get listAddressOfFromFiltered => searchEmailFilter.value.from; + bool isSearchActive() => searchState.value.searchStatus == SearchStatus.ACTIVE; @@ -218,7 +222,7 @@ class SearchController extends BaseController with DateRangePickerMixin { } void disableSimpleSearch() { - updateFilterEmail(text: SearchQuery.initial()); + updateFilterEmail(textOption: Some(SearchQuery.initial())); _clearAllTextInputSimpleSearch(); deactivateSimpleSearch(); hideSimpleSearchFormView(); diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index fc87bafc3..c5b4c333c 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -534,13 +534,13 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { return Obx(() { final searchEmailFilter = controller.searchController.searchEmailFilter.value; final sortOrderType = controller.searchController.sortOrderFiltered.value; - final listAddressOfFrom = controller.searchController.searchEmailFilter.value.from; + final listAddressOfFrom = controller.searchController.listAddressOfFromFiltered; final userName = controller.sessionCurrent?.username; final startDate = controller.searchController.startDateFiltered; final endDate = controller.searchController.endDateFiltered; final receiveTimeType = controller.searchController.receiveTimeFiltered; final mailbox = controller.searchController.mailboxFiltered; - final listAddressOfTo = controller.searchController.searchEmailFilter.value.to; + final listAddressOfTo = controller.searchController.listAddressOfToFiltered; final isSelected = searchFilter.isSelected( context, diff --git a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart index d1c60ef88..577e4db6e 100644 --- a/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart @@ -1,18 +1,22 @@ import 'package:core/core.dart'; import 'package:dartz/dartz.dart'; import 'package:equatable/equatable.dart'; +import 'package:flutter/material.dart'; import 'package:jmap_dart_client/jmap/core/filter/filter.dart'; import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart'; import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; +import 'package:model/email/prefix_email_address.dart'; import 'package:model/extensions/email_filter_condition_extension.dart'; import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.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/email_sort_order_type.dart'; import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class SearchEmailFilter with EquatableMixin, OptionParamMixin { final Set from; @@ -60,13 +64,13 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin { SearchEmailFilter copyWith({ Option>? fromOption, Option>? toOption, - SearchQuery? text, + Option? textOption, Option? subjectOption, - Set? notKeyword, - Set? hasKeyword, + Option>? notKeywordOption, + Option>? hasKeywordOption, Option? mailboxOption, - EmailReceiveTimeType? emailReceiveTimeType, - bool? hasAttachment, + Option? emailReceiveTimeTypeOption, + Option? hasAttachmentOption, Option? beforeOption, Option? startDateOption, Option? endDateOption, @@ -76,13 +80,13 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin { return SearchEmailFilter( from: getOptionParam(fromOption, from), to: getOptionParam(toOption, to), - text: text ?? this.text, + text: getOptionParam(textOption, text), subject: getOptionParam(subjectOption, subject), - notKeyword: notKeyword ?? this.notKeyword, - hasKeyword: hasKeyword ?? this.hasKeyword, + notKeyword: getOptionParam(notKeywordOption, notKeyword), + hasKeyword: getOptionParam(hasKeywordOption, hasKeyword), mailbox: getOptionParam(mailboxOption, mailbox), - emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType, - hasAttachment: hasAttachment ?? this.hasAttachment, + emailReceiveTimeType: getOptionParam(emailReceiveTimeTypeOption, emailReceiveTimeType), + hasAttachment: getOptionParam(hasAttachmentOption, hasAttachment), before: getOptionParam(beforeOption, before), startDate: getOptionParam(startDateOption, startDate), endDate: getOptionParam(endDateOption, endDate), @@ -140,6 +144,58 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin { : null; } + Set getContactApplied(PrefixEmailAddress prefixEmailAddress) { + switch(prefixEmailAddress) { + case PrefixEmailAddress.from: + return from; + case PrefixEmailAddress.to: + return to; + default: + return {}; + } + } + + bool get searchFilterByMailboxApplied => mailbox != null; + + String getMailboxName(BuildContext context) => mailbox?.getDisplayName(context) ?? ''; + + bool get searchFilterByFromApplied => from.isNotEmpty; + + bool get searchFilterByToApplied => to.isNotEmpty; + + bool searchFilterByContactApplied(PrefixEmailAddress prefixEmailAddress) { + switch(prefixEmailAddress) { + case PrefixEmailAddress.from: + return searchFilterByFromApplied; + case PrefixEmailAddress.to: + return searchFilterByToApplied; + default: + return false; + } + } + + String getNameContactApplied(BuildContext context, PrefixEmailAddress prefixEmailAddress) { + switch(prefixEmailAddress) { + case PrefixEmailAddress.from: + return '${AppLocalizations.of(context).from_email_address_prefix} ${from.first}'; + case PrefixEmailAddress.to: + return '${AppLocalizations.of(context).to_email_address_prefix} ${to.first}'; + default: + return ''; + } + } + + String getNameContactDefault(BuildContext context, PrefixEmailAddress prefixEmailAddress) { + switch(prefixEmailAddress) { + case PrefixEmailAddress.from: + return AppLocalizations.of(context).from_email_address_prefix; + case PrefixEmailAddress.to: + return AppLocalizations.of(context).to_email_address_prefix; + default: + return ''; + } + } + @override List get props => [ from, diff --git a/lib/features/search/email/presentation/model/simple_search_filter.dart b/lib/features/search/email/presentation/model/simple_search_filter.dart deleted file mode 100644 index 7f368ca5a..000000000 --- a/lib/features/search/email/presentation/model/simple_search_filter.dart +++ /dev/null @@ -1,186 +0,0 @@ -import 'package:dartz/dartz.dart'; -import 'package:equatable/equatable.dart'; -import 'package:flutter/material.dart'; -import 'package:jmap_dart_client/jmap/core/filter/filter.dart'; -import 'package:jmap_dart_client/jmap/core/filter/filter_operator.dart'; -import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator.dart'; -import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; -import 'package:jmap_dart_client/jmap/core/utc_date.dart'; -import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; -import 'package:model/email/prefix_email_address.dart'; -import 'package:model/extensions/email_filter_condition_extension.dart'; -import 'package:model/mailbox/presentation_mailbox.dart'; -import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.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/email_sort_order_type.dart'; -import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; -import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; - -class SimpleSearchFilter with EquatableMixin { - final Set from; - final Set to; - final SearchQuery? text; - final PresentationMailbox? mailbox; - final EmailReceiveTimeType emailReceiveTimeType; - final bool hasAttachment; - final UTCDate? before; - final UTCDate? startDate; - final UTCDate? endDate; - final Set? sortOrder; - final int? position; - - SimpleSearchFilter({ - Set? from, - Set? to, - EmailReceiveTimeType? emailReceiveTimeType, - bool? hasAttachment, - this.text, - this.before, - this.mailbox, - this.startDate, - this.endDate, - this.sortOrder, - this.position, - }) : from = from ?? {}, - to = to ?? {}, - hasAttachment = hasAttachment ?? false, - emailReceiveTimeType = emailReceiveTimeType ?? EmailReceiveTimeType.allTime; - - SimpleSearchFilter copyWith({ - Option>? fromOption, - Option>? toOption, - Option? textOption, - Option? mailboxOption, - Option? emailReceiveTimeTypeOption, - Option? hasAttachmentOption, - Option? beforeOption, - Option? startDateOption, - Option? endDateOption, - Option>? sortOrderOption, - Option? positionOption, - }) { - return SimpleSearchFilter( - from: _getOptionParam(fromOption, from), - to: _getOptionParam(toOption, to), - text: _getOptionParam(textOption, text), - mailbox: _getOptionParam(mailboxOption, mailbox), - emailReceiveTimeType: _getOptionParam(emailReceiveTimeTypeOption, emailReceiveTimeType), - hasAttachment: _getOptionParam(hasAttachmentOption, hasAttachment), - before: _getOptionParam(beforeOption, before), - startDate: _getOptionParam(startDateOption, startDate), - endDate: _getOptionParam(endDateOption, endDate), - sortOrder: _getOptionParam(sortOrderOption, sortOrder), - position: _getOptionParam(positionOption, position), - ); - } - - T? _getOptionParam(Option? option, T? defaultValue) { - if (option != null) { - return option.toNullable(); - } else { - return defaultValue; - } - } - - Filter? mappingToEmailFilterCondition({required EmailSortOrderType sortOrderType}) { - final emailEmailFilterConditionShared = EmailFilterCondition( - text: text?.value.trim().isNotEmpty == true - ? text?.value - : null, - inMailbox: mailbox?.id, - after: sortOrderType.isScrollByPosition() - ? null - : emailReceiveTimeType.getAfterDate(startDate), - hasAttachment: hasAttachment == false ? null : hasAttachment, - before: sortOrderType.isScrollByPosition() - ? null - : emailReceiveTimeType.getBeforeDate(endDate, before) - ); - - final listEmailCondition = { - if (emailEmailFilterConditionShared.hasCondition) - emailEmailFilterConditionShared, - if (from.isNotEmpty) - LogicFilterOperator( - Operator.AND, - from.map((e) => EmailFilterCondition(from: e)).toSet()), - if (to.isNotEmpty) - LogicFilterOperator( - Operator.AND, - to.map((e) => EmailFilterCondition(to: e)).toSet()), - }; - - return listEmailCondition.isNotEmpty - ? LogicFilterOperator(Operator.AND, listEmailCondition) - : null; - } - - @override - List get props => [ - from, - to, - text, - mailbox, - emailReceiveTimeType, - hasAttachment, - before, - startDate, - endDate, - sortOrder, - position, - ]; -} - -extension SearchEmailFilterExtension on SimpleSearchFilter { - bool get searchFilterByMailboxApplied => mailbox != null; - - bool get searchFilterByFromApplied => from.isNotEmpty; - - bool get searchFilterByToApplied => to.isNotEmpty; - - bool searchFilterByContactApplied(PrefixEmailAddress prefixEmailAddress) { - switch(prefixEmailAddress) { - case PrefixEmailAddress.from: - return searchFilterByFromApplied; - case PrefixEmailAddress.to: - return searchFilterByToApplied; - default: - return false; - } - } - - Set getContactApplied(PrefixEmailAddress prefixEmailAddress) { - switch(prefixEmailAddress) { - case PrefixEmailAddress.from: - return from; - case PrefixEmailAddress.to: - return to; - default: - return {}; - } - } - - String getNameContactApplied(BuildContext context, PrefixEmailAddress prefixEmailAddress) { - switch(prefixEmailAddress) { - case PrefixEmailAddress.from: - return '${AppLocalizations.of(context).from_email_address_prefix} ${from.first}'; - case PrefixEmailAddress.to: - return '${AppLocalizations.of(context).to_email_address_prefix} ${to.first}'; - default: - return ''; - } - } - - String getNameContactDefault(BuildContext context, PrefixEmailAddress prefixEmailAddress) { - switch(prefixEmailAddress) { - case PrefixEmailAddress.from: - return AppLocalizations.of(context).from_email_address_prefix; - case PrefixEmailAddress.to: - return AppLocalizations.of(context).to_email_address_prefix; - default: - return ''; - } - } - - String getMailboxName(BuildContext context) => mailbox?.getDisplayName(context) ?? ''; -} \ No newline at end of file diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index 4e8299ebf..b97ec1c5f 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -50,13 +50,13 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dash 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/email_sort_order_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart'; import 'package:tmail_ui_user/features/network_connection/presentation/network_connection_controller.dart' if (dart.library.html) 'package:tmail_ui_user/features/network_connection/presentation/web_network_connection_controller.dart'; import 'package:tmail_ui_user/features/search/email/domain/state/refresh_changes_search_email_state.dart'; import 'package:tmail_ui_user/features/search/email/domain/usecases/refresh_changes_search_email_interactor.dart'; import 'package:tmail_ui_user/features/search/email/presentation/model/search_more_state.dart'; -import 'package:tmail_ui_user/features/search/email/presentation/model/simple_search_filter.dart'; import 'package:tmail_ui_user/features/search/email/presentation/search_email_bindings.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart'; @@ -99,7 +99,7 @@ class SearchEmailController extends BaseController final listRecentSearch = RxList(); final listSuggestionSearch = RxList(); final listContactSuggestionSearch = RxList(); - final simpleSearchFilter = Rx(SimpleSearchFilter()); + final searchEmailFilter = SearchEmailFilter.initial().obs; final searchIsRunning = RxBool(false); final emailReceiveTimeType = EmailReceiveTimeType.allTime.obs; final selectionMode = Rx(SelectMode.INACTIVE); @@ -118,10 +118,22 @@ class SearchEmailController extends BaseController Session? get session => mailboxDashBoardController.sessionCurrent; - SearchQuery? get searchQuery => simpleSearchFilter.value.text; + SearchQuery? get searchQuery => searchEmailFilter.value.text; RxList get listResultSearch => mailboxDashBoardController.listResultSearch; + EmailReceiveTimeType get receiveTimeFiltered => searchEmailFilter.value.emailReceiveTimeType; + + DateTime? get startDateFiltered => searchEmailFilter.value.startDate?.value.toLocal(); + + DateTime? get endDateFiltered => searchEmailFilter.value.endDate?.value.toLocal(); + + PresentationMailbox? get mailboxFiltered => searchEmailFilter.value.mailbox; + + Set get listAddressOfToFiltered => searchEmailFilter.value.to; + + Set get listAddressOfFromFiltered => searchEmailFilter.value.from; + SearchEmailController( this._quickSearchEmailInteractor, this._saveRecentSearchInteractor, @@ -266,9 +278,9 @@ class SearchEmailController extends BaseController session!, accountId!, limit: limit, - position: simpleSearchFilter.value.position, + position: searchEmailFilter.value.position, sort: emailSortOrderType.value.getSortOrder().toNullable(), - filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), + filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!), )); } @@ -311,7 +323,7 @@ class SearchEmailController extends BaseController accountId, limit: UnsignedInt(5), sort: emailSortOrderType.value.getSortOrder().toNullable(), - filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), + filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), properties: ThreadConstants.propertiesQuickSearch) .then((result) => result.fold( (failure) => [], @@ -361,9 +373,9 @@ class SearchEmailController extends BaseController session!, accountId!, limit: ThreadConstants.defaultLimit, - position: simpleSearchFilter.value.position, + position: searchEmailFilter.value.position, sort: emailSortOrderType.value.getSortOrder().toNullable(), - filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), + filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!), )); } @@ -416,8 +428,8 @@ class SearchEmailController extends BaseController accountId!, limit: ThreadConstants.defaultLimit, sort: emailSortOrderType.value.getSortOrder().toNullable(), - position: simpleSearchFilter.value.position, - filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), + position: searchEmailFilter.value.position, + filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value), properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!), lastEmailId: lastEmail.id )); @@ -495,7 +507,7 @@ class SearchEmailController extends BaseController bool checkQuickSearchFilterSelected(QuickSearchFilter filter) { switch (filter) { case QuickSearchFilter.hasAttachment: - return simpleSearchFilter.value.hasAttachment == true; + return searchEmailFilter.value.hasAttachment == true; case QuickSearchFilter.last7Days: return true; case QuickSearchFilter.sortBy: @@ -543,14 +555,14 @@ class SearchEmailController extends BaseController if (emailReceiveTimeType == EmailReceiveTimeType.customRange) { showMultipleViewDateRangePicker( context, - simpleSearchFilter.value.startDate?.value.toLocal(), - simpleSearchFilter.value.endDate?.value.toLocal(), + searchEmailFilter.value.startDate?.value.toLocal(), + searchEmailFilter.value.endDate?.value.toLocal(), onCallbackAction: (newStartDate, newEndDate) { _updateSimpleSearchFilter( emailReceiveTimeTypeOption: Some(emailReceiveTimeType), textOption: searchQuery == null ? Some(SearchQuery.initial()) - : optionOf(simpleSearchFilter.value.text), + : optionOf(searchEmailFilter.value.text), beforeOption: const None(), startDateOption: optionOf(newStartDate?.toUTCDate()), endDateOption: optionOf(newEndDate?.toUTCDate()), @@ -566,7 +578,7 @@ class SearchEmailController extends BaseController emailReceiveTimeTypeOption: Some(emailReceiveTimeType), textOption: searchQuery == null ? Some(SearchQuery.initial()) - : optionOf(simpleSearchFilter.value.text), + : optionOf(searchEmailFilter.value.text), beforeOption: const None(), startDateOption: const None(), endDateOption: const None(), @@ -622,7 +634,7 @@ class SearchEmailController extends BaseController PrefixEmailAddress prefixEmailAddress ) async { if (accountId != null && session != null) { - final listContactSelected = simpleSearchFilter.value.getContactApplied(prefixEmailAddress); + final listContactSelected = searchEmailFilter.value.getContactApplied(prefixEmailAddress); final arguments = ContactArguments(accountId!, session!, listContactSelected); final newContact = await push(AppRoutes.contact, arguments: arguments); @@ -647,18 +659,18 @@ class SearchEmailController extends BaseController switch(prefixEmailAddress) { case PrefixEmailAddress.from: if (listContactSelected.first == newContact.email) { - simpleSearchFilter.value.from.clear(); + searchEmailFilter.value.from.clear(); } else { - simpleSearchFilter.value.from.clear(); - simpleSearchFilter.value.from.add(newContact.email!); + searchEmailFilter.value.from.clear(); + searchEmailFilter.value.from.add(newContact.email!); } break; case PrefixEmailAddress.to: if (listContactSelected.first == newContact.email) { - simpleSearchFilter.value.to.clear(); + searchEmailFilter.value.to.clear(); } else { - simpleSearchFilter.value.to.clear(); - simpleSearchFilter.value.to.add(newContact.email!); + searchEmailFilter.value.to.clear(); + searchEmailFilter.value.to.add(newContact.email!); } break; default: @@ -667,10 +679,10 @@ class SearchEmailController extends BaseController } else { switch(prefixEmailAddress) { case PrefixEmailAddress.from: - simpleSearchFilter.value.from.add(newContact.email!); + searchEmailFilter.value.from.add(newContact.email!); break; case PrefixEmailAddress.to: - simpleSearchFilter.value.to.add(newContact.email!); + searchEmailFilter.value.to.add(newContact.email!); break; default: break; @@ -680,14 +692,14 @@ class SearchEmailController extends BaseController switch(prefixEmailAddress) { case PrefixEmailAddress.from: _updateSimpleSearchFilter( - fromOption: Some(simpleSearchFilter.value.from), + fromOption: Some(searchEmailFilter.value.from), beforeOption: const None(), positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None() ); break; case PrefixEmailAddress.to: _updateSimpleSearchFilter( - toOption: Some(simpleSearchFilter.value.to), + toOption: Some(searchEmailFilter.value.to), beforeOption: const None(), positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None() ); @@ -712,7 +724,7 @@ class SearchEmailController extends BaseController Option>? sortOrderOption, Option? positionOption, }) { - simpleSearchFilter.value = simpleSearchFilter.value.copyWith( + searchEmailFilter.value = searchEmailFilter.value.copyWith( fromOption: fromOption, toOption: toOption, textOption: textOption, @@ -725,7 +737,7 @@ class SearchEmailController extends BaseController sortOrderOption: sortOrderOption, positionOption: positionOption, ); - simpleSearchFilter.refresh(); + searchEmailFilter.refresh(); } void onTextSearchChange(String text) { @@ -758,7 +770,7 @@ class SearchEmailController extends BaseController listSuggestionSearch.clear(); listContactSuggestionSearch.clear(); listResultSearch.clear(); - simpleSearchFilter.value = SimpleSearchFilter(); + searchEmailFilter.value = SearchEmailFilter.initial(); } void closeSearchView({BuildContext? context}) { diff --git a/lib/features/search/email/presentation/search_email_view.dart b/lib/features/search/email/presentation/search_email_view.dart index 2bd1e14e3..9ae400820 100644 --- a/lib/features/search/email/presentation/search_email_view.dart +++ b/lib/features/search/email/presentation/search_email_view.dart @@ -20,7 +20,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/qu import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/email_quick_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/quick_search/recent_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/search/email/presentation/model/search_more_state.dart'; -import 'package:tmail_ui_user/features/search/email/presentation/model/simple_search_filter.dart'; import 'package:tmail_ui_user/features/search/email/presentation/search_email_controller.dart'; import 'package:tmail_ui_user/features/search/email/presentation/utils/search_email_utils.dart'; import 'package:tmail_ui_user/features/search/email/presentation/widgets/app_bar_selection_mode.dart'; @@ -265,8 +264,8 @@ class SearchEmailView extends GetWidget filter.getTitle( context, receiveTimeType: controller.emailReceiveTimeType.value, - startDate: controller.simpleSearchFilter.value.startDate?.value.toLocal(), - endDate: controller.simpleSearchFilter.value.endDate?.value.toLocal(), + startDate: controller.startDateFiltered, + endDate: controller.endDateFiltered, sortOrderType: controller.emailSortOrderType.value ), maxLines: 1, @@ -685,13 +684,13 @@ class SearchEmailView extends GetWidget Widget _buildSearchFilterByMailboxButton(BuildContext context) { return Obx(() { - final filterSelected = controller.simpleSearchFilter.value.searchFilterByMailboxApplied; + final filterSelected = controller.searchEmailFilter.value.searchFilterByMailboxApplied; return Padding( padding: const EdgeInsets.only(right: 8), child: InkWell( onTap: () => controller.selectMailboxForSearchFilter( context, - controller.simpleSearchFilter.value.mailbox), + controller.mailboxFiltered), borderRadius: const BorderRadius.all(Radius.circular(10)), child: Container( decoration: BoxDecoration( @@ -709,7 +708,7 @@ class SearchEmailView extends GetWidget const SizedBox(width: 4), Text( filterSelected - ? controller.simpleSearchFilter.value.getMailboxName(context) + ? controller.searchEmailFilter.value.getMailboxName(context) : AppLocalizations.of(context).folder, maxLines: 1, overflow: CommonTextStyle.defaultTextOverFlow, @@ -740,7 +739,7 @@ class SearchEmailView extends GetWidget Widget _buildSearchFilterByContactButton(BuildContext context, PrefixEmailAddress prefixEmailAddress) { return Obx(() { - final filterSelected = controller.simpleSearchFilter.value + final filterSelected = controller.searchEmailFilter.value .searchFilterByContactApplied(prefixEmailAddress); return Padding( padding: const EdgeInsets.only(right: 8), @@ -763,8 +762,8 @@ class SearchEmailView extends GetWidget const SizedBox(width: 4), Text( filterSelected - ? controller.simpleSearchFilter.value.getNameContactApplied(context, prefixEmailAddress) - : controller.simpleSearchFilter.value.getNameContactDefault(context, prefixEmailAddress), + ? controller.searchEmailFilter.value.getNameContactApplied(context, prefixEmailAddress) + : controller.searchEmailFilter.value.getNameContactDefault(context, prefixEmailAddress), maxLines: 1, overflow: CommonTextStyle.defaultTextOverFlow, softWrap: CommonTextStyle.defaultSoftWrap, diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index b80efd6ee..f3bb28c51 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -1316,7 +1316,7 @@ class ThreadController extends BaseController with EmailActionController { searchController.enableSearch(); if (searchQuery != null) { searchController.updateTextSearch(searchQuery.value); - searchController.updateFilterEmail(text: searchQuery); + searchController.updateFilterEmail(textOption: Some(searchQuery)); if (currentContext != null) { FocusScope.of(currentContext!).unfocus(); } @@ -1331,7 +1331,7 @@ class ThreadController extends BaseController with EmailActionController { dispatchState(Right(SearchingState())); searchController.enableSearch(); searchController.updateTextSearch(searchQuery.value); - searchController.updateFilterEmail(text: searchQuery); + searchController.updateFilterEmail(textOption: Some(searchQuery)); if (currentContext != null) { FocusScope.of(currentContext!).unfocus(); }