TF-3002 [MOBILE] Combine SimpleSearchFilter & SearchEmailFilter
This commit is contained in:
+9
-6
@@ -91,16 +91,19 @@ class AdvancedFilterController extends BaseController {
|
|||||||
|
|
||||||
void _updateFilterEmailFromAdvancedSearchView() {
|
void _updateFilterEmailFromAdvancedSearchView() {
|
||||||
if (hasKeyWordFilterInputController.text.isNotEmpty) {
|
if (hasKeyWordFilterInputController.text.isNotEmpty) {
|
||||||
searchController.updateFilterEmail(text: SearchQuery(hasKeyWordFilterInputController.text));
|
searchController.updateFilterEmail(
|
||||||
|
textOption: Some(SearchQuery(hasKeyWordFilterInputController.text)));
|
||||||
searchController.searchInputController.text = hasKeyWordFilterInputController.text;
|
searchController.searchInputController.text = hasKeyWordFilterInputController.text;
|
||||||
} else {
|
} else {
|
||||||
searchController.updateFilterEmail(text: SearchQuery.initial());
|
searchController.updateFilterEmail(
|
||||||
|
textOption: Some(SearchQuery.initial()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (notKeyWordFilterInputController.text.isNotEmpty) {
|
if (notKeyWordFilterInputController.text.isNotEmpty) {
|
||||||
searchController.updateFilterEmail(notKeyword: notKeyWordFilterInputController.text.split(',').toSet());
|
searchController.updateFilterEmail(
|
||||||
|
notKeywordOption: Some(notKeyWordFilterInputController.text.split(',').toSet()));
|
||||||
} else {
|
} else {
|
||||||
searchController.updateFilterEmail(notKeyword: {});
|
searchController.updateFilterEmail(notKeywordOption: const None());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (listFromEmailAddress.isNotEmpty) {
|
if (listFromEmailAddress.isNotEmpty) {
|
||||||
@@ -121,8 +124,8 @@ class AdvancedFilterController extends BaseController {
|
|||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
mailboxOption: optionOf(_destinationMailboxSelected),
|
mailboxOption: optionOf(_destinationMailboxSelected),
|
||||||
subjectOption: optionOf(subjectFilterInputController.text),
|
subjectOption: optionOf(subjectFilterInputController.text),
|
||||||
emailReceiveTimeType: dateFilterSelectedFormAdvancedSearch.value,
|
emailReceiveTimeTypeOption: optionOf(dateFilterSelectedFormAdvancedSearch.value),
|
||||||
hasAttachment: hasAttachment.value,
|
hasAttachmentOption: optionOf(hasAttachment.value),
|
||||||
startDateOption: optionOf(startDate.value?.toUTCDate()),
|
startDateOption: optionOf(startDate.value?.toUTCDate()),
|
||||||
endDateOption: optionOf(endDate.value?.toUTCDate())
|
endDateOption: optionOf(endDate.value?.toUTCDate())
|
||||||
);
|
);
|
||||||
|
|||||||
+6
-6
@@ -672,7 +672,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
clearFilterMessageOption();
|
clearFilterMessageOption();
|
||||||
searchController.clearFilterSuggestion();
|
searchController.clearFilterSuggestion();
|
||||||
if (queryString?.isNotEmpty == true) {
|
if (queryString?.isNotEmpty == true) {
|
||||||
searchController.updateFilterEmail(text: SearchQuery(queryString!));
|
searchController.updateFilterEmail(textOption: Some(SearchQuery(queryString!)));
|
||||||
}
|
}
|
||||||
searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder());
|
searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder());
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
@@ -1657,7 +1657,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectHasAttachmentSearchFilter() {
|
void selectHasAttachmentSearchFilter() {
|
||||||
searchController.updateFilterEmail(hasAttachment: true);
|
searchController.updateFilterEmail(hasAttachmentOption: const Some(true));
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1743,7 +1743,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
onCallbackAction: (startDate, endDate) {
|
onCallbackAction: (startDate, endDate) {
|
||||||
dispatchAction(SelectDateRangeToAdvancedSearch(startDate, endDate));
|
dispatchAction(SelectDateRangeToAdvancedSearch(startDate, endDate));
|
||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
emailReceiveTimeType: receiveTime,
|
emailReceiveTimeTypeOption: Some(receiveTime),
|
||||||
startDateOption: optionOf(startDate?.toUTCDate()),
|
startDateOption: optionOf(startDate?.toUTCDate()),
|
||||||
endDateOption: optionOf(endDate?.toUTCDate()),
|
endDateOption: optionOf(endDate?.toUTCDate()),
|
||||||
beforeOption: const None()
|
beforeOption: const None()
|
||||||
@@ -1754,7 +1754,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
} else {
|
} else {
|
||||||
dispatchAction(ClearDateRangeToAdvancedSearch(receiveTime));
|
dispatchAction(ClearDateRangeToAdvancedSearch(receiveTime));
|
||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
emailReceiveTimeType: receiveTime,
|
emailReceiveTimeTypeOption: Some(receiveTime),
|
||||||
startDateOption: const None(),
|
startDateOption: const None(),
|
||||||
endDateOption: const None(),
|
endDateOption: const None(),
|
||||||
beforeOption: const None()
|
beforeOption: const None()
|
||||||
@@ -1774,7 +1774,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
void _deleteDateTimeSearchFilter() {
|
void _deleteDateTimeSearchFilter() {
|
||||||
dispatchAction(ClearDateRangeToAdvancedSearch(EmailReceiveTimeType.allTime));
|
dispatchAction(ClearDateRangeToAdvancedSearch(EmailReceiveTimeType.allTime));
|
||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
emailReceiveTimeType: EmailReceiveTimeType.allTime,
|
emailReceiveTimeTypeOption: const Some(EmailReceiveTimeType.allTime),
|
||||||
startDateOption: const None(),
|
startDateOption: const None(),
|
||||||
endDateOption: const None(),
|
endDateOption: const None(),
|
||||||
beforeOption: const None()
|
beforeOption: const None()
|
||||||
@@ -1800,7 +1800,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _deleteHasAttachmentSearchFilter() {
|
void _deleteHasAttachmentSearchFilter() {
|
||||||
searchController.updateFilterEmail(hasAttachment: false);
|
searchController.updateFilterEmail(hasAttachmentOption: const Some(false));
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -146,8 +146,8 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateFilterEmail(
|
updateFilterEmail(
|
||||||
emailReceiveTimeType: receiveTime,
|
emailReceiveTimeTypeOption: Some(receiveTime),
|
||||||
hasAttachment: hasAttachment,
|
hasAttachmentOption: Some(hasAttachment),
|
||||||
fromOption: Some(listFromAddress)
|
fromOption: Some(listFromAddress)
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -161,12 +161,12 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
void updateFilterEmail({
|
void updateFilterEmail({
|
||||||
Option<Set<String>>? fromOption,
|
Option<Set<String>>? fromOption,
|
||||||
Option<Set<String>>? toOption,
|
Option<Set<String>>? toOption,
|
||||||
SearchQuery? text,
|
Option<SearchQuery>? textOption,
|
||||||
Option<String>? subjectOption,
|
Option<String>? subjectOption,
|
||||||
Set<String>? notKeyword,
|
Option<Set<String>>? notKeywordOption,
|
||||||
Option<PresentationMailbox>? mailboxOption,
|
Option<PresentationMailbox>? mailboxOption,
|
||||||
EmailReceiveTimeType? emailReceiveTimeType,
|
Option<EmailReceiveTimeType>? emailReceiveTimeTypeOption,
|
||||||
bool? hasAttachment,
|
Option<bool>? hasAttachmentOption,
|
||||||
Option<UTCDate>? beforeOption,
|
Option<UTCDate>? beforeOption,
|
||||||
Option<UTCDate>? startDateOption,
|
Option<UTCDate>? startDateOption,
|
||||||
Option<UTCDate>? endDateOption,
|
Option<UTCDate>? endDateOption,
|
||||||
@@ -176,12 +176,12 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
searchEmailFilter.value = searchEmailFilter.value.copyWith(
|
searchEmailFilter.value = searchEmailFilter.value.copyWith(
|
||||||
fromOption: fromOption,
|
fromOption: fromOption,
|
||||||
toOption: toOption,
|
toOption: toOption,
|
||||||
text: text,
|
textOption: textOption,
|
||||||
subjectOption: subjectOption,
|
subjectOption: subjectOption,
|
||||||
notKeyword: notKeyword,
|
notKeywordOption: notKeywordOption,
|
||||||
mailboxOption: mailboxOption,
|
mailboxOption: mailboxOption,
|
||||||
emailReceiveTimeType: emailReceiveTimeType,
|
emailReceiveTimeTypeOption: emailReceiveTimeTypeOption,
|
||||||
hasAttachment: hasAttachment,
|
hasAttachmentOption: hasAttachmentOption,
|
||||||
beforeOption: beforeOption,
|
beforeOption: beforeOption,
|
||||||
startDateOption: startDateOption,
|
startDateOption: startDateOption,
|
||||||
endDateOption: endDateOption,
|
endDateOption: endDateOption,
|
||||||
@@ -199,6 +199,10 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
|
|
||||||
PresentationMailbox? get mailboxFiltered => searchEmailFilter.value.mailbox;
|
PresentationMailbox? get mailboxFiltered => searchEmailFilter.value.mailbox;
|
||||||
|
|
||||||
|
Set<String> get listAddressOfToFiltered => searchEmailFilter.value.to;
|
||||||
|
|
||||||
|
Set<String> get listAddressOfFromFiltered => searchEmailFilter.value.from;
|
||||||
|
|
||||||
bool isSearchActive() =>
|
bool isSearchActive() =>
|
||||||
searchState.value.searchStatus == SearchStatus.ACTIVE;
|
searchState.value.searchStatus == SearchStatus.ACTIVE;
|
||||||
|
|
||||||
@@ -218,7 +222,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void disableSimpleSearch() {
|
void disableSimpleSearch() {
|
||||||
updateFilterEmail(text: SearchQuery.initial());
|
updateFilterEmail(textOption: Some(SearchQuery.initial()));
|
||||||
_clearAllTextInputSimpleSearch();
|
_clearAllTextInputSimpleSearch();
|
||||||
deactivateSimpleSearch();
|
deactivateSimpleSearch();
|
||||||
hideSimpleSearchFormView();
|
hideSimpleSearchFormView();
|
||||||
|
|||||||
@@ -534,13 +534,13 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
return Obx(() {
|
return Obx(() {
|
||||||
final searchEmailFilter = controller.searchController.searchEmailFilter.value;
|
final searchEmailFilter = controller.searchController.searchEmailFilter.value;
|
||||||
final sortOrderType = controller.searchController.sortOrderFiltered.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 userName = controller.sessionCurrent?.username;
|
||||||
final startDate = controller.searchController.startDateFiltered;
|
final startDate = controller.searchController.startDateFiltered;
|
||||||
final endDate = controller.searchController.endDateFiltered;
|
final endDate = controller.searchController.endDateFiltered;
|
||||||
final receiveTimeType = controller.searchController.receiveTimeFiltered;
|
final receiveTimeType = controller.searchController.receiveTimeFiltered;
|
||||||
final mailbox = controller.searchController.mailboxFiltered;
|
final mailbox = controller.searchController.mailboxFiltered;
|
||||||
final listAddressOfTo = controller.searchController.searchEmailFilter.value.to;
|
final listAddressOfTo = controller.searchController.listAddressOfToFiltered;
|
||||||
|
|
||||||
final isSelected = searchFilter.isSelected(
|
final isSelected = searchFilter.isSelected(
|
||||||
context,
|
context,
|
||||||
|
|||||||
@@ -1,18 +1,22 @@
|
|||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:equatable/equatable.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.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/filter/filter_operator.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/filter/operator/logic_filter_operator.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.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/core/utc_date.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.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/email_filter_condition_extension.dart';
|
||||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.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_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/email_sort_order_type.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.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 {
|
class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
||||||
final Set<String> from;
|
final Set<String> from;
|
||||||
@@ -60,13 +64,13 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
SearchEmailFilter copyWith({
|
SearchEmailFilter copyWith({
|
||||||
Option<Set<String>>? fromOption,
|
Option<Set<String>>? fromOption,
|
||||||
Option<Set<String>>? toOption,
|
Option<Set<String>>? toOption,
|
||||||
SearchQuery? text,
|
Option<SearchQuery>? textOption,
|
||||||
Option<String>? subjectOption,
|
Option<String>? subjectOption,
|
||||||
Set<String>? notKeyword,
|
Option<Set<String>>? notKeywordOption,
|
||||||
Set<String>? hasKeyword,
|
Option<Set<String>>? hasKeywordOption,
|
||||||
Option<PresentationMailbox>? mailboxOption,
|
Option<PresentationMailbox>? mailboxOption,
|
||||||
EmailReceiveTimeType? emailReceiveTimeType,
|
Option<EmailReceiveTimeType>? emailReceiveTimeTypeOption,
|
||||||
bool? hasAttachment,
|
Option<bool>? hasAttachmentOption,
|
||||||
Option<UTCDate>? beforeOption,
|
Option<UTCDate>? beforeOption,
|
||||||
Option<UTCDate>? startDateOption,
|
Option<UTCDate>? startDateOption,
|
||||||
Option<UTCDate>? endDateOption,
|
Option<UTCDate>? endDateOption,
|
||||||
@@ -76,13 +80,13 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
return SearchEmailFilter(
|
return SearchEmailFilter(
|
||||||
from: getOptionParam(fromOption, from),
|
from: getOptionParam(fromOption, from),
|
||||||
to: getOptionParam(toOption, to),
|
to: getOptionParam(toOption, to),
|
||||||
text: text ?? this.text,
|
text: getOptionParam(textOption, text),
|
||||||
subject: getOptionParam(subjectOption, subject),
|
subject: getOptionParam(subjectOption, subject),
|
||||||
notKeyword: notKeyword ?? this.notKeyword,
|
notKeyword: getOptionParam(notKeywordOption, notKeyword),
|
||||||
hasKeyword: hasKeyword ?? this.hasKeyword,
|
hasKeyword: getOptionParam(hasKeywordOption, hasKeyword),
|
||||||
mailbox: getOptionParam(mailboxOption, mailbox),
|
mailbox: getOptionParam(mailboxOption, mailbox),
|
||||||
emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType,
|
emailReceiveTimeType: getOptionParam(emailReceiveTimeTypeOption, emailReceiveTimeType),
|
||||||
hasAttachment: hasAttachment ?? this.hasAttachment,
|
hasAttachment: getOptionParam(hasAttachmentOption, hasAttachment),
|
||||||
before: getOptionParam(beforeOption, before),
|
before: getOptionParam(beforeOption, before),
|
||||||
startDate: getOptionParam(startDateOption, startDate),
|
startDate: getOptionParam(startDateOption, startDate),
|
||||||
endDate: getOptionParam(endDateOption, endDate),
|
endDate: getOptionParam(endDateOption, endDate),
|
||||||
@@ -140,6 +144,58 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
: null;
|
: 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
|
@override
|
||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
from,
|
from,
|
||||||
|
|||||||
@@ -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<String> from;
|
|
||||||
final Set<String> to;
|
|
||||||
final SearchQuery? text;
|
|
||||||
final PresentationMailbox? mailbox;
|
|
||||||
final EmailReceiveTimeType emailReceiveTimeType;
|
|
||||||
final bool hasAttachment;
|
|
||||||
final UTCDate? before;
|
|
||||||
final UTCDate? startDate;
|
|
||||||
final UTCDate? endDate;
|
|
||||||
final Set<Comparator>? sortOrder;
|
|
||||||
final int? position;
|
|
||||||
|
|
||||||
SimpleSearchFilter({
|
|
||||||
Set<String>? from,
|
|
||||||
Set<String>? to,
|
|
||||||
EmailReceiveTimeType? emailReceiveTimeType,
|
|
||||||
bool? hasAttachment,
|
|
||||||
this.text,
|
|
||||||
this.before,
|
|
||||||
this.mailbox,
|
|
||||||
this.startDate,
|
|
||||||
this.endDate,
|
|
||||||
this.sortOrder,
|
|
||||||
this.position,
|
|
||||||
}) : from = from ?? <String>{},
|
|
||||||
to = to ?? <String>{},
|
|
||||||
hasAttachment = hasAttachment ?? false,
|
|
||||||
emailReceiveTimeType = emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
|
|
||||||
|
|
||||||
SimpleSearchFilter copyWith({
|
|
||||||
Option<Set<String>>? fromOption,
|
|
||||||
Option<Set<String>>? toOption,
|
|
||||||
Option<SearchQuery>? textOption,
|
|
||||||
Option<PresentationMailbox>? mailboxOption,
|
|
||||||
Option<EmailReceiveTimeType>? emailReceiveTimeTypeOption,
|
|
||||||
Option<bool>? hasAttachmentOption,
|
|
||||||
Option<UTCDate>? beforeOption,
|
|
||||||
Option<UTCDate>? startDateOption,
|
|
||||||
Option<UTCDate>? endDateOption,
|
|
||||||
Option<Set<Comparator>>? sortOrderOption,
|
|
||||||
Option<int>? 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<T>(Option<T?>? 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<Object?> 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<String> 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) ?? '';
|
|
||||||
}
|
|
||||||
@@ -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_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/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/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/manage_account/presentation/extensions/datetime_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/network_connection/presentation/network_connection_controller.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';
|
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/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/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/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/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/constants/thread_constants.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
@@ -99,7 +99,7 @@ class SearchEmailController extends BaseController
|
|||||||
final listRecentSearch = RxList<RecentSearch>();
|
final listRecentSearch = RxList<RecentSearch>();
|
||||||
final listSuggestionSearch = RxList<PresentationEmail>();
|
final listSuggestionSearch = RxList<PresentationEmail>();
|
||||||
final listContactSuggestionSearch = RxList<EmailAddress>();
|
final listContactSuggestionSearch = RxList<EmailAddress>();
|
||||||
final simpleSearchFilter = Rx<SimpleSearchFilter>(SimpleSearchFilter());
|
final searchEmailFilter = SearchEmailFilter.initial().obs;
|
||||||
final searchIsRunning = RxBool(false);
|
final searchIsRunning = RxBool(false);
|
||||||
final emailReceiveTimeType = EmailReceiveTimeType.allTime.obs;
|
final emailReceiveTimeType = EmailReceiveTimeType.allTime.obs;
|
||||||
final selectionMode = Rx<SelectMode>(SelectMode.INACTIVE);
|
final selectionMode = Rx<SelectMode>(SelectMode.INACTIVE);
|
||||||
@@ -118,10 +118,22 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
Session? get session => mailboxDashBoardController.sessionCurrent;
|
Session? get session => mailboxDashBoardController.sessionCurrent;
|
||||||
|
|
||||||
SearchQuery? get searchQuery => simpleSearchFilter.value.text;
|
SearchQuery? get searchQuery => searchEmailFilter.value.text;
|
||||||
|
|
||||||
RxList<PresentationEmail> get listResultSearch => mailboxDashBoardController.listResultSearch;
|
RxList<PresentationEmail> 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<String> get listAddressOfToFiltered => searchEmailFilter.value.to;
|
||||||
|
|
||||||
|
Set<String> get listAddressOfFromFiltered => searchEmailFilter.value.from;
|
||||||
|
|
||||||
SearchEmailController(
|
SearchEmailController(
|
||||||
this._quickSearchEmailInteractor,
|
this._quickSearchEmailInteractor,
|
||||||
this._saveRecentSearchInteractor,
|
this._saveRecentSearchInteractor,
|
||||||
@@ -266,9 +278,9 @@ class SearchEmailController extends BaseController
|
|||||||
session!,
|
session!,
|
||||||
accountId!,
|
accountId!,
|
||||||
limit: limit,
|
limit: limit,
|
||||||
position: simpleSearchFilter.value.position,
|
position: searchEmailFilter.value.position,
|
||||||
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
||||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
||||||
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -311,7 +323,7 @@ class SearchEmailController extends BaseController
|
|||||||
accountId,
|
accountId,
|
||||||
limit: UnsignedInt(5),
|
limit: UnsignedInt(5),
|
||||||
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
||||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
||||||
properties: ThreadConstants.propertiesQuickSearch)
|
properties: ThreadConstants.propertiesQuickSearch)
|
||||||
.then((result) => result.fold(
|
.then((result) => result.fold(
|
||||||
(failure) => <PresentationEmail>[],
|
(failure) => <PresentationEmail>[],
|
||||||
@@ -361,9 +373,9 @@ class SearchEmailController extends BaseController
|
|||||||
session!,
|
session!,
|
||||||
accountId!,
|
accountId!,
|
||||||
limit: ThreadConstants.defaultLimit,
|
limit: ThreadConstants.defaultLimit,
|
||||||
position: simpleSearchFilter.value.position,
|
position: searchEmailFilter.value.position,
|
||||||
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
||||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
||||||
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@@ -416,8 +428,8 @@ class SearchEmailController extends BaseController
|
|||||||
accountId!,
|
accountId!,
|
||||||
limit: ThreadConstants.defaultLimit,
|
limit: ThreadConstants.defaultLimit,
|
||||||
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
||||||
position: simpleSearchFilter.value.position,
|
position: searchEmailFilter.value.position,
|
||||||
filter: simpleSearchFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
||||||
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
||||||
lastEmailId: lastEmail.id
|
lastEmailId: lastEmail.id
|
||||||
));
|
));
|
||||||
@@ -495,7 +507,7 @@ class SearchEmailController extends BaseController
|
|||||||
bool checkQuickSearchFilterSelected(QuickSearchFilter filter) {
|
bool checkQuickSearchFilterSelected(QuickSearchFilter filter) {
|
||||||
switch (filter) {
|
switch (filter) {
|
||||||
case QuickSearchFilter.hasAttachment:
|
case QuickSearchFilter.hasAttachment:
|
||||||
return simpleSearchFilter.value.hasAttachment == true;
|
return searchEmailFilter.value.hasAttachment == true;
|
||||||
case QuickSearchFilter.last7Days:
|
case QuickSearchFilter.last7Days:
|
||||||
return true;
|
return true;
|
||||||
case QuickSearchFilter.sortBy:
|
case QuickSearchFilter.sortBy:
|
||||||
@@ -543,14 +555,14 @@ class SearchEmailController extends BaseController
|
|||||||
if (emailReceiveTimeType == EmailReceiveTimeType.customRange) {
|
if (emailReceiveTimeType == EmailReceiveTimeType.customRange) {
|
||||||
showMultipleViewDateRangePicker(
|
showMultipleViewDateRangePicker(
|
||||||
context,
|
context,
|
||||||
simpleSearchFilter.value.startDate?.value.toLocal(),
|
searchEmailFilter.value.startDate?.value.toLocal(),
|
||||||
simpleSearchFilter.value.endDate?.value.toLocal(),
|
searchEmailFilter.value.endDate?.value.toLocal(),
|
||||||
onCallbackAction: (newStartDate, newEndDate) {
|
onCallbackAction: (newStartDate, newEndDate) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
emailReceiveTimeTypeOption: Some(emailReceiveTimeType),
|
emailReceiveTimeTypeOption: Some(emailReceiveTimeType),
|
||||||
textOption: searchQuery == null
|
textOption: searchQuery == null
|
||||||
? Some(SearchQuery.initial())
|
? Some(SearchQuery.initial())
|
||||||
: optionOf(simpleSearchFilter.value.text),
|
: optionOf(searchEmailFilter.value.text),
|
||||||
beforeOption: const None(),
|
beforeOption: const None(),
|
||||||
startDateOption: optionOf(newStartDate?.toUTCDate()),
|
startDateOption: optionOf(newStartDate?.toUTCDate()),
|
||||||
endDateOption: optionOf(newEndDate?.toUTCDate()),
|
endDateOption: optionOf(newEndDate?.toUTCDate()),
|
||||||
@@ -566,7 +578,7 @@ class SearchEmailController extends BaseController
|
|||||||
emailReceiveTimeTypeOption: Some(emailReceiveTimeType),
|
emailReceiveTimeTypeOption: Some(emailReceiveTimeType),
|
||||||
textOption: searchQuery == null
|
textOption: searchQuery == null
|
||||||
? Some(SearchQuery.initial())
|
? Some(SearchQuery.initial())
|
||||||
: optionOf(simpleSearchFilter.value.text),
|
: optionOf(searchEmailFilter.value.text),
|
||||||
beforeOption: const None(),
|
beforeOption: const None(),
|
||||||
startDateOption: const None(),
|
startDateOption: const None(),
|
||||||
endDateOption: const None(),
|
endDateOption: const None(),
|
||||||
@@ -622,7 +634,7 @@ class SearchEmailController extends BaseController
|
|||||||
PrefixEmailAddress prefixEmailAddress
|
PrefixEmailAddress prefixEmailAddress
|
||||||
) async {
|
) async {
|
||||||
if (accountId != null && session != null) {
|
if (accountId != null && session != null) {
|
||||||
final listContactSelected = simpleSearchFilter.value.getContactApplied(prefixEmailAddress);
|
final listContactSelected = searchEmailFilter.value.getContactApplied(prefixEmailAddress);
|
||||||
final arguments = ContactArguments(accountId!, session!, listContactSelected);
|
final arguments = ContactArguments(accountId!, session!, listContactSelected);
|
||||||
|
|
||||||
final newContact = await push(AppRoutes.contact, arguments: arguments);
|
final newContact = await push(AppRoutes.contact, arguments: arguments);
|
||||||
@@ -647,18 +659,18 @@ class SearchEmailController extends BaseController
|
|||||||
switch(prefixEmailAddress) {
|
switch(prefixEmailAddress) {
|
||||||
case PrefixEmailAddress.from:
|
case PrefixEmailAddress.from:
|
||||||
if (listContactSelected.first == newContact.email) {
|
if (listContactSelected.first == newContact.email) {
|
||||||
simpleSearchFilter.value.from.clear();
|
searchEmailFilter.value.from.clear();
|
||||||
} else {
|
} else {
|
||||||
simpleSearchFilter.value.from.clear();
|
searchEmailFilter.value.from.clear();
|
||||||
simpleSearchFilter.value.from.add(newContact.email!);
|
searchEmailFilter.value.from.add(newContact.email!);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PrefixEmailAddress.to:
|
case PrefixEmailAddress.to:
|
||||||
if (listContactSelected.first == newContact.email) {
|
if (listContactSelected.first == newContact.email) {
|
||||||
simpleSearchFilter.value.to.clear();
|
searchEmailFilter.value.to.clear();
|
||||||
} else {
|
} else {
|
||||||
simpleSearchFilter.value.to.clear();
|
searchEmailFilter.value.to.clear();
|
||||||
simpleSearchFilter.value.to.add(newContact.email!);
|
searchEmailFilter.value.to.add(newContact.email!);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -667,10 +679,10 @@ class SearchEmailController extends BaseController
|
|||||||
} else {
|
} else {
|
||||||
switch(prefixEmailAddress) {
|
switch(prefixEmailAddress) {
|
||||||
case PrefixEmailAddress.from:
|
case PrefixEmailAddress.from:
|
||||||
simpleSearchFilter.value.from.add(newContact.email!);
|
searchEmailFilter.value.from.add(newContact.email!);
|
||||||
break;
|
break;
|
||||||
case PrefixEmailAddress.to:
|
case PrefixEmailAddress.to:
|
||||||
simpleSearchFilter.value.to.add(newContact.email!);
|
searchEmailFilter.value.to.add(newContact.email!);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -680,14 +692,14 @@ class SearchEmailController extends BaseController
|
|||||||
switch(prefixEmailAddress) {
|
switch(prefixEmailAddress) {
|
||||||
case PrefixEmailAddress.from:
|
case PrefixEmailAddress.from:
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
fromOption: Some(simpleSearchFilter.value.from),
|
fromOption: Some(searchEmailFilter.value.from),
|
||||||
beforeOption: const None(),
|
beforeOption: const None(),
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
case PrefixEmailAddress.to:
|
case PrefixEmailAddress.to:
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
toOption: Some(simpleSearchFilter.value.to),
|
toOption: Some(searchEmailFilter.value.to),
|
||||||
beforeOption: const None(),
|
beforeOption: const None(),
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
||||||
);
|
);
|
||||||
@@ -712,7 +724,7 @@ class SearchEmailController extends BaseController
|
|||||||
Option<Set<Comparator>>? sortOrderOption,
|
Option<Set<Comparator>>? sortOrderOption,
|
||||||
Option<int>? positionOption,
|
Option<int>? positionOption,
|
||||||
}) {
|
}) {
|
||||||
simpleSearchFilter.value = simpleSearchFilter.value.copyWith(
|
searchEmailFilter.value = searchEmailFilter.value.copyWith(
|
||||||
fromOption: fromOption,
|
fromOption: fromOption,
|
||||||
toOption: toOption,
|
toOption: toOption,
|
||||||
textOption: textOption,
|
textOption: textOption,
|
||||||
@@ -725,7 +737,7 @@ class SearchEmailController extends BaseController
|
|||||||
sortOrderOption: sortOrderOption,
|
sortOrderOption: sortOrderOption,
|
||||||
positionOption: positionOption,
|
positionOption: positionOption,
|
||||||
);
|
);
|
||||||
simpleSearchFilter.refresh();
|
searchEmailFilter.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
void onTextSearchChange(String text) {
|
void onTextSearchChange(String text) {
|
||||||
@@ -758,7 +770,7 @@ class SearchEmailController extends BaseController
|
|||||||
listSuggestionSearch.clear();
|
listSuggestionSearch.clear();
|
||||||
listContactSuggestionSearch.clear();
|
listContactSuggestionSearch.clear();
|
||||||
listResultSearch.clear();
|
listResultSearch.clear();
|
||||||
simpleSearchFilter.value = SimpleSearchFilter();
|
searchEmailFilter.value = SearchEmailFilter.initial();
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeSearchView({BuildContext? context}) {
|
void closeSearchView({BuildContext? context}) {
|
||||||
|
|||||||
@@ -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/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/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/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/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/utils/search_email_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/search/email/presentation/widgets/app_bar_selection_mode.dart';
|
import 'package:tmail_ui_user/features/search/email/presentation/widgets/app_bar_selection_mode.dart';
|
||||||
@@ -265,8 +264,8 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
filter.getTitle(
|
filter.getTitle(
|
||||||
context,
|
context,
|
||||||
receiveTimeType: controller.emailReceiveTimeType.value,
|
receiveTimeType: controller.emailReceiveTimeType.value,
|
||||||
startDate: controller.simpleSearchFilter.value.startDate?.value.toLocal(),
|
startDate: controller.startDateFiltered,
|
||||||
endDate: controller.simpleSearchFilter.value.endDate?.value.toLocal(),
|
endDate: controller.endDateFiltered,
|
||||||
sortOrderType: controller.emailSortOrderType.value
|
sortOrderType: controller.emailSortOrderType.value
|
||||||
),
|
),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
@@ -685,13 +684,13 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
|
|
||||||
Widget _buildSearchFilterByMailboxButton(BuildContext context) {
|
Widget _buildSearchFilterByMailboxButton(BuildContext context) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
final filterSelected = controller.simpleSearchFilter.value.searchFilterByMailboxApplied;
|
final filterSelected = controller.searchEmailFilter.value.searchFilterByMailboxApplied;
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: const EdgeInsets.only(right: 8),
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
onTap: () => controller.selectMailboxForSearchFilter(
|
onTap: () => controller.selectMailboxForSearchFilter(
|
||||||
context,
|
context,
|
||||||
controller.simpleSearchFilter.value.mailbox),
|
controller.mailboxFiltered),
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||||
child: Container(
|
child: Container(
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
@@ -709,7 +708,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
Text(
|
Text(
|
||||||
filterSelected
|
filterSelected
|
||||||
? controller.simpleSearchFilter.value.getMailboxName(context)
|
? controller.searchEmailFilter.value.getMailboxName(context)
|
||||||
: AppLocalizations.of(context).folder,
|
: AppLocalizations.of(context).folder,
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||||
@@ -740,7 +739,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
|
|
||||||
Widget _buildSearchFilterByContactButton(BuildContext context, PrefixEmailAddress prefixEmailAddress) {
|
Widget _buildSearchFilterByContactButton(BuildContext context, PrefixEmailAddress prefixEmailAddress) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
final filterSelected = controller.simpleSearchFilter.value
|
final filterSelected = controller.searchEmailFilter.value
|
||||||
.searchFilterByContactApplied(prefixEmailAddress);
|
.searchFilterByContactApplied(prefixEmailAddress);
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.only(right: 8),
|
padding: const EdgeInsets.only(right: 8),
|
||||||
@@ -763,8 +762,8 @@ class SearchEmailView extends GetWidget<SearchEmailController>
|
|||||||
const SizedBox(width: 4),
|
const SizedBox(width: 4),
|
||||||
Text(
|
Text(
|
||||||
filterSelected
|
filterSelected
|
||||||
? controller.simpleSearchFilter.value.getNameContactApplied(context, prefixEmailAddress)
|
? controller.searchEmailFilter.value.getNameContactApplied(context, prefixEmailAddress)
|
||||||
: controller.simpleSearchFilter.value.getNameContactDefault(context, prefixEmailAddress),
|
: controller.searchEmailFilter.value.getNameContactDefault(context, prefixEmailAddress),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||||
|
|||||||
@@ -1316,7 +1316,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
searchController.enableSearch();
|
searchController.enableSearch();
|
||||||
if (searchQuery != null) {
|
if (searchQuery != null) {
|
||||||
searchController.updateTextSearch(searchQuery.value);
|
searchController.updateTextSearch(searchQuery.value);
|
||||||
searchController.updateFilterEmail(text: searchQuery);
|
searchController.updateFilterEmail(textOption: Some(searchQuery));
|
||||||
if (currentContext != null) {
|
if (currentContext != null) {
|
||||||
FocusScope.of(currentContext!).unfocus();
|
FocusScope.of(currentContext!).unfocus();
|
||||||
}
|
}
|
||||||
@@ -1331,7 +1331,7 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
dispatchState(Right(SearchingState()));
|
dispatchState(Right(SearchingState()));
|
||||||
searchController.enableSearch();
|
searchController.enableSearch();
|
||||||
searchController.updateTextSearch(searchQuery.value);
|
searchController.updateTextSearch(searchQuery.value);
|
||||||
searchController.updateFilterEmail(text: searchQuery);
|
searchController.updateFilterEmail(textOption: Some(searchQuery));
|
||||||
if (currentContext != null) {
|
if (currentContext != null) {
|
||||||
FocusScope.of(currentContext!).unfocus();
|
FocusScope.of(currentContext!).unfocus();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user