TF-3002 [MOBILE] Combine SimpleSearchFilter & SearchEmailFilter
This commit is contained in:
+9
-6
@@ -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())
|
||||
);
|
||||
|
||||
+6
-6
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Set<String>>? fromOption,
|
||||
Option<Set<String>>? toOption,
|
||||
SearchQuery? text,
|
||||
Option<SearchQuery>? textOption,
|
||||
Option<String>? subjectOption,
|
||||
Set<String>? notKeyword,
|
||||
Option<Set<String>>? notKeywordOption,
|
||||
Option<PresentationMailbox>? mailboxOption,
|
||||
EmailReceiveTimeType? emailReceiveTimeType,
|
||||
bool? hasAttachment,
|
||||
Option<EmailReceiveTimeType>? emailReceiveTimeTypeOption,
|
||||
Option<bool>? hasAttachmentOption,
|
||||
Option<UTCDate>? beforeOption,
|
||||
Option<UTCDate>? startDateOption,
|
||||
Option<UTCDate>? 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<String> get listAddressOfToFiltered => searchEmailFilter.value.to;
|
||||
|
||||
Set<String> 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();
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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<String> from;
|
||||
@@ -60,13 +64,13 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
||||
SearchEmailFilter copyWith({
|
||||
Option<Set<String>>? fromOption,
|
||||
Option<Set<String>>? toOption,
|
||||
SearchQuery? text,
|
||||
Option<SearchQuery>? textOption,
|
||||
Option<String>? subjectOption,
|
||||
Set<String>? notKeyword,
|
||||
Set<String>? hasKeyword,
|
||||
Option<Set<String>>? notKeywordOption,
|
||||
Option<Set<String>>? hasKeywordOption,
|
||||
Option<PresentationMailbox>? mailboxOption,
|
||||
EmailReceiveTimeType? emailReceiveTimeType,
|
||||
bool? hasAttachment,
|
||||
Option<EmailReceiveTimeType>? emailReceiveTimeTypeOption,
|
||||
Option<bool>? hasAttachmentOption,
|
||||
Option<UTCDate>? beforeOption,
|
||||
Option<UTCDate>? startDateOption,
|
||||
Option<UTCDate>? 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<String> 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<Object?> get props => [
|
||||
from,
|
||||
|
||||
Reference in New Issue
Block a user