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/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/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/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> abstract class BaseMailboxDashBoardView extends GetWidget<MailboxDashBoardController>
with NetworkConnectionMixin, UserSettingPopupMenuMixin, FilterEmailPopupMenuMixin, 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/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/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/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/search/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/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/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/manage_account/presentation/model/manage_account_arguments.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.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/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/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/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/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/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/app_setting.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'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum EmailReceiveTimeType { enum EmailReceiveTimeType {
anyTime, allTime,
last7Days, last7Days,
last30Days, last30Days,
last6Months, last6Months,
lastYears, lastYear;
}
extension EmailReceiveTimeTypeExtension on EmailReceiveTimeType {
String getTitle(BuildContext context) { String getTitle(BuildContext context) {
switch(this) { switch(this) {
case EmailReceiveTimeType.anyTime: case EmailReceiveTimeType.allTime:
return AppLocalizations.of(context).anyTime; return AppLocalizations.of(context).anyTime;
case EmailReceiveTimeType.last7Days: case EmailReceiveTimeType.last7Days:
return AppLocalizations.of(context).last7Days; return AppLocalizations.of(context).last7Days;
@@ -23,14 +20,14 @@ extension EmailReceiveTimeTypeExtension on EmailReceiveTimeType {
return AppLocalizations.of(context).last30Days; return AppLocalizations.of(context).last30Days;
case EmailReceiveTimeType.last6Months: case EmailReceiveTimeType.last6Months:
return AppLocalizations.of(context).last6Months; return AppLocalizations.of(context).last6Months;
case EmailReceiveTimeType.lastYears: case EmailReceiveTimeType.lastYear:
return AppLocalizations.of(context).lastYears; return AppLocalizations.of(context).lastYears;
} }
} }
UTCDate? toUTCDate() { UTCDate? toUTCDate() {
switch(this) { switch(this) {
case EmailReceiveTimeType.anyTime: case EmailReceiveTimeType.allTime:
return null; return null;
case EmailReceiveTimeType.last7Days: case EmailReceiveTimeType.last7Days:
return UTCDate(DateTime.now().subtract(const Duration(days: 7))); return UTCDate(DateTime.now().subtract(const Duration(days: 7)));
@@ -38,7 +35,7 @@ extension EmailReceiveTimeTypeExtension on EmailReceiveTimeType {
return UTCDate(DateTime.now().subtract(const Duration(days: 30))); return UTCDate(DateTime.now().subtract(const Duration(days: 30)));
case EmailReceiveTimeType.last6Months: case EmailReceiveTimeType.last6Months:
return UTCDate(DateTime.now().subtract(const Duration(days: 180))); return UTCDate(DateTime.now().subtract(const Duration(days: 180)));
case EmailReceiveTimeType.lastYears: case EmailReceiveTimeType.lastYear:
return UTCDate(DateTime.now().subtract(const Duration(days: 365))); return UTCDate(DateTime.now().subtract(const Duration(days: 365)));
} }
} }
@@ -1,16 +1,13 @@
import 'package:core/core.dart'; import 'package:core/core.dart';
import 'package:flutter/cupertino.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'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum QuickSearchFilter { enum QuickSearchFilter {
hasAttachment, hasAttachment,
last7Days, last7Days,
fromMe fromMe;
}
extension QuickSearchFilterExtension on QuickSearchFilter {
String getTitle(BuildContext context, {EmailReceiveTimeType? receiveTimeType}) { String getTitle(BuildContext context, {EmailReceiveTimeType? receiveTimeType}) {
switch(this) { switch(this) {
@@ -26,10 +23,9 @@ extension QuickSearchFilterExtension on QuickSearchFilter {
} }
} }
String getIcon(ImagePaths imagePaths, List<QuickSearchFilter> listFilter) { String getIcon(ImagePaths imagePaths, bool quickSearchFilterSelected) {
final filterSelected = listFilter.contains(this);
if (filterSelected) { if (quickSearchFilterSelected) {
return imagePaths.icSelectedSB; return imagePaths.icSelectedSB;
} else { } else {
switch(this) { switch(this) {
@@ -43,20 +39,18 @@ extension QuickSearchFilterExtension on QuickSearchFilter {
} }
} }
Color getBackgroundColor(List<QuickSearchFilter> listFilter) { Color getBackgroundColor(bool quickSearchFilterSelected) {
final filterSelected = listFilter.contains(this);
if (filterSelected) { if (quickSearchFilterSelected) {
return AppColor.colorItemEmailSelectedDesktop; return AppColor.colorItemEmailSelectedDesktop;
} else { } else {
return AppColor.colorButtonHeaderThread; return AppColor.colorButtonHeaderThread;
} }
} }
TextStyle getTextStyle(List<QuickSearchFilter> listFilter) { TextStyle getTextStyle(bool quickSearchFilterSelected) {
final filterSelected = listFilter.contains(this);
if (filterSelected) { if (quickSearchFilterSelected) {
return const TextStyle( return const TextStyle(
fontSize: 13, fontSize: 13,
fontWeight: FontWeight.w500, 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/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/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/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/search/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/quick_search_filter.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.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/email_filter.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.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/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/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/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/search/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/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/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/mailbox_dashboard/presentation/widgets/recent_search_item_tile_widget.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.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), fit: BoxFit.fill),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( Text(
filter.getTitle(context, filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch), style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch),
@@ -758,8 +757,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
fit: BoxFit.fill), fit: BoxFit.fill),
const SizedBox(width: 4), const SizedBox(width: 4),
Text( Text(
filter.getTitle(context, filter.getTitle(context, receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
receiveTimeType: controller.mailboxDashBoardController.emailReceiveTimeType.value),
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch), style: filter.getTextStyle(controller.mailboxDashBoardController.listFilterQuickSearch),
@@ -1453,4 +1453,88 @@ class AppLocalizations {
return Intl.message('Server URL is not valid, please try again', return Intl.message('Server URL is not valid, please try again',
name: 'wrongUrlMessage'); 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',
);
}
} }