TF-4229 Implement advanced search email by label
This commit is contained in:
+11
-2
@@ -131,6 +131,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
Option<UTCDate>? endDateOption,
|
Option<UTCDate>? endDateOption,
|
||||||
Option<int>? positionOption,
|
Option<int>? positionOption,
|
||||||
Option<EmailSortOrderType>? sortOrderTypeOption,
|
Option<EmailSortOrderType>? sortOrderTypeOption,
|
||||||
|
Option<Label>? labelOption,
|
||||||
}) {
|
}) {
|
||||||
_memorySearchFilter = _memorySearchFilter.copyWith(
|
_memorySearchFilter = _memorySearchFilter.copyWith(
|
||||||
fromOption: fromOption,
|
fromOption: fromOption,
|
||||||
@@ -147,7 +148,9 @@ class AdvancedFilterController extends BaseController {
|
|||||||
startDateOption: startDateOption,
|
startDateOption: startDateOption,
|
||||||
endDateOption: endDateOption,
|
endDateOption: endDateOption,
|
||||||
positionOption: positionOption,
|
positionOption: positionOption,
|
||||||
sortOrderTypeOption: sortOrderTypeOption);
|
sortOrderTypeOption: sortOrderTypeOption,
|
||||||
|
labelOption: labelOption,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _synchronizeSearchFilter() {
|
void _synchronizeSearchFilter() {
|
||||||
@@ -190,6 +193,8 @@ class AdvancedFilterController extends BaseController {
|
|||||||
{KeyWordIdentifier.emailFlagged.value},
|
{KeyWordIdentifier.emailFlagged.value},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final labelOption = optionOf(selectedLabel.value);
|
||||||
|
|
||||||
_updateMemorySearchFilter(
|
_updateMemorySearchFilter(
|
||||||
textOption: textOption,
|
textOption: textOption,
|
||||||
notKeywordOption: notKeywordsOption,
|
notKeywordOption: notKeywordsOption,
|
||||||
@@ -203,7 +208,8 @@ class AdvancedFilterController extends BaseController {
|
|||||||
unreadOption: unreadOption,
|
unreadOption: unreadOption,
|
||||||
hasKeywordOption: hasKeywordOption,
|
hasKeywordOption: hasKeywordOption,
|
||||||
startDateOption: startDateOption,
|
startDateOption: startDateOption,
|
||||||
endDateOption: endDateOption
|
endDateOption: endDateOption,
|
||||||
|
labelOption: labelOption,
|
||||||
);
|
);
|
||||||
|
|
||||||
searchController.synchronizeSearchFilter(_memorySearchFilter);
|
searchController.synchronizeSearchFilter(_memorySearchFilter);
|
||||||
@@ -314,6 +320,8 @@ class AdvancedFilterController extends BaseController {
|
|||||||
: StringConvert.writeNullToEmpty(
|
: StringConvert.writeNullToEmpty(
|
||||||
_memorySearchFilter.mailbox?.getDisplayName(context));
|
_memorySearchFilter.mailbox?.getDisplayName(context));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectedLabel.value = _memorySearchFilter.label;
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectDateRange(BuildContext context) {
|
void selectDateRange(BuildContext context) {
|
||||||
@@ -482,6 +490,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
listFromEmailAddress.clear();
|
listFromEmailAddress.clear();
|
||||||
listToEmailAddress.clear();
|
listToEmailAddress.clear();
|
||||||
_destinationMailboxSelected = null;
|
_destinationMailboxSelected = null;
|
||||||
|
selectedLabel.value = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _clearAllTextFieldInput() {
|
void _clearAllTextFieldInput() {
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:jmap_dart_client/jmap/core/filter/operator/logic_filter_operator
|
|||||||
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:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||||
|
import 'package:labels/model/label.dart';
|
||||||
import 'package:model/email/prefix_email_address.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';
|
||||||
@@ -35,6 +36,7 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
final UTCDate? endDate;
|
final UTCDate? endDate;
|
||||||
final int? position;
|
final int? position;
|
||||||
final EmailSortOrderType sortOrderType;
|
final EmailSortOrderType sortOrderType;
|
||||||
|
final Label? label;
|
||||||
|
|
||||||
factory SearchEmailFilter.initial() => SearchEmailFilter();
|
factory SearchEmailFilter.initial() => SearchEmailFilter();
|
||||||
|
|
||||||
@@ -49,6 +51,7 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
this.startDate,
|
this.startDate,
|
||||||
this.endDate,
|
this.endDate,
|
||||||
this.position,
|
this.position,
|
||||||
|
this.label,
|
||||||
Set<String>? from,
|
Set<String>? from,
|
||||||
Set<String>? to,
|
Set<String>? to,
|
||||||
EmailReceiveTimeType? emailReceiveTimeType,
|
EmailReceiveTimeType? emailReceiveTimeType,
|
||||||
@@ -83,6 +86,7 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
Option<UTCDate>? endDateOption,
|
Option<UTCDate>? endDateOption,
|
||||||
Option<int>? positionOption,
|
Option<int>? positionOption,
|
||||||
Option<EmailSortOrderType>? sortOrderTypeOption,
|
Option<EmailSortOrderType>? sortOrderTypeOption,
|
||||||
|
Option<Label>? labelOption,
|
||||||
}) {
|
}) {
|
||||||
return SearchEmailFilter(
|
return SearchEmailFilter(
|
||||||
from: getOptionParam(fromOption, from),
|
from: getOptionParam(fromOption, from),
|
||||||
@@ -100,6 +104,7 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
endDate: getOptionParam(endDateOption, endDate),
|
endDate: getOptionParam(endDateOption, endDate),
|
||||||
position: getOptionParam(positionOption, position),
|
position: getOptionParam(positionOption, position),
|
||||||
sortOrderType: getOptionParam(sortOrderTypeOption, sortOrderType),
|
sortOrderType: getOptionParam(sortOrderTypeOption, sortOrderType),
|
||||||
|
label: getOptionParam(labelOption, label),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,6 +151,8 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
Operator.AND,
|
Operator.AND,
|
||||||
hasKeyword.map((e) => EmailFilterCondition(hasKeyword: e)).toSet(),
|
hasKeyword.map((e) => EmailFilterCondition(hasKeyword: e)).toSet(),
|
||||||
),
|
),
|
||||||
|
if (label != null)
|
||||||
|
EmailFilterCondition(hasKeyword: label!.keyword),
|
||||||
if (moreFilterCondition != null && moreFilterCondition.hasCondition)
|
if (moreFilterCondition != null && moreFilterCondition.hasCondition)
|
||||||
moreFilterCondition
|
moreFilterCondition
|
||||||
};
|
};
|
||||||
@@ -203,6 +210,7 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
emailReceiveTimeType != EmailReceiveTimeType.allTime ||
|
emailReceiveTimeType != EmailReceiveTimeType.allTime ||
|
||||||
sortOrderType != SearchEmailFilter.defaultSortOrder ||
|
sortOrderType != SearchEmailFilter.defaultSortOrder ||
|
||||||
(mailbox != null && mailbox?.id != PresentationMailbox.unifiedMailbox.id) ||
|
(mailbox != null && mailbox?.id != PresentationMailbox.unifiedMailbox.id) ||
|
||||||
|
label != null ||
|
||||||
hasAttachment ||
|
hasAttachment ||
|
||||||
unread;
|
unread;
|
||||||
|
|
||||||
@@ -217,6 +225,7 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
emailReceiveTimeType == EmailReceiveTimeType.allTime &&
|
emailReceiveTimeType == EmailReceiveTimeType.allTime &&
|
||||||
sortOrderType == SearchEmailFilter.defaultSortOrder &&
|
sortOrderType == SearchEmailFilter.defaultSortOrder &&
|
||||||
(mailbox == null || mailbox?.id == PresentationMailbox.unifiedMailbox.id) &&
|
(mailbox == null || mailbox?.id == PresentationMailbox.unifiedMailbox.id) &&
|
||||||
|
label == null &&
|
||||||
!hasAttachment &&
|
!hasAttachment &&
|
||||||
!unread;
|
!unread;
|
||||||
|
|
||||||
@@ -236,6 +245,7 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
startDate,
|
startDate,
|
||||||
endDate,
|
endDate,
|
||||||
position,
|
position,
|
||||||
sortOrderType
|
sortOrderType,
|
||||||
|
label,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user