diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index a45f46dec..9d11a3d25 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -14,8 +14,6 @@ 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/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_property.dart'; import 'package:model/email/email_action_type.dart'; import 'package:model/email/mark_star_action.dart'; import 'package:model/email/prefix_email_address.dart'; @@ -49,6 +47,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/quick_s 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/dashboard_routes.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/manage_account/presentation/extensions/datetime_extension.dart'; import 'package:tmail_ui_user/features/search/email/domain/state/refresh_changes_search_email_state.dart'; @@ -96,6 +95,7 @@ class SearchEmailController extends BaseController final searchIsRunning = RxBool(false); final emailReceiveTimeType = EmailReceiveTimeType.allTime.obs; final selectionMode = Rx(SelectMode.INACTIVE); + final emailSortOrderType = EmailSortOrderType.mostRecent.obs; late Debouncer _deBouncerTime; late Worker dashBoardViewStateWorker; @@ -229,9 +229,7 @@ class SearchEmailController extends BaseController session!, accountId!, limit: limit, - sort: {} - ..add(EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), + sort: emailSortOrderType.value.getSortOrder().toNullable(), filter: simpleSearchFilter.value.mappingToEmailFilterCondition(), properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!), )); @@ -274,9 +272,7 @@ class SearchEmailController extends BaseController session, accountId, limit: UnsignedInt(5), - sort: {}..add( - EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), + sort: emailSortOrderType.value.getSortOrder().toNullable(), filter: simpleSearchFilter.value.mappingToEmailFilterCondition(), properties: ThreadConstants.propertiesQuickSearch) .then((result) => result.fold( @@ -302,9 +298,7 @@ class SearchEmailController extends BaseController session!, accountId!, limit: ThreadConstants.defaultLimit, - sort: {} - ..add(EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), + sort: emailSortOrderType.value.getSortOrder().toNullable(), filter: simpleSearchFilter.value.mappingToEmailFilterCondition(), properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!), )); @@ -347,9 +341,7 @@ class SearchEmailController extends BaseController session!, accountId!, limit: ThreadConstants.defaultLimit, - sort: {} - ..add(EmailComparator(EmailComparatorProperty.receivedAt) - ..setIsAscending(false)), + sort: simpleSearchFilter.value.sortOrder, filter: simpleSearchFilter.value.mappingToEmailFilterCondition(), properties: EmailUtils.getPropertiesForEmailGetMethod(session!, accountId!), lastEmailId: lastEmail.id @@ -416,6 +408,8 @@ class SearchEmailController extends BaseController return simpleSearchFilter.value.hasAttachment == true; case QuickSearchFilter.last7Days: return true; + case QuickSearchFilter.sortBy: + return true; default: return false; } @@ -436,6 +430,11 @@ class SearchEmailController extends BaseController beforeOption: const None() ); break; + case QuickSearchFilter.sortBy: + _updateSimpleSearchFilter( + sortOrderOption: emailSortOrderType.value.getSortOrder(), + beforeOption: const None() + ); default: break; } @@ -484,6 +483,16 @@ class SearchEmailController extends BaseController } } + void selectSortOrderQuickSearchFilter(BuildContext context, EmailSortOrderType sortOrderType) { + popBack(); + _updateSimpleSearchFilter( + sortOrderOption: sortOrderType.getSortOrder(), + beforeOption: const None() + ); + emailSortOrderType.value = sortOrderType; + _searchEmailAction(context); + } + void selectMailboxForSearchFilter(BuildContext context, PresentationMailbox? mailbox) async { final arguments = DestinationPickerArguments( mailboxDashBoardController.accountId.value!, @@ -599,7 +608,8 @@ class SearchEmailController extends BaseController Option? hasAttachmentOption, Option? beforeOption, Option? startDateOption, - Option? endDateOption + Option? endDateOption, + Option>? sortOrderOption, }) { simpleSearchFilter.value = simpleSearchFilter.value.copyWith( fromOption: fromOption, @@ -610,7 +620,8 @@ class SearchEmailController extends BaseController hasAttachmentOption: hasAttachmentOption, beforeOption: beforeOption, startDateOption: startDateOption, - endDateOption: endDateOption + endDateOption: endDateOption, + sortOrderOption: sortOrderOption ); simpleSearchFilter.refresh(); } diff --git a/lib/features/search/email/presentation/search_email_view.dart b/lib/features/search/email/presentation/search_email_view.dart index 342855d10..011bdba4f 100644 --- a/lib/features/search/email/presentation/search_email_view.dart +++ b/lib/features/search/email/presentation/search_email_view.dart @@ -180,7 +180,7 @@ class SearchEmailView extends GetWidget onTap: () { if (filter == QuickSearchFilter.hasAttachment) { controller.selectQuickSearchFilter(context, filter); - } else if (_responsiveUtils.isMobile(context)) { + } else if (controller.responsiveUtils.isMobile(context)) { if (filter == QuickSearchFilter.last7Days) { controller.openContextMenuAction( context, @@ -201,7 +201,7 @@ class SearchEmailView extends GetWidget } }, onTapDown: (detail) { - if (!_responsiveUtils.isMobile(context)) { + if (!controller.responsiveUtils.isMobile(context)) { final screenSize = MediaQuery.of(context).size; final offset = detail.globalPosition; final position = RelativeRect.fromLTRB( @@ -326,7 +326,7 @@ class SearchEmailView extends GetWidget padding: EdgeInsets.zero, child: EmailSortByActionTitleWidget( sortType: sortType, - imagePaths: _imagePaths, + imagePaths: controller.imagePaths, onSortOrderSelected: onCallBack, sortTypeSelected: sortTypeSelected, ), @@ -345,14 +345,14 @@ class SearchEmailView extends GetWidget sortType.getTitle(context), sortType, sortTypeCurrent: sortOrderSelected, - iconLeftPadding: _responsiveUtils.isMobile(context) - ? const EdgeInsets.only(left: 12, right: 16) - : const EdgeInsets.only(right: 12), - iconRightPadding: _responsiveUtils.isMobile(context) - ? const EdgeInsets.only(right: 12) - : EdgeInsets.zero, + iconLeftPadding: controller.responsiveUtils.isMobile(context) + ? const EdgeInsetsDirectional.only(start: 12, end: 16) + : const EdgeInsetsDirectional.only(start: 12), + iconRightPadding: controller.responsiveUtils.isMobile(context) + ? const EdgeInsetsDirectional.only(end: 12) + : EdgeInsetsDirectional.zero, actionSelected: SvgPicture.asset( - _imagePaths.icFilterSelected, + controller.imagePaths.icFilterSelected, width: 20, height: 20, fit: BoxFit.fill diff --git a/lib/features/search/email/presentation/widgets/email_sort_by_action_tile_widget.dart b/lib/features/search/email/presentation/widgets/email_sort_by_action_tile_widget.dart index 8cc0d2000..094007ffe 100644 --- a/lib/features/search/email/presentation/widgets/email_sort_by_action_tile_widget.dart +++ b/lib/features/search/email/presentation/widgets/email_sort_by_action_tile_widget.dart @@ -1,4 +1,4 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/resources/image_paths.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart'; diff --git a/lib/features/search/email/presentation/widgets/email_sort_by_cupertino_action_sheet_action_builder.dart b/lib/features/search/email/presentation/widgets/email_sort_by_cupertino_action_sheet_action_builder.dart index 4d3967f11..50b2d7f85 100644 --- a/lib/features/search/email/presentation/widgets/email_sort_by_cupertino_action_sheet_action_builder.dart +++ b/lib/features/search/email/presentation/widgets/email_sort_by_cupertino_action_sheet_action_builder.dart @@ -11,8 +11,8 @@ class EmailSortByCupertinoActionSheetActionBuilder extends CupertinoActionSheetN final EmailSortOrderType? sortTypeCurrent; final SvgPicture? actionSelected; final Color? bgColor; - final EdgeInsets? iconLeftPadding; - final EdgeInsets? iconRightPadding; + final EdgeInsetsDirectional? iconLeftPadding; + final EdgeInsetsDirectional? iconRightPadding; EmailSortByCupertinoActionSheetActionBuilder( String actionName,