From 6cdb698415e720b991c5074ac17748d45c51f9fc Mon Sep 17 00:00:00 2001 From: ManhNT Date: Fri, 24 Jun 2022 12:21:55 +0700 Subject: [PATCH] add advanced search model and move all search model to folder search --- .../base_mailbox_dashboard_view.dart | 2 +- .../mailbox_dashboard_controller.dart | 4 +- .../mailbox_dashboard_view_web.dart | 2 +- .../model/search/advanced_search_filter.dart | 67 +++++++++++++++ .../{ => search}/email_receive_time_type.dart | 17 ++-- .../{ => search}/quick_search_filter.dart | 22 ++--- .../presentation/thread_controller.dart | 4 +- .../thread/presentation/thread_view.dart | 10 +-- lib/main/localizations/app_localizations.dart | 84 +++++++++++++++++++ 9 files changed, 176 insertions(+), 36 deletions(-) create mode 100644 lib/features/mailbox_dashboard/presentation/model/search/advanced_search_filter.dart rename lib/features/mailbox_dashboard/presentation/model/{ => search}/email_receive_time_type.dart (82%) rename lib/features/mailbox_dashboard/presentation/model/{ => search}/quick_search_filter.dart (73%) diff --git a/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart b/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart index 34cb7f6cd..ed3b2ddd6 100644 --- a/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart +++ b/lib/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart @@ -7,7 +7,7 @@ import 'package:tmail_ui_user/features/base/mixin/network_connection_mixin.dart' import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/quick_search_filter.dart'; +import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart'; abstract class BaseMailboxDashBoardView extends GetWidget with NetworkConnectionMixin, UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin, diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart index 24ee851a5..acc2b75da 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart @@ -49,8 +49,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_recent_search_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.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/email_receive_time_type.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/quick_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/quick_search_filter.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index f0c924648..700d7abfd 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -10,7 +10,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_sea import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.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/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/email_quick_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/app_setting.dart'; diff --git a/lib/features/mailbox_dashboard/presentation/model/search/advanced_search_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/advanced_search_filter.dart new file mode 100644 index 000000000..d8d07e011 --- /dev/null +++ b/lib/features/mailbox_dashboard/presentation/model/search/advanced_search_filter.dart @@ -0,0 +1,67 @@ +import 'package:core/core.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; + +enum AdvancedSearchFilterField { + form, + to, + subject, + hasKeyword, + notKeyword, + mailBox, + date, + hasAttachment; + + String getTitle(BuildContext context) { + switch (this) { + case AdvancedSearchFilterField.form: + return AppLocalizations.of(context).form; + case AdvancedSearchFilterField.to: + return AppLocalizations.of(context).to; + case AdvancedSearchFilterField.subject: + return AppLocalizations.of(context).subject; + case AdvancedSearchFilterField.hasKeyword: + return AppLocalizations.of(context).hasTheWords; + case AdvancedSearchFilterField.notKeyword: + return AppLocalizations.of(context).doesNotHave; + case AdvancedSearchFilterField.mailBox: + return AppLocalizations.of(context).mailbox; + case AdvancedSearchFilterField.date: + return AppLocalizations.of(context).date; + case AdvancedSearchFilterField.hasAttachment: + return AppLocalizations.of(context).hasAttachment; + } + } + + String getHintText(BuildContext context) { + switch (this) { + case AdvancedSearchFilterField.form: + case AdvancedSearchFilterField.to: + return AppLocalizations.of(context).nameOrEmailAddress; + case AdvancedSearchFilterField.subject: + case AdvancedSearchFilterField.hasKeyword: + case AdvancedSearchFilterField.notKeyword: + return AppLocalizations.of(context).enterSearchTerm; + case AdvancedSearchFilterField.mailBox: + return AppLocalizations.of(context).allMails; + case AdvancedSearchFilterField.date: + return AppLocalizations.of(context).allTime; + case AdvancedSearchFilterField.hasAttachment: + return AppLocalizations.of(context).hasAttachment; + } + } + + TextStyle getTitleTextStyle() { + return const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + color: AppColor.colorContentEmail); + } + + TextStyle getHintTextStyle() { + return const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w400, + color: AppColor.colorHintSearchBar); + } +} diff --git a/lib/features/mailbox_dashboard/presentation/model/email_receive_time_type.dart b/lib/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart similarity index 82% rename from lib/features/mailbox_dashboard/presentation/model/email_receive_time_type.dart rename to lib/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart index 49a2de6f8..4db452d2b 100644 --- a/lib/features/mailbox_dashboard/presentation/model/email_receive_time_type.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart @@ -4,18 +4,15 @@ import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; enum EmailReceiveTimeType { - anyTime, + allTime, last7Days, last30Days, last6Months, - lastYears, -} - -extension EmailReceiveTimeTypeExtension on EmailReceiveTimeType { + lastYear; String getTitle(BuildContext context) { switch(this) { - case EmailReceiveTimeType.anyTime: + case EmailReceiveTimeType.allTime: return AppLocalizations.of(context).anyTime; case EmailReceiveTimeType.last7Days: return AppLocalizations.of(context).last7Days; @@ -23,14 +20,14 @@ extension EmailReceiveTimeTypeExtension on EmailReceiveTimeType { return AppLocalizations.of(context).last30Days; case EmailReceiveTimeType.last6Months: return AppLocalizations.of(context).last6Months; - case EmailReceiveTimeType.lastYears: + case EmailReceiveTimeType.lastYear: return AppLocalizations.of(context).lastYears; } } UTCDate? toUTCDate() { switch(this) { - case EmailReceiveTimeType.anyTime: + case EmailReceiveTimeType.allTime: return null; case EmailReceiveTimeType.last7Days: return UTCDate(DateTime.now().subtract(const Duration(days: 7))); @@ -38,8 +35,8 @@ extension EmailReceiveTimeTypeExtension on EmailReceiveTimeType { return UTCDate(DateTime.now().subtract(const Duration(days: 30))); case EmailReceiveTimeType.last6Months: return UTCDate(DateTime.now().subtract(const Duration(days: 180))); - case EmailReceiveTimeType.lastYears: + case EmailReceiveTimeType.lastYear: return UTCDate(DateTime.now().subtract(const Duration(days: 365))); } } -} \ No newline at end of file +} diff --git a/lib/features/mailbox_dashboard/presentation/model/quick_search_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart similarity index 73% rename from lib/features/mailbox_dashboard/presentation/model/quick_search_filter.dart rename to lib/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart index f529943a8..3db09770e 100644 --- a/lib/features/mailbox_dashboard/presentation/model/quick_search_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart @@ -1,16 +1,13 @@ import 'package:core/core.dart'; import 'package:flutter/cupertino.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/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/main/localizations/app_localizations.dart'; enum QuickSearchFilter { hasAttachment, last7Days, - fromMe -} - -extension QuickSearchFilterExtension on QuickSearchFilter { + fromMe; String getTitle(BuildContext context, {EmailReceiveTimeType? receiveTimeType}) { switch(this) { @@ -26,10 +23,9 @@ extension QuickSearchFilterExtension on QuickSearchFilter { } } - String getIcon(ImagePaths imagePaths, List listFilter) { - final filterSelected = listFilter.contains(this); + String getIcon(ImagePaths imagePaths, bool quickSearchFilterSelected) { - if (filterSelected) { + if (quickSearchFilterSelected) { return imagePaths.icSelectedSB; } else { switch(this) { @@ -43,20 +39,18 @@ extension QuickSearchFilterExtension on QuickSearchFilter { } } - Color getBackgroundColor(List listFilter) { - final filterSelected = listFilter.contains(this); + Color getBackgroundColor(bool quickSearchFilterSelected) { - if (filterSelected) { + if (quickSearchFilterSelected) { return AppColor.colorItemEmailSelectedDesktop; } else { return AppColor.colorButtonHeaderThread; } } - TextStyle getTextStyle(List listFilter) { - final filterSelected = listFilter.contains(this); + TextStyle getTextStyle(bool quickSearchFilterSelected) { - if (filterSelected) { + if (quickSearchFilterSelected) { return const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, diff --git a/lib/features/thread/presentation/thread_controller.dart b/lib/features/thread/presentation/thread_controller.dart index 407894164..f7b9f1f95 100644 --- a/lib/features/thread/presentation/thread_controller.dart +++ b/lib/features/thread/presentation/thread_controller.dart @@ -40,8 +40,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/mark_as_ma import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/remove_email_drafts_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/email_receive_time_type.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/quick_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/quick_search_filter.dart'; import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart'; import 'package:tmail_ui_user/features/thread/domain/model/email_filter.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; diff --git a/lib/features/thread/presentation/thread_view.dart b/lib/features/thread/presentation/thread_view.dart index 1bc8280fc..f08e4ba8d 100644 --- a/lib/features/thread/presentation/thread_view.dart +++ b/lib/features/thread/presentation/thread_view.dart @@ -8,8 +8,8 @@ import 'package:tmail_ui_user/features/email/presentation/model/composer_argumen import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_cupertino_action_sheet_action_builder.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/email_receive_time_type.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/quick_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/quick_search_filter.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/email_quick_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart'; import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart'; @@ -684,8 +684,7 @@ class ThreadView extends GetWidget with AppLoaderMixin, fit: BoxFit.fill), const SizedBox(width: 4), Text( - filter.getTitle(context, - receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value), + filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value), maxLines: 1, overflow: TextOverflow.ellipsis, style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch), @@ -758,8 +757,7 @@ class ThreadView extends GetWidget with AppLoaderMixin, fit: BoxFit.fill), const SizedBox(width: 4), Text( - filter.getTitle(context, - receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value), + filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value), maxLines: 1, overflow: TextOverflow.ellipsis, style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch), diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 7bc56c437..1512eb466 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -1453,4 +1453,88 @@ class AppLocalizations { return Intl.message('Server URL is not valid, please try again', name: 'wrongUrlMessage'); } + + String get form { + return Intl.message( + 'From', + name: 'form', + ); + } + + String get to { + return Intl.message( + 'To', + name: 'to', + ); + } + + String get subject { + return Intl.message( + 'Subject', + name: 'subject', + ); + } + + String get hasTheWords { + return Intl.message( + 'Has the words', + name: 'hasTheWords', + ); + } + + String get doesNotHave { + return Intl.message( + 'Doesn’t have', + name: 'doesNotHave', + ); + } + + String get mailbox { + return Intl.message( + 'Mailbox', + name: 'mailbox', + ); + } + + String get nameOrEmailAddress { + return Intl.message( + 'Name or email address', + name: 'nameOrEmailAddress', + ); + } + + String get enterSearchTerm { + return Intl.message( + 'Enter search term', + name: 'enterSearchTerm', + ); + } + + String get allMails { + return Intl.message( + 'All mails', + name: 'allMails', + ); + } + + String get allTime { + return Intl.message( + 'All time', + name: 'allTime', + ); + } + + String get search { + return Intl.message( + 'Search', + name: 'search', + ); + } + + String get clearFilter { + return Intl.message( + 'Clear filter', + name: 'clearFilter', + ); + } } \ No newline at end of file