add advanced search model and move all search model to folder search

This commit is contained in:
ManhNT
2022-06-24 12:21:55 +07:00
committed by Dat H. Pham
parent 9baa932834
commit 6cdb698415
9 changed files with 176 additions and 36 deletions
@@ -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<MailboxDashBoardController>
with NetworkConnectionMixin, UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin,
@@ -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';
@@ -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';
@@ -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);
}
}
@@ -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)));
}
}
}
}
@@ -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<QuickSearchFilter> 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<QuickSearchFilter> listFilter) {
final filterSelected = listFilter.contains(this);
Color getBackgroundColor(bool quickSearchFilterSelected) {
if (filterSelected) {
if (quickSearchFilterSelected) {
return AppColor.colorItemEmailSelectedDesktop;
} else {
return AppColor.colorButtonHeaderThread;
}
}
TextStyle getTextStyle(List<QuickSearchFilter> listFilter) {
final filterSelected = listFilter.contains(this);
TextStyle getTextStyle(bool quickSearchFilterSelected) {
if (filterSelected) {
if (quickSearchFilterSelected) {
return const TextStyle(
fontSize: 13,
fontWeight: FontWeight.w500,
@@ -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';
@@ -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<ThreadController> 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<ThreadController> 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),
@@ -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(
'Doesnt 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',
);
}
}