TF-1709 Add quick sort filter to mailbox dashboard

(cherry picked from commit 7a50bebfd102887a10b425976993ae56fcff6c7f)
This commit is contained in:
hieubt
2023-11-11 00:40:57 +07:00
committed by Dat Vu
parent cf953f8404
commit f0713f3789
2 changed files with 61 additions and 5 deletions
@@ -14,6 +14,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailb
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.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/mailbox_dashboard/presentation/widgets/download/download_task_item_widget.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart';
@@ -536,9 +537,14 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
if (supportListButtonQuickSearchFilter(context)) {
return Padding(
padding: const EdgeInsetsDirectional.only(end: 16, top: 8),
child: Row(children: QuickSearchFilter.values
.map((filter) => _buildQuickSearchFilterButton(context, filter))
.toList()
child: Row(
children: [
...QuickSearchFilter.values
.where((filter) => filter != QuickSearchFilter.sortBy)
.map((filter) => _buildQuickSearchFilterButton(context, filter)),
const Spacer(),
_buildQuickSearchFilterButton(context, QuickSearchFilter.sortBy)
]
),
);
} else {
@@ -588,6 +594,25 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
)
);
}
if (filter == QuickSearchFilter.sortBy) {
final screenSize = MediaQuery.of(context).size;
final offset = detail.globalPosition;
final position = RelativeRect.fromLTRB(
offset.dx,
offset.dy,
screenSize.width - offset.dx,
screenSize.height - offset.dy,
);
controller.openPopupMenuAction(
context,
position,
popupMenuEmailSortOrderType(
context,
controller.searchController.sortOrderFiltered.value,
onCallBack: (sortOrder) => controller.selectSortOrderQuickSearchFilter(context, sortOrder)
)
);
}
},
borderRadius: const BorderRadius.all(Radius.circular(10)),
child: Container(
@@ -607,7 +632,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
context,
receiveTimeType: controller.searchController.receiveTimeFiltered,
startDate: controller.searchController.startDateFiltered,
endDate: controller.searchController.endDateFiltered
endDate: controller.searchController.endDateFiltered,
sortOrderType: controller.searchController.sortOrderFiltered.value,
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
@@ -646,6 +672,24 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
.toList();
}
List<PopupMenuEntry> popupMenuEmailSortOrderType(
BuildContext context,
EmailSortOrderType? sortOrderSelected,
{Function(EmailSortOrderType)? onCallBack}
) {
return EmailSortOrderType.values
.map((sortType) => PopupMenuItem(
padding: EdgeInsets.zero,
child: PopupItemNoIconWidget(
sortType.getTitle(context),
svgIconSelected: imagePaths.icFilterSelected,
maxWidth: 332,
isSelected: sortOrderSelected == sortType,
onCallbackAction: () => onCallBack?.call(sortType),
)))
.toList();
}
Widget _buildComposerButton(BuildContext context) {
return Container(
padding: const EdgeInsetsDirectional.only(
@@ -4,13 +4,15 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:flutter/cupertino.dart';
import 'package:model/user/user_profile.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/search_email_filter.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum QuickSearchFilter {
hasAttachment,
last7Days,
fromMe;
fromMe,
sortBy;
String getName(BuildContext context) {
switch(this) {
@@ -20,12 +22,15 @@ enum QuickSearchFilter {
return AppLocalizations.of(context).last7Days;
case QuickSearchFilter.fromMe:
return AppLocalizations.of(context).fromMe;
case QuickSearchFilter.sortBy:
return AppLocalizations.of(context).sortBy;
}
}
String getTitle(
BuildContext context, {
EmailReceiveTimeType? receiveTimeType,
EmailSortOrderType? sortOrderType,
DateTime? startDate,
DateTime? endDate,
}) {
@@ -37,6 +42,9 @@ enum QuickSearchFilter {
?? AppLocalizations.of(context).allTime;
case QuickSearchFilter.fromMe:
return AppLocalizations.of(context).fromMe;
case QuickSearchFilter.sortBy:
return sortOrderType?.getTitle(context)
?? AppLocalizations.of(context).mostRecent;
}
}
@@ -51,6 +59,8 @@ enum QuickSearchFilter {
return imagePaths.icCalendarSB;
case QuickSearchFilter.fromMe:
return imagePaths.icUserSB;
case QuickSearchFilter.sortBy:
return imagePaths.icFilterSB;
}
}
}
@@ -89,6 +99,8 @@ enum QuickSearchFilter {
return userProfile != null &&
filter.from.contains(userProfile.email) &&
filter.from.length == 1;
case QuickSearchFilter.sortBy:
return true;
}
}
}