TF-1179 Reset before in filter when updating the filter
This commit is contained in:
committed by
Dat H. Pham
parent
009cf7cbf8
commit
17e6cde83e
@@ -1,3 +1,4 @@
|
|||||||
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:flutter/material.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';
|
||||||
@@ -33,25 +34,33 @@ class SimpleSearchFilter with EquatableMixin {
|
|||||||
emailReceiveTimeType = emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
|
emailReceiveTimeType = emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
|
||||||
|
|
||||||
SimpleSearchFilter copyWith({
|
SimpleSearchFilter copyWith({
|
||||||
Set<String>? from,
|
Option<Set<String>>? fromOption,
|
||||||
Set<String>? to,
|
Option<Set<String>>? toOption,
|
||||||
SearchQuery? text,
|
Option<SearchQuery>? textOption,
|
||||||
PresentationMailbox? mailbox,
|
Option<PresentationMailbox>? mailboxOption,
|
||||||
EmailReceiveTimeType? emailReceiveTimeType,
|
Option<EmailReceiveTimeType>? emailReceiveTimeTypeOption,
|
||||||
bool? hasAttachment,
|
Option<bool>? hasAttachmentOption,
|
||||||
UTCDate? before,
|
Option<UTCDate>? beforeOption,
|
||||||
}) {
|
}) {
|
||||||
return SimpleSearchFilter(
|
return SimpleSearchFilter(
|
||||||
from: from ?? this.from,
|
from: _getOptionParam(fromOption, from),
|
||||||
to: to ?? this.to,
|
to: _getOptionParam(toOption, to),
|
||||||
text: text ?? this.text,
|
text: _getOptionParam(textOption, text),
|
||||||
mailbox: mailbox ?? this.mailbox,
|
mailbox: _getOptionParam(mailboxOption, mailbox),
|
||||||
emailReceiveTimeType: emailReceiveTimeType ?? this.emailReceiveTimeType,
|
emailReceiveTimeType: _getOptionParam(emailReceiveTimeTypeOption, emailReceiveTimeType),
|
||||||
hasAttachment: hasAttachment ?? this.hasAttachment,
|
hasAttachment: _getOptionParam(hasAttachmentOption, hasAttachment),
|
||||||
before: before ?? this.before,
|
before: _getOptionParam(beforeOption, before),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
T? _getOptionParam<T>(Option<T?>? option, T? defaultValue) {
|
||||||
|
if (option != null) {
|
||||||
|
return option.toNullable();
|
||||||
|
} else {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Filter? mappingToEmailFilterCondition() {
|
Filter? mappingToEmailFilterCondition() {
|
||||||
final emailEmailFilterConditionShared = EmailFilterCondition(
|
final emailEmailFilterConditionShared = EmailFilterCondition(
|
||||||
text: text?.value.trim().isNotEmpty == true
|
text: text?.value.trim().isNotEmpty == true
|
||||||
@@ -86,30 +95,6 @@ class SimpleSearchFilter with EquatableMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
extension SearchEmailFilterExtension on SimpleSearchFilter {
|
extension SearchEmailFilterExtension on SimpleSearchFilter {
|
||||||
|
|
||||||
SimpleSearchFilter toSimpleSearchFilterByBefore({UTCDate? newBefore}) {
|
|
||||||
return SimpleSearchFilter(
|
|
||||||
from: from,
|
|
||||||
to: to,
|
|
||||||
text: text,
|
|
||||||
mailbox: mailbox,
|
|
||||||
emailReceiveTimeType: emailReceiveTimeType,
|
|
||||||
hasAttachment: hasAttachment,
|
|
||||||
before: newBefore,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
SimpleSearchFilter toSimpleSearchFilterByMailbox({PresentationMailbox? newMailbox}) {
|
|
||||||
return SimpleSearchFilter(
|
|
||||||
from: from,
|
|
||||||
text: text,
|
|
||||||
mailbox: newMailbox,
|
|
||||||
emailReceiveTimeType: emailReceiveTimeType,
|
|
||||||
hasAttachment: hasAttachment,
|
|
||||||
before: before,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool get searchFilterByMailboxApplied => mailbox != null;
|
bool get searchFilterByMailboxApplied => mailbox != null;
|
||||||
|
|
||||||
bool get searchFilterByFromApplied => from.isNotEmpty;
|
bool get searchFilterByFromApplied => from.isNotEmpty;
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.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/unsigned_int.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_address.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
||||||
@@ -157,7 +157,10 @@ class SearchEmailController extends BaseController
|
|||||||
_deBouncerTime.values.listen((value) async {
|
_deBouncerTime.values.listen((value) async {
|
||||||
log('SearchEmailController::_initializeDebounceTimeTextSearchChange(): $value');
|
log('SearchEmailController::_initializeDebounceTimeTextSearchChange(): $value');
|
||||||
currentSearchText.value = value;
|
currentSearchText.value = value;
|
||||||
_updateSimpleSearchFilter(text: value.isNotEmpty ? SearchQuery(value) : null);
|
_updateSimpleSearchFilter(
|
||||||
|
textOption: value.isNotEmpty ? Some(SearchQuery(value)) : const None(),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
if (value.isNotEmpty && accountId != null) {
|
if (value.isNotEmpty && accountId != null) {
|
||||||
listSuggestionSearch.value = await quickSearchEmails(accountId: accountId!);
|
listSuggestionSearch.value = await quickSearchEmails(accountId: accountId!);
|
||||||
} else {
|
} else {
|
||||||
@@ -207,8 +210,7 @@ class SearchEmailController extends BaseController
|
|||||||
final limit = listResultSearch.isNotEmpty
|
final limit = listResultSearch.isNotEmpty
|
||||||
? UnsignedInt(listResultSearch.length)
|
? UnsignedInt(listResultSearch.length)
|
||||||
: ThreadConstants.defaultLimit;
|
: ThreadConstants.defaultLimit;
|
||||||
simpleSearchFilter.value = simpleSearchFilter.value.toSimpleSearchFilterByBefore(newBefore: null);
|
_updateSimpleSearchFilter(beforeOption: const None());
|
||||||
|
|
||||||
consumeState(_refreshChangesSearchEmailInteractor.execute(
|
consumeState(_refreshChangesSearchEmailInteractor.execute(
|
||||||
accountId!,
|
accountId!,
|
||||||
limit: limit,
|
limit: limit,
|
||||||
@@ -268,6 +270,7 @@ class SearchEmailController extends BaseController
|
|||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
|
|
||||||
if (accountId != null) {
|
if (accountId != null) {
|
||||||
|
canSearchMore = true;
|
||||||
searchIsRunning.value = true;
|
searchIsRunning.value = true;
|
||||||
cancelSelectionMode(context);
|
cancelSelectionMode(context);
|
||||||
|
|
||||||
@@ -309,7 +312,7 @@ class SearchEmailController extends BaseController
|
|||||||
void searchMoreEmailsAction() {
|
void searchMoreEmailsAction() {
|
||||||
if (canSearchMore && accountId != null) {
|
if (canSearchMore && accountId != null) {
|
||||||
final lastEmail = listResultSearch.last;
|
final lastEmail = listResultSearch.last;
|
||||||
_updateSimpleSearchFilter(before: lastEmail.receivedAt);
|
_updateSimpleSearchFilter(beforeOption: optionOf(lastEmail.receivedAt));
|
||||||
|
|
||||||
consumeState(_searchMoreEmailInteractor.execute(
|
consumeState(_searchMoreEmailInteractor.execute(
|
||||||
accountId!,
|
accountId!,
|
||||||
@@ -343,18 +346,27 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
void showAllResultSearchAction(BuildContext context, String query) {
|
void showAllResultSearchAction(BuildContext context, String query) {
|
||||||
setTextInputSearchForm(query);
|
setTextInputSearchForm(query);
|
||||||
_updateSimpleSearchFilter(text: SearchQuery(query));
|
_updateSimpleSearchFilter(
|
||||||
|
textOption: Some(SearchQuery(query)),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void searchEmailByRecentAction(BuildContext context, RecentSearch recentSearch) {
|
void searchEmailByRecentAction(BuildContext context, RecentSearch recentSearch) {
|
||||||
setTextInputSearchForm(recentSearch.value);
|
setTextInputSearchForm(recentSearch.value);
|
||||||
_updateSimpleSearchFilter(text: SearchQuery(recentSearch.value));
|
_updateSimpleSearchFilter(
|
||||||
|
textOption: Some(SearchQuery(recentSearch.value)),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void submitSearchAction(BuildContext context, String query) {
|
void submitSearchAction(BuildContext context, String query) {
|
||||||
_updateSimpleSearchFilter(text: SearchQuery(query));
|
_updateSimpleSearchFilter(
|
||||||
|
textOption: Some(SearchQuery(query)),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,15 +393,24 @@ class SearchEmailController extends BaseController
|
|||||||
final filterSelected = checkQuickSearchFilterSelected(filter);
|
final filterSelected = checkQuickSearchFilterSelected(filter);
|
||||||
switch (filter) {
|
switch (filter) {
|
||||||
case QuickSearchFilter.hasAttachment:
|
case QuickSearchFilter.hasAttachment:
|
||||||
_updateSimpleSearchFilter(hasAttachment: !filterSelected);
|
_updateSimpleSearchFilter(
|
||||||
|
hasAttachmentOption: Some(!filterSelected),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case QuickSearchFilter.last7Days:
|
case QuickSearchFilter.last7Days:
|
||||||
if (filterSelected) {
|
if (filterSelected) {
|
||||||
_setEmailReceiveTimeType(null);
|
_setEmailReceiveTimeType(null);
|
||||||
_updateSimpleSearchFilter(emailReceiveTimeType: EmailReceiveTimeType.allTime);
|
_updateSimpleSearchFilter(
|
||||||
|
emailReceiveTimeTypeOption: const Some(EmailReceiveTimeType.allTime),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
_setEmailReceiveTimeType(EmailReceiveTimeType.last7Days);
|
_setEmailReceiveTimeType(EmailReceiveTimeType.last7Days);
|
||||||
_updateSimpleSearchFilter(emailReceiveTimeType: EmailReceiveTimeType.last7Days);
|
_updateSimpleSearchFilter(
|
||||||
|
emailReceiveTimeTypeOption: const Some(EmailReceiveTimeType.last7Days),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -406,12 +427,20 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
if (emailReceiveTimeType != null) {
|
if (emailReceiveTimeType != null) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
emailReceiveTimeType: emailReceiveTimeType,
|
emailReceiveTimeTypeOption: Some(emailReceiveTimeType),
|
||||||
text: searchQuery == null ? SearchQuery.initial() : simpleSearchFilter.value.text);
|
textOption: searchQuery == null
|
||||||
|
? Some(SearchQuery.initial())
|
||||||
|
: optionOf(simpleSearchFilter.value.text),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
emailReceiveTimeType: EmailReceiveTimeType.allTime,
|
emailReceiveTimeTypeOption: const Some(EmailReceiveTimeType.allTime),
|
||||||
text: searchQuery == null ? SearchQuery.initial() : simpleSearchFilter.value.text);
|
textOption: searchQuery == null
|
||||||
|
? Some(SearchQuery.initial())
|
||||||
|
: optionOf(simpleSearchFilter.value.text),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
_setEmailReceiveTimeType(emailReceiveTimeType);
|
_setEmailReceiveTimeType(emailReceiveTimeType);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
@@ -429,8 +458,11 @@ class SearchEmailController extends BaseController
|
|||||||
arguments: arguments,
|
arguments: arguments,
|
||||||
onSelectedMailbox: (destinationMailbox) {
|
onSelectedMailbox: (destinationMailbox) {
|
||||||
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
||||||
if (mailbox?.id != mailboxSelected?.id) {
|
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
|
||||||
simpleSearchFilter.value = simpleSearchFilter.value.toSimpleSearchFilterByMailbox(newMailbox: mailboxSelected);
|
_updateSimpleSearchFilter(
|
||||||
|
mailboxOption: Some(mailboxSelected),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -441,8 +473,11 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
if (destinationMailbox is PresentationMailbox) {
|
if (destinationMailbox is PresentationMailbox) {
|
||||||
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
final mailboxSelected = destinationMailbox == PresentationMailbox.unifiedMailbox ? null : destinationMailbox;
|
||||||
if (mailbox?.id != mailboxSelected?.id) {
|
if (mailboxSelected != null && mailbox?.id != mailboxSelected.id) {
|
||||||
simpleSearchFilter.value = simpleSearchFilter.value.toSimpleSearchFilterByMailbox(newMailbox: mailboxSelected);
|
_updateSimpleSearchFilter(
|
||||||
|
mailboxOption: Some(mailboxSelected),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -526,10 +561,16 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
switch(prefixEmailAddress) {
|
switch(prefixEmailAddress) {
|
||||||
case PrefixEmailAddress.from:
|
case PrefixEmailAddress.from:
|
||||||
_updateSimpleSearchFilter(from: simpleSearchFilter.value.from);
|
_updateSimpleSearchFilter(
|
||||||
|
fromOption: Some(simpleSearchFilter.value.from),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
case PrefixEmailAddress.to:
|
case PrefixEmailAddress.to:
|
||||||
_updateSimpleSearchFilter(to: simpleSearchFilter.value.to);
|
_updateSimpleSearchFilter(
|
||||||
|
toOption: Some(simpleSearchFilter.value.to),
|
||||||
|
beforeOption: const None()
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -539,22 +580,22 @@ class SearchEmailController extends BaseController
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _updateSimpleSearchFilter({
|
void _updateSimpleSearchFilter({
|
||||||
Set<String>? from,
|
Option<Set<String>>? fromOption,
|
||||||
Set<String>? to,
|
Option<Set<String>>? toOption,
|
||||||
SearchQuery? text,
|
Option<SearchQuery>? textOption,
|
||||||
PresentationMailbox? mailbox,
|
Option<PresentationMailbox>? mailboxOption,
|
||||||
EmailReceiveTimeType? emailReceiveTimeType,
|
Option<EmailReceiveTimeType>? emailReceiveTimeTypeOption,
|
||||||
bool? hasAttachment,
|
Option<bool>? hasAttachmentOption,
|
||||||
UTCDate? before,
|
Option<UTCDate>? beforeOption,
|
||||||
}) {
|
}) {
|
||||||
simpleSearchFilter.value = simpleSearchFilter.value.copyWith(
|
simpleSearchFilter.value = simpleSearchFilter.value.copyWith(
|
||||||
from: from,
|
fromOption: fromOption,
|
||||||
to: to,
|
toOption: toOption,
|
||||||
text: text,
|
textOption: textOption,
|
||||||
mailbox: mailbox,
|
mailboxOption: mailboxOption,
|
||||||
emailReceiveTimeType: emailReceiveTimeType,
|
emailReceiveTimeTypeOption: emailReceiveTimeTypeOption,
|
||||||
hasAttachment: hasAttachment,
|
hasAttachmentOption: hasAttachmentOption,
|
||||||
before: before,
|
beforeOption: beforeOption,
|
||||||
);
|
);
|
||||||
simpleSearchFilter.refresh();
|
simpleSearchFilter.refresh();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user