TF-1709 Implement sortOrder
(cherry picked from commit b3e5844bf37c692f763ccbf66bcbfb63c75d2d9f)
This commit is contained in:
+10
@@ -23,6 +23,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/advanced_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
|
||||
@@ -127,6 +128,8 @@ class AdvancedFilterController extends BaseController {
|
||||
searchController.updateFilterEmail(toOption: const None());
|
||||
}
|
||||
|
||||
searchController.updateFilterEmail(sortOrderOption: searchController.sortOrderFiltered.value.getSortOrder());
|
||||
|
||||
searchController.updateFilterEmail(
|
||||
mailbox: _destinationMailboxSelected,
|
||||
subjectOption: optionOf(subjectFilterInputController.text),
|
||||
@@ -410,12 +413,19 @@ class AdvancedFilterController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
void updateSortOrder(EmailSortOrderType? sortOrder) {
|
||||
if (sortOrder != null) {
|
||||
searchController.sortOrderFiltered.value = sortOrder;
|
||||
}
|
||||
}
|
||||
|
||||
void _resetAllToOriginalValue() {
|
||||
_updateDateRangeTime(EmailReceiveTimeType.allTime);
|
||||
hasAttachment.value = false;
|
||||
listFromEmailAddress.clear();
|
||||
listToEmailAddress.clear();
|
||||
_destinationMailboxSelected = null;
|
||||
searchController.sortOrderFiltered.value = EmailSortOrderType.mostRecent;
|
||||
}
|
||||
|
||||
void _clearAllTextFieldInput() {
|
||||
|
||||
+9
@@ -84,6 +84,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/down
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/refresh_action_view_event.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/mailto/presentation/model/mailto_arguments.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
||||
@@ -1533,6 +1534,14 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
}
|
||||
|
||||
void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrder) {
|
||||
log('MailboxDashBoardController::selectSortOrderQuickSearchFilter():sortOrder: $sortOrder');
|
||||
popBack();
|
||||
searchController.sortOrderFiltered.value = sortOrder;
|
||||
searchController.updateFilterEmail(sortOrderOption: sortOrder.getSortOrder());
|
||||
dispatchAction(StartSearchEmailAction());
|
||||
}
|
||||
|
||||
bool isEmptyTrashBannerEnabledOnWeb(BuildContext context) {
|
||||
return selectedMailbox.value != null &&
|
||||
selectedMailbox.value!.isTrash &&
|
||||
|
||||
@@ -26,6 +26,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/get_all
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_search_email_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
|
||||
@@ -45,6 +46,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
final listFilterOnSuggestionForm = RxList<QuickSearchFilter>();
|
||||
final simpleSearchIsActivated = RxBool(false);
|
||||
final advancedSearchIsActivated = RxBool(false);
|
||||
final sortOrderFiltered = EmailSortOrderType.mostRecent.obs;
|
||||
|
||||
SearchQuery? get searchQuery => searchEmailFilter.value.text;
|
||||
|
||||
@@ -82,6 +84,8 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
final newListEmailAddress = isFilterSelected ? <String>{} : <String>{userProfile.email};
|
||||
updateFilterEmail(fromOption: Some(newListEmailAddress));
|
||||
return;
|
||||
case QuickSearchFilter.sortBy:
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -179,7 +183,8 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
bool? hasAttachment,
|
||||
Option<UTCDate>? beforeOption,
|
||||
Option<UTCDate>? startDateOption,
|
||||
Option<UTCDate>? endDateOption
|
||||
Option<UTCDate>? endDateOption,
|
||||
Option<Set<Comparator>>? sortOrderOption,
|
||||
}) {
|
||||
searchEmailFilter.value = searchEmailFilter.value.copyWith(
|
||||
fromOption: fromOption,
|
||||
@@ -193,6 +198,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
||||
beforeOption: beforeOption,
|
||||
startDateOption: startDateOption,
|
||||
endDateOption: endDateOption,
|
||||
sortOrderOption: sortOrderOption,
|
||||
);
|
||||
searchEmailFilter.refresh();
|
||||
}
|
||||
|
||||
+33
-20
@@ -1,3 +1,4 @@
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
|
||||
@@ -32,34 +33,46 @@ enum EmailSortOrderType {
|
||||
}
|
||||
}
|
||||
|
||||
Set<Comparator> getSortOrder() {
|
||||
Option<Set<Comparator>> getSortOrder() {
|
||||
switch (this) {
|
||||
case EmailSortOrderType.mostRecent:
|
||||
return <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false));
|
||||
return Some(
|
||||
<Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(false))
|
||||
);
|
||||
case EmailSortOrderType.oldest:
|
||||
return <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(true));
|
||||
return Some(
|
||||
<Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.receivedAt)
|
||||
..setIsAscending(true))
|
||||
);
|
||||
case EmailSortOrderType.relevance:
|
||||
return <Comparator>{};
|
||||
return const None();
|
||||
case EmailSortOrderType.senderAscending:
|
||||
return <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.from)
|
||||
..setIsAscending(true));
|
||||
return Some(
|
||||
<Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.from)
|
||||
..setIsAscending(true))
|
||||
);
|
||||
case EmailSortOrderType.senderDescending:
|
||||
return <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.from)
|
||||
..setIsAscending(false));
|
||||
return Some(
|
||||
<Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.from)
|
||||
..setIsAscending(false))
|
||||
);
|
||||
case EmailSortOrderType.subjectAscending:
|
||||
return <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.subject)
|
||||
..setIsAscending(true));
|
||||
return Some(
|
||||
<Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.subject)
|
||||
..setIsAscending(true))
|
||||
);
|
||||
case EmailSortOrderType.subjectDescending:
|
||||
return <Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.subject)
|
||||
..setIsAscending(false));
|
||||
return Some(
|
||||
<Comparator>{}
|
||||
..add(EmailComparator(EmailComparatorProperty.subject)
|
||||
..setIsAscending(false))
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -40,14 +40,13 @@ class SearchEmailFilter with EquatableMixin {
|
||||
this.before,
|
||||
this.startDate,
|
||||
this.endDate,
|
||||
Set<Comparator>? sortOrder,
|
||||
this.sortOrder,
|
||||
}) : from = from ?? <String>{},
|
||||
to = to ?? <String>{},
|
||||
notKeyword = notKeyword ?? <String>{},
|
||||
hasAttachment = hasAttachment ?? false,
|
||||
emailReceiveTimeType =
|
||||
emailReceiveTimeType ?? EmailReceiveTimeType.allTime,
|
||||
sortOrder = sortOrder ?? <Comparator>{};
|
||||
emailReceiveTimeType ?? EmailReceiveTimeType.allTime;
|
||||
|
||||
SearchEmailFilter copyWith({
|
||||
Option<Set<String>>? fromOption,
|
||||
@@ -61,7 +60,7 @@ class SearchEmailFilter with EquatableMixin {
|
||||
Option<UTCDate>? beforeOption,
|
||||
Option<UTCDate>? startDateOption,
|
||||
Option<UTCDate>? endDateOption,
|
||||
Set<Comparator>? sortOrder,
|
||||
Option<Set<Comparator>>? sortOrderOption,
|
||||
}) {
|
||||
return SearchEmailFilter(
|
||||
from: _getOptionParam(fromOption, from),
|
||||
@@ -75,7 +74,7 @@ class SearchEmailFilter with EquatableMixin {
|
||||
before: _getOptionParam(beforeOption, before),
|
||||
startDate: _getOptionParam(startDateOption, startDate),
|
||||
endDate: _getOptionParam(endDateOption, endDate),
|
||||
sortOrder: sortOrder ?? this.sortOrder,
|
||||
sortOrder: _getOptionParam(sortOrderOption, sortOrder),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ class SortByDropdownStyle {
|
||||
color: Colors.white
|
||||
);
|
||||
|
||||
static const EdgeInsetsGeometry buttonPadding = EdgeInsets.only(left: 12, right: 10);
|
||||
static const EdgeInsetsDirectional buttonPadding = EdgeInsetsDirectional.only(start: 12, end: 10);
|
||||
static const MenuItemStyleData menuItemStyleData = MenuItemStyleData(
|
||||
height: height,
|
||||
padding: EdgeInsets.symmetric(horizontal: 12),
|
||||
|
||||
+3
-1
@@ -8,11 +8,13 @@ import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/styles/sort_by_drop_down_style.dart';
|
||||
|
||||
typedef OnSortOrderSelected = void Function(EmailSortOrderType?);
|
||||
|
||||
class SortByDropDownButton extends StatelessWidget {
|
||||
|
||||
final ImagePaths imagePaths;
|
||||
final EmailSortOrderType? sortOrderSelected;
|
||||
final Function(EmailSortOrderType?)? onSortOrderSelected;
|
||||
final OnSortOrderSelected? onSortOrderSelected;
|
||||
|
||||
const SortByDropDownButton({
|
||||
Key? key,
|
||||
|
||||
@@ -68,7 +68,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
||||
debounceDuration: const Duration(milliseconds: 300),
|
||||
listActionButton: QuickSearchFilter.values,
|
||||
actionButtonBuilder: (context, filterAction) {
|
||||
if (filterAction is QuickSearchFilter) {
|
||||
if (filterAction is QuickSearchFilter && filterAction != QuickSearchFilter.sortBy) {
|
||||
return buildListButtonForQuickSearchForm(context, filterAction);
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
|
||||
@@ -429,7 +429,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
_session!,
|
||||
_accountId!,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: _sortOrder,
|
||||
sort: _searchEmailFilter.sortOrder ?? _sortOrder,
|
||||
emailFilter: EmailFilter(
|
||||
filter: _getFilterCondition(mailboxIdSelected: _currentMailboxId),
|
||||
filterOption: mailboxDashBoardController.filterMessageOption.value,
|
||||
@@ -502,7 +502,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
_session!,
|
||||
_accountId!,
|
||||
newEmailState,
|
||||
sort: _sortOrder,
|
||||
sort: _searchEmailFilter.sortOrder ?? _sortOrder,
|
||||
propertiesCreated: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
|
||||
propertiesUpdated: ThreadConstants.propertiesUpdatedDefault,
|
||||
emailFilter: EmailFilter(
|
||||
@@ -526,7 +526,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
_session!,
|
||||
_accountId!,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: _sortOrder,
|
||||
sort: _searchEmailFilter.sortOrder ?? _sortOrder,
|
||||
filterOption: mailboxDashBoardController.filterMessageOption.value,
|
||||
filter: _getFilterCondition(oldestEmail: oldestEmail, mailboxIdSelected: _currentMailboxId),
|
||||
properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
|
||||
@@ -720,7 +720,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
_session!,
|
||||
_accountId!,
|
||||
limit: limit ?? ThreadConstants.defaultLimit,
|
||||
sort: _sortOrder,
|
||||
sort: _searchEmailFilter.sortOrder,
|
||||
filter: _searchEmailFilter.mappingToEmailFilterCondition(moreFilterCondition: _getFilterCondition()),
|
||||
properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
|
||||
));
|
||||
@@ -768,7 +768,7 @@ class ThreadController extends BaseController with EmailActionController {
|
||||
_session!,
|
||||
_accountId!,
|
||||
limit: ThreadConstants.defaultLimit,
|
||||
sort: _sortOrder,
|
||||
sort: _searchEmailFilter.sortOrder ?? _sortOrder,
|
||||
filter: searchController.searchEmailFilter.value.mappingToEmailFilterCondition(moreFilterCondition: _getFilterCondition()),
|
||||
properties: EmailUtils.getPropertiesForEmailGetMethod(_session!, _accountId!),
|
||||
lastEmailId: oldestEmail?.id
|
||||
|
||||
Reference in New Issue
Block a user