TF-3006 [MOBILE] Handle mail address in quick search bar
This commit is contained in:
@@ -38,6 +38,7 @@ import 'package:tmail_ui_user/features/email/domain/state/move_to_mailbox_state.
|
|||||||
import 'package:tmail_ui_user/features/email/domain/state/store_event_attendance_status_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/store_event_attendance_status_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart';
|
import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
||||||
|
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_all_recent_search_latest_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_all_recent_search_latest_state.dart';
|
||||||
@@ -362,46 +363,45 @@ class SearchEmailController extends BaseController
|
|||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
textInputSearchFocus.unfocus();
|
textInputSearchFocus.unfocus();
|
||||||
|
|
||||||
if (session != null && accountId != null) {
|
if (session == null || accountId == null) {
|
||||||
resultSearchViewState.value = Right(SearchingState());
|
consumeState(Stream.value(Left(SearchEmailFailure(NotFoundSessionException()))));
|
||||||
canSearchMore = true;
|
return;
|
||||||
searchIsRunning.value = true;
|
|
||||||
cancelSelectionMode();
|
|
||||||
if (PlatformInfo.isWeb) {
|
|
||||||
RouteUtils.replaceBrowserHistory(
|
|
||||||
title: 'SearchEmail',
|
|
||||||
url: RouteUtils.createUrlWebLocationBar(
|
|
||||||
AppRoutes.dashboard,
|
|
||||||
router: NavigationRouter(
|
|
||||||
searchQuery: searchQuery,
|
|
||||||
dashboardType: DashboardType.search
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (emailSortOrderType.value.isScrollByPosition()) {
|
|
||||||
_updateSimpleSearchFilter(
|
|
||||||
positionOption: const Some(0),
|
|
||||||
beforeOption: const None(),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
_updateSimpleSearchFilter(
|
|
||||||
positionOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
consumeState(_searchEmailInteractor.execute(
|
|
||||||
session!,
|
|
||||||
accountId!,
|
|
||||||
limit: ThreadConstants.defaultLimit,
|
|
||||||
position: searchEmailFilter.value.position,
|
|
||||||
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
|
||||||
filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
|
||||||
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resultSearchViewState.value = Right(SearchingState());
|
||||||
|
canSearchMore = true;
|
||||||
|
searchMoreState = SearchMoreState.idle;
|
||||||
|
searchIsRunning.value = true;
|
||||||
|
cancelSelectionMode();
|
||||||
|
if (PlatformInfo.isWeb) {
|
||||||
|
RouteUtils.replaceBrowserHistory(
|
||||||
|
title: 'SearchEmail',
|
||||||
|
url: RouteUtils.createUrlWebLocationBar(
|
||||||
|
AppRoutes.dashboard,
|
||||||
|
router: NavigationRouter(
|
||||||
|
searchQuery: searchQuery,
|
||||||
|
dashboardType: DashboardType.search
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_updateSimpleSearchFilter(
|
||||||
|
positionOption: emailSortOrderType.value.isScrollByPosition()
|
||||||
|
? const Some(0)
|
||||||
|
: const None(),
|
||||||
|
beforeOption: const None(),
|
||||||
|
);
|
||||||
|
|
||||||
|
consumeState(_searchEmailInteractor.execute(
|
||||||
|
session!,
|
||||||
|
accountId!,
|
||||||
|
limit: ThreadConstants.defaultLimit,
|
||||||
|
position: searchEmailFilter.value.position,
|
||||||
|
sort: emailSortOrderType.value.getSortOrder().toNullable(),
|
||||||
|
filter: searchEmailFilter.value.mappingToEmailFilterCondition(sortOrderType: emailSortOrderType.value),
|
||||||
|
properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!),
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
void _searchEmailsSuccess(SearchEmailSuccess success) {
|
void _searchEmailsSuccess(SearchEmailSuccess success) {
|
||||||
@@ -484,24 +484,18 @@ class SearchEmailController extends BaseController
|
|||||||
searchMoreState = SearchMoreState.completed;
|
searchMoreState = SearchMoreState.completed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void showAllResultSearchAction(BuildContext context, String query) {
|
void showAllResultSearchAction(BuildContext context, String queryString) {
|
||||||
setTextInputSearchForm(query);
|
setTextInputSearchForm(queryString);
|
||||||
_updateSimpleSearchFilter(
|
_searchEmailByQueryString(
|
||||||
textOption: Some(SearchQuery(query)),
|
context: context,
|
||||||
beforeOption: const None(),
|
queryString: queryString);
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void searchEmailByRecentAction(BuildContext context, RecentSearch recentSearch) {
|
void searchEmailByRecentAction(BuildContext context, RecentSearch recentSearch) {
|
||||||
setTextInputSearchForm(recentSearch.value);
|
setTextInputSearchForm(recentSearch.value);
|
||||||
_updateSimpleSearchFilter(
|
_searchEmailByQueryString(
|
||||||
textOption: Some(SearchQuery(recentSearch.value)),
|
context: context,
|
||||||
beforeOption: const None(),
|
queryString: recentSearch.value);
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void searchEmailByEmailAddressAction(
|
void searchEmailByEmailAddressAction(
|
||||||
@@ -512,30 +506,34 @@ class SearchEmailController extends BaseController
|
|||||||
currentSearchText.value = '';
|
currentSearchText.value = '';
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
textOption: const None(),
|
textOption: const None(),
|
||||||
fromOption: Some({emailAddress.emailAddress}),
|
fromOption: Some({emailAddress.emailAddress}));
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void submitSearchAction(BuildContext context, String query) {
|
void _searchEmailByQueryString({
|
||||||
_updateSimpleSearchFilter(
|
required BuildContext context,
|
||||||
textOption: Some(SearchQuery(query)),
|
required String queryString
|
||||||
beforeOption: const None(),
|
}) {
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
log('SearchEmailController::_searchEmailByQueryString:QueryString = $queryString');
|
||||||
);
|
resultSearchViewState.value = Right(SearchingState());
|
||||||
_searchEmailAction(context);
|
listRecentSearch.clear();
|
||||||
|
listSuggestionSearch.clear();
|
||||||
|
listResultSearch.clear();
|
||||||
|
emailReceiveTimeType.value = EmailReceiveTimeType.allTime;
|
||||||
|
emailSortOrderType.value = EmailSortOrderType.mostRecent;
|
||||||
|
searchEmailFilter.value = SearchEmailFilter.initial();
|
||||||
|
searchIsRunning.value = false;
|
||||||
|
final isMailAddress = EmailUtils.isEmailAddressValid(queryString);
|
||||||
|
if (isMailAddress) {
|
||||||
|
searchEmailByEmailAddressAction(context, EmailAddress(null, queryString));
|
||||||
|
} else {
|
||||||
|
_updateSimpleSearchFilter(textOption: Some(SearchQuery(queryString)));
|
||||||
|
_searchEmailAction(context);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectHasAttachmentSearchFilter(BuildContext context) {
|
void selectHasAttachmentSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(hasAttachmentOption: const Some(true));
|
||||||
hasAttachmentOption: const Some(true),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,13 +542,7 @@ class SearchEmailController extends BaseController
|
|||||||
if (!listKeyword.contains(KeyWordIdentifier.emailFlagged.value)) {
|
if (!listKeyword.contains(KeyWordIdentifier.emailFlagged.value)) {
|
||||||
listKeyword.add(KeyWordIdentifier.emailFlagged.value);
|
listKeyword.add(KeyWordIdentifier.emailFlagged.value);
|
||||||
}
|
}
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(hasKeywordOption: Some(listKeyword));
|
||||||
hasKeywordOption: Some(listKeyword),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -585,10 +577,8 @@ class SearchEmailController extends BaseController
|
|||||||
textOption: searchQuery == null
|
textOption: searchQuery == null
|
||||||
? Some(SearchQuery.initial())
|
? Some(SearchQuery.initial())
|
||||||
: optionOf(searchEmailFilter.value.text),
|
: optionOf(searchEmailFilter.value.text),
|
||||||
beforeOption: const None(),
|
|
||||||
startDateOption: optionOf(newStartDate?.toUTCDate()),
|
startDateOption: optionOf(newStartDate?.toUTCDate()),
|
||||||
endDateOption: optionOf(newEndDate?.toUTCDate()),
|
endDateOption: optionOf(newEndDate?.toUTCDate()),
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_setEmailReceiveTimeType(emailReceiveTimeType);
|
_setEmailReceiveTimeType(emailReceiveTimeType);
|
||||||
@@ -601,10 +591,8 @@ class SearchEmailController extends BaseController
|
|||||||
textOption: searchQuery == null
|
textOption: searchQuery == null
|
||||||
? Some(SearchQuery.initial())
|
? Some(SearchQuery.initial())
|
||||||
: optionOf(searchEmailFilter.value.text),
|
: optionOf(searchEmailFilter.value.text),
|
||||||
beforeOption: const None(),
|
|
||||||
startDateOption: const None(),
|
startDateOption: const None(),
|
||||||
endDateOption: const None(),
|
endDateOption: const None(),
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
_setEmailReceiveTimeType(emailReceiveTimeType);
|
_setEmailReceiveTimeType(emailReceiveTimeType);
|
||||||
@@ -614,10 +602,6 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrderType) {
|
void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrderType) {
|
||||||
popBack();
|
popBack();
|
||||||
_updateSimpleSearchFilter(
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
|
||||||
emailSortOrderType.value = sortOrderType;
|
emailSortOrderType.value = sortOrderType;
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
@@ -638,11 +622,7 @@ class SearchEmailController extends BaseController
|
|||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(
|
||||||
mailboxOption: destinationMailbox.id == PresentationMailbox.unifiedMailbox.id
|
mailboxOption: destinationMailbox.id == PresentationMailbox.unifiedMailbox.id
|
||||||
? const None()
|
? const None()
|
||||||
: Some(destinationMailbox),
|
: Some(destinationMailbox)
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
);
|
||||||
|
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
@@ -712,18 +692,10 @@ class SearchEmailController extends BaseController
|
|||||||
|
|
||||||
switch(prefixEmailAddress) {
|
switch(prefixEmailAddress) {
|
||||||
case PrefixEmailAddress.from:
|
case PrefixEmailAddress.from:
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(fromOption: Some(searchEmailFilter.value.from));
|
||||||
fromOption: Some(searchEmailFilter.value.from),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
case PrefixEmailAddress.to:
|
case PrefixEmailAddress.to:
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(toOption: Some(searchEmailFilter.value.to));
|
||||||
toOption: Some(searchEmailFilter.value.to),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition() ? const Some(0) : const None()
|
|
||||||
);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@@ -766,10 +738,11 @@ class SearchEmailController extends BaseController
|
|||||||
}
|
}
|
||||||
|
|
||||||
void onTextSearchSubmitted(BuildContext context, String text) {
|
void onTextSearchSubmitted(BuildContext context, String text) {
|
||||||
if (text.trim().isNotEmpty) {
|
final queryString = text.trim();
|
||||||
saveRecentSearch(RecentSearch.now(text.trim()));
|
if (queryString.isNotEmpty) {
|
||||||
|
saveRecentSearch(RecentSearch.now(queryString));
|
||||||
}
|
}
|
||||||
submitSearchAction(context, text);
|
_searchEmailByQueryString(context: context, queryString: queryString);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setTextInputSearchForm(String value) {
|
void setTextInputSearchForm(String value) {
|
||||||
@@ -991,80 +964,40 @@ class SearchEmailController extends BaseController
|
|||||||
textOption: searchQuery == null
|
textOption: searchQuery == null
|
||||||
? Some(SearchQuery.initial())
|
? Some(SearchQuery.initial())
|
||||||
: optionOf(searchEmailFilter.value.text),
|
: optionOf(searchEmailFilter.value.text),
|
||||||
beforeOption: const None(),
|
|
||||||
startDateOption: const None(),
|
startDateOption: const None(),
|
||||||
endDateOption: const None(),
|
endDateOption: const None(),
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
);
|
||||||
_setEmailReceiveTimeType(EmailReceiveTimeType.allTime);
|
_setEmailReceiveTimeType(EmailReceiveTimeType.allTime);
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteSortOrderSearchFilter(BuildContext context) {
|
void _deleteSortOrderSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
emailSortOrderType.value = EmailSortOrderType.mostRecent;
|
emailSortOrderType.value = EmailSortOrderType.mostRecent;
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteFromSearchFilter(BuildContext context) {
|
void _deleteFromSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(fromOption: const None());
|
||||||
fromOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteToSearchFilter(BuildContext context) {
|
void _deleteToSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(toOption: const None());
|
||||||
toOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteHasAttachmentSearchFilter(BuildContext context) {
|
void _deleteHasAttachmentSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(hasAttachmentOption: const None());
|
||||||
hasAttachmentOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteFolderSearchFilter(BuildContext context) {
|
void _deleteFolderSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(mailboxOption: const None());
|
||||||
mailboxOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _deleteStarredSearchFilter(BuildContext context) {
|
void _deleteStarredSearchFilter(BuildContext context) {
|
||||||
_updateSimpleSearchFilter(
|
_updateSimpleSearchFilter(hasKeywordOption: const None());
|
||||||
hasKeywordOption: const None(),
|
|
||||||
beforeOption: const None(),
|
|
||||||
positionOption: emailSortOrderType.value.isScrollByPosition()
|
|
||||||
? const Some(0)
|
|
||||||
: const None()
|
|
||||||
);
|
|
||||||
_searchEmailAction(context);
|
_searchEmailAction(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user