TF-1709 Add quick sort filter to mailbox dashboard
(cherry picked from commit 7a50bebfd102887a10b425976993ae56fcff6c7f)
This commit is contained in:
@@ -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/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/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_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/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/download/download_task_item_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/search_input_form_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)) {
|
if (supportListButtonQuickSearchFilter(context)) {
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsetsDirectional.only(end: 16, top: 8),
|
padding: const EdgeInsetsDirectional.only(end: 16, top: 8),
|
||||||
child: Row(children: QuickSearchFilter.values
|
child: Row(
|
||||||
.map((filter) => _buildQuickSearchFilterButton(context, filter))
|
children: [
|
||||||
.toList()
|
...QuickSearchFilter.values
|
||||||
|
.where((filter) => filter != QuickSearchFilter.sortBy)
|
||||||
|
.map((filter) => _buildQuickSearchFilterButton(context, filter)),
|
||||||
|
const Spacer(),
|
||||||
|
_buildQuickSearchFilterButton(context, QuickSearchFilter.sortBy)
|
||||||
|
]
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} 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)),
|
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||||
child: Container(
|
child: Container(
|
||||||
@@ -607,7 +632,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
context,
|
context,
|
||||||
receiveTimeType: controller.searchController.receiveTimeFiltered,
|
receiveTimeType: controller.searchController.receiveTimeFiltered,
|
||||||
startDate: controller.searchController.startDateFiltered,
|
startDate: controller.searchController.startDateFiltered,
|
||||||
endDate: controller.searchController.endDateFiltered
|
endDate: controller.searchController.endDateFiltered,
|
||||||
|
sortOrderType: controller.searchController.sortOrderFiltered.value,
|
||||||
),
|
),
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: TextOverflow.ellipsis,
|
overflow: TextOverflow.ellipsis,
|
||||||
@@ -646,6 +672,24 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
.toList();
|
.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) {
|
Widget _buildComposerButton(BuildContext context) {
|
||||||
return Container(
|
return Container(
|
||||||
padding: const EdgeInsetsDirectional.only(
|
padding: const EdgeInsetsDirectional.only(
|
||||||
|
|||||||
@@ -4,13 +4,15 @@ import 'package:core/presentation/resources/image_paths.dart';
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:model/user/user_profile.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_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/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
enum QuickSearchFilter {
|
enum QuickSearchFilter {
|
||||||
hasAttachment,
|
hasAttachment,
|
||||||
last7Days,
|
last7Days,
|
||||||
fromMe;
|
fromMe,
|
||||||
|
sortBy;
|
||||||
|
|
||||||
String getName(BuildContext context) {
|
String getName(BuildContext context) {
|
||||||
switch(this) {
|
switch(this) {
|
||||||
@@ -20,12 +22,15 @@ enum QuickSearchFilter {
|
|||||||
return AppLocalizations.of(context).last7Days;
|
return AppLocalizations.of(context).last7Days;
|
||||||
case QuickSearchFilter.fromMe:
|
case QuickSearchFilter.fromMe:
|
||||||
return AppLocalizations.of(context).fromMe;
|
return AppLocalizations.of(context).fromMe;
|
||||||
|
case QuickSearchFilter.sortBy:
|
||||||
|
return AppLocalizations.of(context).sortBy;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String getTitle(
|
String getTitle(
|
||||||
BuildContext context, {
|
BuildContext context, {
|
||||||
EmailReceiveTimeType? receiveTimeType,
|
EmailReceiveTimeType? receiveTimeType,
|
||||||
|
EmailSortOrderType? sortOrderType,
|
||||||
DateTime? startDate,
|
DateTime? startDate,
|
||||||
DateTime? endDate,
|
DateTime? endDate,
|
||||||
}) {
|
}) {
|
||||||
@@ -37,6 +42,9 @@ enum QuickSearchFilter {
|
|||||||
?? AppLocalizations.of(context).allTime;
|
?? AppLocalizations.of(context).allTime;
|
||||||
case QuickSearchFilter.fromMe:
|
case QuickSearchFilter.fromMe:
|
||||||
return AppLocalizations.of(context).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;
|
return imagePaths.icCalendarSB;
|
||||||
case QuickSearchFilter.fromMe:
|
case QuickSearchFilter.fromMe:
|
||||||
return imagePaths.icUserSB;
|
return imagePaths.icUserSB;
|
||||||
|
case QuickSearchFilter.sortBy:
|
||||||
|
return imagePaths.icFilterSB;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -89,6 +99,8 @@ enum QuickSearchFilter {
|
|||||||
return userProfile != null &&
|
return userProfile != null &&
|
||||||
filter.from.contains(userProfile.email) &&
|
filter.from.contains(userProfile.email) &&
|
||||||
filter.from.length == 1;
|
filter.from.length == 1;
|
||||||
|
case QuickSearchFilter.sortBy:
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user