TF-3002 [WEB] Add To/Folder search filters

This commit is contained in:
dab246
2024-09-12 19:31:38 +07:00
committed by Dat H. Pham
parent 34c9c0cd0e
commit 8290025c14
24 changed files with 461 additions and 228 deletions
@@ -118,7 +118,7 @@ class AdvancedFilterController extends BaseController {
searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder());
searchController.updateFilterEmail(
mailbox: _destinationMailboxSelected,
mailboxOption: optionOf(_destinationMailboxSelected),
subjectOption: optionOf(subjectFilterInputController.text),
emailReceiveTimeType: dateFilterSelectedFormAdvancedSearch.value,
hasAttachment: hasAttachment.value,
@@ -397,8 +397,17 @@ class AdvancedFilterController extends BaseController {
);
} else if (action is ClearDateRangeToAdvancedSearch) {
_updateDateRangeTime(action.receiveTime);
} else if (action is StartSearchEmailAction && action.filter == QuickSearchFilter.from) {
_updateFromField();
} else if (action is StartSearchEmailAction) {
switch(action.filter) {
case QuickSearchFilter.from:
_updateFromField();
break;
case QuickSearchFilter.to:
_updateToField();
break;
default:
break;
}
} else if (action is SearchEmailByFromFieldsAction) {
searchController.clearSearchFilter();
_resetAllToOriginalValue();
@@ -437,8 +446,13 @@ class AdvancedFilterController extends BaseController {
}
void _updateFromField() {
final listEmailAddress = searchEmailFilter.from.map((address) => EmailAddress(null, address)).toList();
listFromEmailAddress = List.from(listEmailAddress);
listFromEmailAddress = List.from(
searchEmailFilter.from.map((address) => EmailAddress(null, address)));
}
void _updateToField() {
listToEmailAddress= List.from(
searchEmailFilter.to.map((address) => EmailAddress(null, address)));
}
void onSearchAction(BuildContext context) {
@@ -240,6 +240,7 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
PresentationMailbox? outboxMailbox;
ComposerArguments? composerArguments;
List<Identity>? _identities;
ScrollController? listSearchFilterScrollController;
late StreamSubscription _emailAddressStreamSubscription;
late StreamSubscription _emailContentStreamSubscription;
@@ -297,6 +298,9 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
@override
void onReady() {
if (PlatformInfo.isWeb) {
listSearchFilterScrollController = ScrollController();
}
_registerPendingEmailAddress();
_registerPendingEmailContents();
_registerPendingFileInfo();
@@ -1679,6 +1683,60 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
}
}
Future<void> selectToSearchFilter() async {
if (accountId.value == null || sessionCurrent == null) return;
final contactArgument = ContactArguments(
accountId.value!,
sessionCurrent!,
searchController.searchEmailFilter.value.to);
final newContact = await DialogRouter.pushGeneralDialog(
routeName: AppRoutes.contact,
arguments: contactArgument);
if (newContact is EmailAddress) {
searchController.updateFilterEmail(toOption: Some({newContact.emailAddress}));
dispatchAction(StartSearchEmailAction(filter: QuickSearchFilter.to));
}
}
Future<void> selectFolderSearchFilter() async {
if (accountId.value == null || sessionCurrent == null) return;
final mailboxIdSelected = searchController.mailboxFiltered?.id;
final destinationArgument = DestinationPickerArguments(
accountId.value!,
MailboxActions.select,
sessionCurrent!,
mailboxIdSelected: mailboxIdSelected);
final destinationMailbox = PlatformInfo.isWeb
? await DialogRouter.pushGeneralDialog(
routeName: AppRoutes.destinationPicker,
arguments: destinationArgument)
: await push(
AppRoutes.destinationPicker,
arguments: destinationArgument);
if (destinationMailbox is! PresentationMailbox) return;
if (destinationMailbox != PresentationMailbox.unifiedMailbox &&
mailboxIdSelected != destinationMailbox.id) {
searchController.updateFilterEmail(
mailboxOption: Some(destinationMailbox),
beforeOption: const None(),
positionOption: searchController.sortOrderFiltered.value.isScrollByPosition()
? const Some(0)
: const None()
);
dispatchAction(StartSearchEmailAction(filter: QuickSearchFilter.folder));
}
}
void selectReceiveTimeQuickSearchFilter(BuildContext context, EmailReceiveTimeType receiveTime) {
log('MailboxDashBoardController::selectReceiveTimeQuickSearchFilter():receiveTime: $receiveTime');
popBack();
@@ -2694,6 +2752,9 @@ class MailboxDashBoardController extends ReloadableController with UserSettingPo
@override
void onClose() {
if (PlatformInfo.isWeb) {
listSearchFilterScrollController?.dispose();
}
_emailReceiveManager.closeEmailReceiveManagerStream();
if (PlatformInfo.isIOS) {
_iosNotificationManager?.dispose();
@@ -158,7 +158,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
SearchQuery? text,
Option<String>? subjectOption,
Set<String>? notKeyword,
PresentationMailbox? mailbox,
Option<PresentationMailbox>? mailboxOption,
EmailReceiveTimeType? emailReceiveTimeType,
bool? hasAttachment,
Option<UTCDate>? beforeOption,
@@ -173,7 +173,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
text: text,
subjectOption: subjectOption,
notKeyword: notKeyword,
mailbox: mailbox,
mailboxOption: mailboxOption,
emailReceiveTimeType: emailReceiveTimeType,
hasAttachment: hasAttachment,
beforeOption: beforeOption,
@@ -191,6 +191,8 @@ class SearchController extends BaseController with DateRangePickerMixin {
DateTime? get endDateFiltered => searchEmailFilter.value.endDate?.value.toLocal();
PresentationMailbox? get mailboxFiltered => searchEmailFilter.value.mailbox;
bool isSearchActive() =>
searchState.value.searchStatus == SearchStatus.ACTIVE;