TF-3006 [WEB] Handle mail address in quick search bar
This commit is contained in:
@@ -54,13 +54,15 @@ class OpenEmailDetailedFromSuggestionQuickSearchAction extends DashBoardAction {
|
|||||||
List<Object?> get props => [presentationEmail];
|
List<Object?> get props => [presentationEmail];
|
||||||
}
|
}
|
||||||
|
|
||||||
class StartSearchEmailAction extends DashBoardAction {
|
class StartSearchEmailAction extends DashBoardAction {}
|
||||||
final QuickSearchFilter? filter;
|
|
||||||
|
|
||||||
StartSearchEmailAction({this.filter});
|
class StartSearchEmailBySearchFilterAction extends DashBoardAction {
|
||||||
|
final QuickSearchFilter searchFilter;
|
||||||
|
|
||||||
|
StartSearchEmailBySearchFilterAction(this.searchFilter);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [filter];
|
List<Object?> get props => [searchFilter];
|
||||||
}
|
}
|
||||||
|
|
||||||
class EmptyTrashAction extends DashBoardAction {}
|
class EmptyTrashAction extends DashBoardAction {}
|
||||||
@@ -154,3 +156,5 @@ class CancelSelectionSearchEmailAction extends DashBoardAction {}
|
|||||||
class OpenAdvancedSearchViewAction extends DashBoardAction {}
|
class OpenAdvancedSearchViewAction extends DashBoardAction {}
|
||||||
|
|
||||||
class ClearSearchFilterAppliedAction extends DashBoardAction {}
|
class ClearSearchFilterAppliedAction extends DashBoardAction {}
|
||||||
|
|
||||||
|
class ClearAdvancedSearchFilterEmailAction extends DashBoardAction {}
|
||||||
+17
-20
@@ -79,14 +79,9 @@ class AdvancedFilterController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void clearSearchFilter() {
|
void clearSearchFilter() {
|
||||||
searchController.clearSearchFilter();
|
|
||||||
_resetAllToOriginalValue();
|
_resetAllToOriginalValue();
|
||||||
_clearAllTextFieldInput();
|
_clearAllTextFieldInput();
|
||||||
searchController.searchInputController.clear();
|
_mailboxDashBoardController.handleClearAdvancedSearchFilterEmail();
|
||||||
searchController.clearSortOrder();
|
|
||||||
searchController.deactivateAdvancedSearch();
|
|
||||||
searchController.isAdvancedSearchViewOpen.value = false;
|
|
||||||
_mailboxDashBoardController.searchEmail();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void _updateFilterEmailFromAdvancedSearchView() {
|
void _updateFilterEmailFromAdvancedSearchView() {
|
||||||
@@ -119,8 +114,6 @@ class AdvancedFilterController extends BaseController {
|
|||||||
searchController.updateFilterEmail(toOption: const None());
|
searchController.updateFilterEmail(toOption: const None());
|
||||||
}
|
}
|
||||||
|
|
||||||
searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder());
|
|
||||||
|
|
||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
mailboxOption: optionOf(_destinationMailboxSelected),
|
mailboxOption: optionOf(_destinationMailboxSelected),
|
||||||
subjectOption: optionOf(subjectFilterInputController.text),
|
subjectOption: optionOf(subjectFilterInputController.text),
|
||||||
@@ -170,7 +163,7 @@ class AdvancedFilterController extends BaseController {
|
|||||||
searchController.updateFilterEmail(beforeOption: const None());
|
searchController.updateFilterEmail(beforeOption: const None());
|
||||||
}
|
}
|
||||||
searchController.isAdvancedSearchViewOpen.value = false;
|
searchController.isAdvancedSearchViewOpen.value = false;
|
||||||
_mailboxDashBoardController.searchEmail();
|
_mailboxDashBoardController.handleAdvancedSearchEmail();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<List<EmailAddress>> getAutoCompleteSuggestion(String word) async {
|
Future<List<EmailAddress>> getAutoCompleteSuggestion(String word) async {
|
||||||
@@ -405,17 +398,8 @@ class AdvancedFilterController extends BaseController {
|
|||||||
);
|
);
|
||||||
} else if (action is ClearDateRangeToAdvancedSearch) {
|
} else if (action is ClearDateRangeToAdvancedSearch) {
|
||||||
_updateDateRangeTime(action.receiveTime);
|
_updateDateRangeTime(action.receiveTime);
|
||||||
} else if (action is StartSearchEmailAction) {
|
} else if (action is StartSearchEmailBySearchFilterAction) {
|
||||||
switch(action.filter) {
|
_handleSearchEmailBySearchFilterAction(action.searchFilter);
|
||||||
case QuickSearchFilter.from:
|
|
||||||
_updateFromField();
|
|
||||||
break;
|
|
||||||
case QuickSearchFilter.to:
|
|
||||||
_updateToField();
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else if (action is SearchEmailByFromFieldsAction) {
|
} else if (action is SearchEmailByFromFieldsAction) {
|
||||||
searchController.clearSearchFilter();
|
searchController.clearSearchFilter();
|
||||||
_resetAllToOriginalValue();
|
_resetAllToOriginalValue();
|
||||||
@@ -480,6 +464,19 @@ class AdvancedFilterController extends BaseController {
|
|||||||
applyAdvancedSearchFilter();
|
applyAdvancedSearchFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _handleSearchEmailBySearchFilterAction(QuickSearchFilter searchFilter) {
|
||||||
|
switch(searchFilter) {
|
||||||
|
case QuickSearchFilter.from:
|
||||||
|
_updateFromField();
|
||||||
|
break;
|
||||||
|
case QuickSearchFilter.to:
|
||||||
|
_updateToField();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_removeFocusListener();
|
_removeFocusListener();
|
||||||
|
|||||||
+53
-34
@@ -667,20 +667,55 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
|
|
||||||
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
|
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
|
||||||
|
|
||||||
void searchEmail({String? queryString}) {
|
void handleAdvancedSearchEmail() {
|
||||||
log('MailboxDashBoardController::searchEmail():');
|
log('MailboxDashBoardController::handleAdvancedSearchEmail:');
|
||||||
clearFilterMessageOption();
|
clearFilterMessageOption();
|
||||||
searchController.clearFilterSuggestion();
|
|
||||||
if (queryString?.isNotEmpty == true) {
|
|
||||||
searchController.updateFilterEmail(textOption: Some(SearchQuery(queryString!)));
|
|
||||||
}
|
|
||||||
searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder());
|
|
||||||
dispatchAction(StartSearchEmailAction());
|
|
||||||
FocusManager.instance.primaryFocus?.unfocus();
|
|
||||||
if (_searchInsideEmailDetailedViewIsActive()) {
|
if (_searchInsideEmailDetailedViewIsActive()) {
|
||||||
_closeEmailDetailedView();
|
_closeEmailDetailedView();
|
||||||
}
|
}
|
||||||
_unSelectedMailbox();
|
_unSelectedMailbox();
|
||||||
|
searchController.clearFilterSuggestion();
|
||||||
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
dispatchAction(StartSearchEmailAction());
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleClearAdvancedSearchFilterEmail() {
|
||||||
|
log('MailboxDashBoardController::handleClearAdvancedSearchFilterEmail:');
|
||||||
|
clearFilterMessageOption();
|
||||||
|
if (_searchInsideEmailDetailedViewIsActive()) {
|
||||||
|
_closeEmailDetailedView();
|
||||||
|
}
|
||||||
|
_unSelectedMailbox();
|
||||||
|
searchController.clearAllFilterSearch();
|
||||||
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
dispatchAction(ClearAdvancedSearchFilterEmailAction());
|
||||||
|
}
|
||||||
|
|
||||||
|
void searchEmailByQueryString(String queryString) {
|
||||||
|
final isMailAddress = EmailUtils.isEmailAddressValid(queryString);
|
||||||
|
log('MailboxDashBoardController::searchEmailByQueryString():QueryString = $queryString | isMailAddress = $isMailAddress');
|
||||||
|
clearFilterMessageOption();
|
||||||
|
if (_searchInsideEmailDetailedViewIsActive()) {
|
||||||
|
_closeEmailDetailedView();
|
||||||
|
}
|
||||||
|
_unSelectedMailbox();
|
||||||
|
searchController.clearFilterSuggestion();
|
||||||
|
|
||||||
|
searchController.updateFilterEmail(
|
||||||
|
textOption: !isMailAddress
|
||||||
|
? Some(SearchQuery(queryString))
|
||||||
|
: null,
|
||||||
|
fromOption: isMailAddress
|
||||||
|
? Some({queryString})
|
||||||
|
: null);
|
||||||
|
|
||||||
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
|
|
||||||
|
if (isMailAddress) {
|
||||||
|
dispatchAction(StartSearchEmailBySearchFilterAction(QuickSearchFilter.from));
|
||||||
|
} else {
|
||||||
|
dispatchAction(StartSearchEmailAction());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool _searchInsideEmailDetailedViewIsActive() {
|
bool _searchInsideEmailDetailedViewIsActive() {
|
||||||
@@ -1675,7 +1710,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
|
|
||||||
if (newContact is EmailAddress) {
|
if (newContact is EmailAddress) {
|
||||||
searchController.updateFilterEmail(fromOption: Some({newContact.emailAddress}));
|
searchController.updateFilterEmail(fromOption: Some({newContact.emailAddress}));
|
||||||
dispatchAction(StartSearchEmailAction(filter: QuickSearchFilter.from));
|
dispatchAction(StartSearchEmailBySearchFilterAction(QuickSearchFilter.from));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1693,7 +1728,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
|
|
||||||
if (newContact is EmailAddress) {
|
if (newContact is EmailAddress) {
|
||||||
searchController.updateFilterEmail(toOption: Some({newContact.emailAddress}));
|
searchController.updateFilterEmail(toOption: Some({newContact.emailAddress}));
|
||||||
dispatchAction(StartSearchEmailAction(filter: QuickSearchFilter.to));
|
dispatchAction(StartSearchEmailBySearchFilterAction(QuickSearchFilter.to));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1721,11 +1756,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
mailboxOption: destinationMailbox.id == PresentationMailbox.unifiedMailbox.id
|
mailboxOption: destinationMailbox.id == PresentationMailbox.unifiedMailbox.id
|
||||||
? const None()
|
? const None()
|
||||||
: Some(destinationMailbox),
|
: Some(destinationMailbox)
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: searchController.sortOrderFiltered.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
@@ -1745,8 +1776,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
emailReceiveTimeTypeOption: Some(receiveTime),
|
emailReceiveTimeTypeOption: Some(receiveTime),
|
||||||
startDateOption: optionOf(startDate?.toUTCDate()),
|
startDateOption: optionOf(startDate?.toUTCDate()),
|
||||||
endDateOption: optionOf(endDate?.toUTCDate()),
|
endDateOption: optionOf(endDate?.toUTCDate())
|
||||||
beforeOption: const None()
|
|
||||||
);
|
);
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
@@ -1756,8 +1786,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
emailReceiveTimeTypeOption: Some(receiveTime),
|
emailReceiveTimeTypeOption: Some(receiveTime),
|
||||||
startDateOption: const None(),
|
startDateOption: const None(),
|
||||||
endDateOption: const None(),
|
endDateOption: const None()
|
||||||
beforeOption: const None()
|
|
||||||
);
|
);
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
@@ -1767,7 +1796,6 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
||||||
popBack();
|
popBack();
|
||||||
searchController.sortOrderFiltered.value = sortOrder;
|
searchController.sortOrderFiltered.value = sortOrder;
|
||||||
searchController.updateFilterEmail(sortOrderOption: sortOrder.getSortOrder());
|
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1776,27 +1804,24 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(
|
||||||
emailReceiveTimeTypeOption: const Some(EmailReceiveTimeType.allTime),
|
emailReceiveTimeTypeOption: const Some(EmailReceiveTimeType.allTime),
|
||||||
startDateOption: const None(),
|
startDateOption: const None(),
|
||||||
endDateOption: const None(),
|
endDateOption: const None()
|
||||||
beforeOption: const None()
|
|
||||||
);
|
);
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteSortOrderSearchFilter() {
|
void _deleteSortOrderSearchFilter() {
|
||||||
searchController.sortOrderFiltered.value = EmailSortOrderType.mostRecent;
|
searchController.sortOrderFiltered.value = EmailSortOrderType.mostRecent;
|
||||||
searchController.updateFilterEmail(
|
|
||||||
sortOrderOption: EmailSortOrderType.mostRecent.getSortOrder());
|
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteFromSearchFilter() {
|
void _deleteFromSearchFilter() {
|
||||||
searchController.updateFilterEmail(fromOption: const None());
|
searchController.updateFilterEmail(fromOption: const None());
|
||||||
dispatchAction(StartSearchEmailAction(filter: QuickSearchFilter.from));
|
dispatchAction(StartSearchEmailBySearchFilterAction(QuickSearchFilter.from));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteToSearchFilter() {
|
void _deleteToSearchFilter() {
|
||||||
searchController.updateFilterEmail(toOption: const None());
|
searchController.updateFilterEmail(toOption: const None());
|
||||||
dispatchAction(StartSearchEmailAction(filter: QuickSearchFilter.to));
|
dispatchAction(StartSearchEmailBySearchFilterAction(QuickSearchFilter.to));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteHasAttachmentSearchFilter() {
|
void _deleteHasAttachmentSearchFilter() {
|
||||||
@@ -1805,13 +1830,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
|
|||||||
}
|
}
|
||||||
|
|
||||||
void _deleteFolderSearchFilter() {
|
void _deleteFolderSearchFilter() {
|
||||||
searchController.updateFilterEmail(
|
searchController.updateFilterEmail(mailboxOption: const None());
|
||||||
mailboxOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: searchController.sortOrderFiltered.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
dispatchAction(StartSearchEmailAction());
|
dispatchAction(StartSearchEmailAction());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -170,7 +170,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
Option<UTCDate>? beforeOption,
|
Option<UTCDate>? beforeOption,
|
||||||
Option<UTCDate>? startDateOption,
|
Option<UTCDate>? startDateOption,
|
||||||
Option<UTCDate>? endDateOption,
|
Option<UTCDate>? endDateOption,
|
||||||
Option<Set<Comparator>>? sortOrderOption,
|
|
||||||
Option<int>? positionOption,
|
Option<int>? positionOption,
|
||||||
}) {
|
}) {
|
||||||
searchEmailFilter.value = searchEmailFilter.value.copyWith(
|
searchEmailFilter.value = searchEmailFilter.value.copyWith(
|
||||||
@@ -185,7 +184,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
beforeOption: beforeOption,
|
beforeOption: beforeOption,
|
||||||
startDateOption: startDateOption,
|
startDateOption: startDateOption,
|
||||||
endDateOption: endDateOption,
|
endDateOption: endDateOption,
|
||||||
sortOrderOption: sortOrderOption,
|
|
||||||
positionOption: positionOption,
|
positionOption: positionOption,
|
||||||
);
|
);
|
||||||
searchEmailFilter.refresh();
|
searchEmailFilter.refresh();
|
||||||
@@ -284,6 +282,15 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
sortOrderFiltered.value = EmailSortOrderType.mostRecent;
|
sortOrderFiltered.value = EmailSortOrderType.mostRecent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clearAllFilterSearch() {
|
||||||
|
_clearAllTextInputSimpleSearch();
|
||||||
|
clearSortOrder();
|
||||||
|
clearFilterSuggestion();
|
||||||
|
clearSearchFilter();
|
||||||
|
deactivateAdvancedSearch();
|
||||||
|
hideAdvancedSearchFormView();
|
||||||
|
}
|
||||||
|
|
||||||
void disableAllSearchEmail() {
|
void disableAllSearchEmail() {
|
||||||
_clearAllTextInputSimpleSearch();
|
_clearAllTextInputSimpleSearch();
|
||||||
deactivateSimpleSearch();
|
deactivateSimpleSearch();
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import 'package:equatable/equatable.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/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/email/prefix_email_address.dart';
|
||||||
@@ -28,12 +27,9 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
final UTCDate? before;
|
final UTCDate? before;
|
||||||
final UTCDate? startDate;
|
final UTCDate? startDate;
|
||||||
final UTCDate? endDate;
|
final UTCDate? endDate;
|
||||||
final Set<Comparator>? sortOrder;
|
|
||||||
final int? position;
|
final int? position;
|
||||||
|
|
||||||
factory SearchEmailFilter.initial() => SearchEmailFilter(
|
factory SearchEmailFilter.initial() => SearchEmailFilter();
|
||||||
sortOrder: EmailSortOrderType.mostRecent.getSortOrder().toNullable()
|
|
||||||
);
|
|
||||||
|
|
||||||
SearchEmailFilter({
|
SearchEmailFilter({
|
||||||
Set<String>? from,
|
Set<String>? from,
|
||||||
@@ -48,7 +44,6 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
this.before,
|
this.before,
|
||||||
this.startDate,
|
this.startDate,
|
||||||
this.endDate,
|
this.endDate,
|
||||||
this.sortOrder,
|
|
||||||
this.position,
|
this.position,
|
||||||
}) : from = from ?? <String>{},
|
}) : from = from ?? <String>{},
|
||||||
to = to ?? <String>{},
|
to = to ?? <String>{},
|
||||||
@@ -71,7 +66,6 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
Option<UTCDate>? beforeOption,
|
Option<UTCDate>? beforeOption,
|
||||||
Option<UTCDate>? startDateOption,
|
Option<UTCDate>? startDateOption,
|
||||||
Option<UTCDate>? endDateOption,
|
Option<UTCDate>? endDateOption,
|
||||||
Option<Set<Comparator>>? sortOrderOption,
|
|
||||||
Option<int>? positionOption,
|
Option<int>? positionOption,
|
||||||
}) {
|
}) {
|
||||||
return SearchEmailFilter(
|
return SearchEmailFilter(
|
||||||
@@ -87,7 +81,6 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
before: getOptionParam(beforeOption, before),
|
before: getOptionParam(beforeOption, before),
|
||||||
startDate: getOptionParam(startDateOption, startDate),
|
startDate: getOptionParam(startDateOption, startDate),
|
||||||
endDate: getOptionParam(endDateOption, endDate),
|
endDate: getOptionParam(endDateOption, endDate),
|
||||||
sortOrder: getOptionParam(sortOrderOption, sortOrder),
|
|
||||||
position: getOptionParam(positionOption, position),
|
position: getOptionParam(positionOption, position),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -166,7 +159,6 @@ class SearchEmailFilter with EquatableMixin, OptionParamMixin {
|
|||||||
before,
|
before,
|
||||||
startDate,
|
startDate,
|
||||||
endDate,
|
endDate,
|
||||||
sortOrder,
|
|
||||||
position,
|
position,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'package:core/presentation/resources/image_paths.dart';
|
|||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:core/presentation/views/button/icon_button_web.dart';
|
import 'package:core/presentation/views/button/icon_button_web.dart';
|
||||||
import 'package:core/presentation/views/quick_search/quick_search_input_form.dart';
|
import 'package:core/presentation/views/quick_search/quick_search_input_form.dart';
|
||||||
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:core/utils/direction_utils.dart';
|
import 'package:core/utils/direction_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_portal/flutter_portal.dart';
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
@@ -126,17 +127,20 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _invokeSearchEmailAction(String query) {
|
void _invokeSearchEmailAction(String queryString) {
|
||||||
|
log('SearchInputFormWidget::_invokeSearchEmailAction:QueryString = $queryString');
|
||||||
_searchController.searchFocus.unfocus();
|
_searchController.searchFocus.unfocus();
|
||||||
_searchController.enableSearch();
|
_searchController.enableSearch();
|
||||||
|
|
||||||
if (query.isNotEmpty) {
|
if (queryString.isNotEmpty) {
|
||||||
_searchController.saveRecentSearch(RecentSearch.now(query));
|
_searchController.saveRecentSearch(RecentSearch.now(queryString));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (query.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
if (queryString.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
||||||
|
_searchController.clearSortOrder();
|
||||||
|
_searchController.clearSearchFilter();
|
||||||
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username);
|
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username);
|
||||||
_dashBoardController.searchEmail(queryString: query);
|
_dashBoardController.searchEmailByQueryString(queryString);
|
||||||
} else {
|
} else {
|
||||||
_dashBoardController.clearSearchEmail();
|
_dashBoardController.clearSearchEmail();
|
||||||
}
|
}
|
||||||
@@ -154,9 +158,10 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
_searchController.searchInputController.text = recent.value;
|
_searchController.searchInputController.text = recent.value;
|
||||||
_searchController.searchFocus.unfocus();
|
_searchController.searchFocus.unfocus();
|
||||||
_searchController.enableSearch();
|
_searchController.enableSearch();
|
||||||
|
_searchController.clearSortOrder();
|
||||||
|
_searchController.clearSearchFilter();
|
||||||
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username);
|
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username);
|
||||||
_dashBoardController.searchEmail(queryString: recent.value);
|
_dashBoardController.searchEmailByQueryString(recent.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildShowAllResultButton(BuildContext context, String keyword) {
|
Widget _buildShowAllResultButton(BuildContext context, String keyword) {
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ 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/sort/comparator.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/core/unsigned_int.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';
|
||||||
@@ -616,7 +615,6 @@ class SearchEmailController extends BaseController
|
|||||||
void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrderType) {
|
void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrderType) {
|
||||||
popBack();
|
popBack();
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
sortOrderOption: sortOrderType.getSortOrder(),
|
|
||||||
beforeOption: const None(),
|
beforeOption: const None(),
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
||||||
);
|
);
|
||||||
@@ -744,7 +742,6 @@ class SearchEmailController extends BaseController
|
|||||||
Option<UTCDate>? beforeOption,
|
Option<UTCDate>? beforeOption,
|
||||||
Option<UTCDate>? startDateOption,
|
Option<UTCDate>? startDateOption,
|
||||||
Option<UTCDate>? endDateOption,
|
Option<UTCDate>? endDateOption,
|
||||||
Option<Set<Comparator>>? sortOrderOption,
|
|
||||||
Option<int>? positionOption,
|
Option<int>? positionOption,
|
||||||
Option<Set<String>>? hasKeywordOption,
|
Option<Set<String>>? hasKeywordOption,
|
||||||
}) {
|
}) {
|
||||||
@@ -758,7 +755,6 @@ class SearchEmailController extends BaseController
|
|||||||
beforeOption: beforeOption,
|
beforeOption: beforeOption,
|
||||||
startDateOption: startDateOption,
|
startDateOption: startDateOption,
|
||||||
endDateOption: endDateOption,
|
endDateOption: endDateOption,
|
||||||
sortOrderOption: sortOrderOption,
|
|
||||||
positionOption: positionOption,
|
positionOption: positionOption,
|
||||||
hasKeywordOption: hasKeywordOption,
|
hasKeywordOption: hasKeywordOption,
|
||||||
);
|
);
|
||||||
@@ -1008,7 +1004,6 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
void _deleteSortOrderSearchFilter(BuildContext context) {
|
void _deleteSortOrderSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
sortOrderOption: EmailSortOrderType.mostRecent.getSortOrder(),
|
|
||||||
beforeOption: const None(),
|
beforeOption: const None(),
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
positionOption: emailSortOrderType.value.isScrollByPosition()
|
||||||
? const Some(0)
|
? const Some(0)
|
||||||
|
|||||||
@@ -301,7 +301,9 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
mailboxContain: mailboxContain,
|
mailboxContain: mailboxContain,
|
||||||
);
|
);
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
} else if (action is StartSearchEmailAction) {
|
} else if (action is StartSearchEmailAction
|
||||||
|
|| action is ClearAdvancedSearchFilterEmailAction
|
||||||
|
|| action is StartSearchEmailBySearchFilterAction) {
|
||||||
cancelSelectEmail();
|
cancelSelectEmail();
|
||||||
_replaceBrowserHistory();
|
_replaceBrowserHistory();
|
||||||
_searchEmail();
|
_searchEmail();
|
||||||
@@ -816,17 +818,11 @@ class ThreadController extends BaseController with EmailActionController {
|
|||||||
mailboxDashBoardController.emailsInCurrentMailbox.clear();
|
mailboxDashBoardController.emailsInCurrentMailbox.clear();
|
||||||
canSearchMore = false;
|
canSearchMore = false;
|
||||||
|
|
||||||
if (searchController.sortOrderFiltered.value.isScrollByPosition()) {
|
searchController.updateFilterEmail(
|
||||||
searchController.updateFilterEmail(
|
positionOption: searchController.sortOrderFiltered.value.isScrollByPosition()
|
||||||
positionOption: const Some(0),
|
? const Some(0)
|
||||||
beforeOption: const None(),
|
: const None(),
|
||||||
);
|
beforeOption: const None());
|
||||||
} else {
|
|
||||||
searchController.updateFilterEmail(
|
|
||||||
positionOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
searchController.activateSimpleSearch();
|
searchController.activateSimpleSearch();
|
||||||
|
|
||||||
|
|||||||
+2
-5
@@ -394,7 +394,7 @@ void main() {
|
|||||||
when(context.owner).thenReturn(BuildOwner(focusManager: FocusManager()));
|
when(context.owner).thenReturn(BuildOwner(focusManager: FocusManager()));
|
||||||
|
|
||||||
// expect query in search controller update as expected
|
// expect query in search controller update as expected
|
||||||
mailboxDashboardController.searchEmail(queryString: queryString);
|
mailboxDashboardController.searchEmailByQueryString(queryString);
|
||||||
expect(searchController.searchEmailFilter.value.text, SearchQuery(queryString));
|
expect(searchController.searchEmailFilter.value.text, SearchQuery(queryString));
|
||||||
|
|
||||||
// expect sort in search controller update as expected
|
// expect sort in search controller update as expected
|
||||||
@@ -463,7 +463,6 @@ void main() {
|
|||||||
text: SearchQuery(emailContainsWord),
|
text: SearchQuery(emailContainsWord),
|
||||||
notKeyword: {emailNotContainsWord},
|
notKeyword: {emailNotContainsWord},
|
||||||
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
|
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
|
||||||
sortOrder: EmailSortOrderType.relevance.getSortOrder().toNullable(),
|
|
||||||
position: 0));
|
position: 0));
|
||||||
|
|
||||||
// expect mailbox dashboard controller calls GetEmailsInMailboxInteractor
|
// expect mailbox dashboard controller calls GetEmailsInMailboxInteractor
|
||||||
@@ -500,8 +499,7 @@ void main() {
|
|||||||
when(context.owner).thenReturn(BuildOwner(focusManager: FocusManager()));
|
when(context.owner).thenReturn(BuildOwner(focusManager: FocusManager()));
|
||||||
|
|
||||||
// act
|
// act
|
||||||
mailboxDashboardController.searchEmail(queryString: queryString);
|
mailboxDashboardController.searchEmailByQueryString(queryString);
|
||||||
mailboxDashboardController.selectSortOrderQuickSearchFilter(context, EmailSortOrderType.oldest);
|
|
||||||
mailboxDashboardController.selectHasAttachmentSearchFilter();
|
mailboxDashboardController.selectHasAttachmentSearchFilter();
|
||||||
mailboxDashboardController.selectReceiveTimeQuickSearchFilter(context, EmailReceiveTimeType.last30Days);
|
mailboxDashboardController.selectReceiveTimeQuickSearchFilter(context, EmailReceiveTimeType.last30Days);
|
||||||
|
|
||||||
@@ -521,7 +519,6 @@ void main() {
|
|||||||
text: SearchQuery(queryString),
|
text: SearchQuery(queryString),
|
||||||
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
|
emailReceiveTimeType: EmailReceiveTimeType.last30Days,
|
||||||
hasAttachment: true,
|
hasAttachment: true,
|
||||||
sortOrder: EmailSortOrderType.oldest.getSortOrder().toNullable()
|
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user