diff --git a/assets/images/ic_all_email.svg b/assets/images/ic_all_email.svg
new file mode 100644
index 000000000..be4cd956b
--- /dev/null
+++ b/assets/images/ic_all_email.svg
@@ -0,0 +1,5 @@
+
diff --git a/core/lib/presentation/resources/image_paths.dart b/core/lib/presentation/resources/image_paths.dart
index 445a597f4..fc47c61f4 100644
--- a/core/lib/presentation/resources/image_paths.dart
+++ b/core/lib/presentation/resources/image_paths.dart
@@ -281,6 +281,7 @@ class ImagePaths {
String get icLabel => _getImagePath('ic_label.svg');
String get icColorPicker => _getImagePath('ic_color_picker.svg');
String get icThumbsUp => _getImagePath('ic_thumbs_up.svg');
+ String get icAllEmail => _getImagePath('ic_all_email.svg');
String _getImagePath(String imageName) {
return AssetsPaths.images + imageName;
diff --git a/lib/features/base/model/filter_filter.dart b/lib/features/base/model/filter_filter.dart
index 672a4498c..0692ec7e0 100644
--- a/lib/features/base/model/filter_filter.dart
+++ b/lib/features/base/model/filter_filter.dart
@@ -35,7 +35,7 @@ enum FilterField {
case FilterField.notKeyword:
return appLocalizations.doesNotHave;
case FilterField.mailBox:
- return appLocalizations.folder;
+ return appLocalizations.search;
case FilterField.date:
return appLocalizations.date;
case FilterField.sortBy:
diff --git a/lib/features/destination_picker/presentation/destination_picker_controller.dart b/lib/features/destination_picker/presentation/destination_picker_controller.dart
index 1f67631d9..e534f3562 100644
--- a/lib/features/destination_picker/presentation/destination_picker_controller.dart
+++ b/lib/features/destination_picker/presentation/destination_picker_controller.dart
@@ -332,7 +332,8 @@ class DestinationPickerController extends BaseMailboxController {
}
mailboxDestination.value = presentationMailbox;
if (presentationMailbox == null ||
- presentationMailbox.id == PresentationMailbox.unifiedMailbox.id) {
+ presentationMailbox.id == PresentationMailbox.unifiedMailbox.id ||
+ presentationMailbox.id == PresentationMailbox.allEmailTrashAndSpamFolder.id) {
unAllSelectedMailboxNode();
} else {
if (mailboxNode != null) {
diff --git a/lib/features/destination_picker/presentation/destination_picker_view.dart b/lib/features/destination_picker/presentation/destination_picker_view.dart
index eec4ab2dc..666c1bc5f 100644
--- a/lib/features/destination_picker/presentation/destination_picker_view.dart
+++ b/lib/features/destination_picker/presentation/destination_picker_view.dart
@@ -21,15 +21,15 @@ import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
import 'package:tmail_ui_user/features/base/widget/scrollbar_list_view.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/destination_picker_controller.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_screen_type.dart';
+import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/destination_picker_folder_item.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/destination_picker_search_mailbox_item_builder.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/top_bar_destination_picker_builder.dart';
+import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
-import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_icon_widget_styles.dart';
-import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_item_widget_styles.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_category_widget.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_item_widget.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/widgets/create_mailbox_name_input_decoration_builder.dart';
@@ -272,16 +272,28 @@ class DestinationPickerView extends GetWidget
actions,
mailboxIdSelected)
: const SizedBox.shrink()),
+ if (actions == MailboxActions.select)
+ ...[
+ const Padding(
+ padding: EdgeInsetsDirectional.only(start: 16, end: 16, bottom: 8),
+ child: Divider(color: AppColor.colorDividerMailbox, height: 1),
+ ),
+ _buildAllEmailTrashAndSpamFolderWidget(context, mailboxIdSelected),
+ const Padding(
+ padding: EdgeInsetsDirectional.symmetric(horizontal: 16, vertical: 8),
+ child: Divider(color: AppColor.colorDividerMailbox, height: 1),
+ ),
+ ],
Obx(() {
if (controller.personalMailboxIsNotEmpty) {
return Column(
mainAxisSize: MainAxisSize.min,
children: [
- const Divider(
- color: AppColor.colorDividerMailbox,
- height: 1,
- ),
- const SizedBox(height: 8),
+ if (actions != MailboxActions.select)
+ const Padding(
+ padding: EdgeInsetsDirectional.only(bottom: 8),
+ child: Divider(color: AppColor.colorDividerMailbox, height: 1),
+ ),
_buildMailboxCategory(
context,
MailboxCategories.personalFolders,
@@ -494,81 +506,56 @@ class DestinationPickerView extends GetWidget
MailboxActions? actions,
MailboxId? mailboxIdSelected
) {
- return Padding(
- padding: const EdgeInsets.symmetric(horizontal: 16),
- child: Material(
- color: Colors.transparent,
- child: InkWell(
- onTap: () {
- if (mailboxIdSelected != null
- && mailboxIdSelected != PresentationMailbox.unifiedMailbox.id
- ) {
- controller.selectMailboxAction(PresentationMailbox.unifiedMailbox);
- controller.dispatchSelectMailboxDestination(context);
- }
- },
- customBorder: RoundedRectangleBorder(
- borderRadius: BorderRadius.all(Radius.circular(
- PlatformInfo.isWeb
- ? MailboxItemWidgetStyles.borderRadius
- : MailboxItemWidgetStyles.mobileBorderRadius,
- )),
- ),
- hoverColor: AppColor.colorMailboxHovered,
- child: Obx(() => Container(
- padding: const EdgeInsetsDirectional.symmetric(
- horizontal: MailboxItemWidgetStyles.itemPadding,
- ),
- color: controller.mailboxDestination.value == PresentationMailbox.unifiedMailbox
- ? AppColor.colorItemSelected
- : Colors.transparent,
- height: PlatformInfo.isWeb
- ? MailboxItemWidgetStyles.height
- : MailboxItemWidgetStyles.mobileHeight,
- child: Row(children: [
- SvgPicture.asset(
- controller.imagePaths.icFolderMailbox,
- width: MailboxIconWidgetStyles.iconSize,
- height: MailboxIconWidgetStyles.iconSize,
- fit: BoxFit.fill
- ),
- const SizedBox(
- width: MailboxItemWidgetStyles.labelIconSpace,
- ),
- Expanded(child: Text(
- AppLocalizations.of(context).allFolders,
- maxLines: 1,
- overflow: TextOverflow.ellipsis,
- style: ThemeUtils.textStyleInter500(),
- )),
- const SizedBox(
- width: MailboxItemWidgetStyles.labelIconSpace,
- ),
- if (_validateDisplaySelectedIcon(
- actions: actions,
- mailboxIdSelected: mailboxIdSelected
- ))
- SvgPicture.asset(
- actions == MailboxActions.create
- ? controller.imagePaths.icSelectedSB
- : controller.imagePaths.icFilterSelected,
- width: MailboxIconWidgetStyles.iconSize,
- height: MailboxIconWidgetStyles.iconSize,
- fit: BoxFit.fill
- )
- ])
- )),
- ),
- ),
- );
+ final appLocalizations = AppLocalizations.of(context);
+ final folderName = actions == MailboxActions.select
+ ? appLocalizations.allEmail
+ : appLocalizations.allFolders;
+ final folderIcon = actions == MailboxActions.select
+ ? controller.imagePaths.icAllEmail
+ : controller.imagePaths.icFolderMailbox;
+ final isAllEmailIdSelected = mailboxIdSelected == null ||
+ mailboxIdSelected == PresentationMailbox.unifiedMailbox.id;
+ final isDesktop = controller.responsiveUtils.isDesktop(context);
+ return Obx(() {
+ final isSelected = controller.mailboxDestination.value?.isAllEmail == true || isAllEmailIdSelected;
+ return DestinationPickerFolderItem(
+ text: folderName,
+ folderIcon: folderIcon,
+ selectedIcon: controller.imagePaths.icSelectedSB,
+ isDesktop: isDesktop,
+ isSelected: isSelected,
+ margin: const EdgeInsets.symmetric(horizontal: 16),
+ onTap: () {
+ if (!isSelected) {
+ controller.selectMailboxAction(PresentationMailbox.unifiedMailbox);
+ controller.dispatchSelectMailboxDestination(context);
+ }
+ },
+ );
+ });
}
- bool _validateDisplaySelectedIcon({
- MailboxActions? actions,
- MailboxId? mailboxIdSelected
- }) {
- return (actions == MailboxActions.select || actions == MailboxActions.create)
- && (mailboxIdSelected == null || mailboxIdSelected == PresentationMailbox.unifiedMailbox.id);
+ Widget _buildAllEmailTrashAndSpamFolderWidget(BuildContext context, MailboxId? mailboxIdSelected) {
+ final isMailboxIdSelected = mailboxIdSelected == PresentationMailbox.allEmailTrashAndSpamFolder.id;
+ final isDesktop = controller.responsiveUtils.isDesktop(context);
+ final folderName = AppLocalizations.of(context).allEmailTrashAndSpam;
+ return Obx(() {
+ final isSelected = controller.mailboxDestination.value?.isAllEmailTrashAndSpamFolder == true || isMailboxIdSelected;
+ return DestinationPickerFolderItem(
+ text: folderName,
+ folderIcon: controller.imagePaths.icMoveFolderContent,
+ selectedIcon: controller.imagePaths.icSelectedSB,
+ isSelected: isSelected,
+ isDesktop: isDesktop,
+ margin: const EdgeInsets.symmetric(horizontal: 16),
+ onTap: () {
+ if (!isSelected) {
+ controller.selectMailboxAction(PresentationMailbox.allEmailTrashAndSpamFolder);
+ controller.dispatchSelectMailboxDestination(context);
+ }
+ },
+ );
+ });
}
void _handleOpenMailboxNodeClick(MailboxNode mailboxNode) {
diff --git a/lib/features/destination_picker/presentation/widgets/destination_picker_folder_item.dart b/lib/features/destination_picker/presentation/widgets/destination_picker_folder_item.dart
new file mode 100644
index 000000000..5ba9ea493
--- /dev/null
+++ b/lib/features/destination_picker/presentation/widgets/destination_picker_folder_item.dart
@@ -0,0 +1,104 @@
+import 'package:core/presentation/extensions/color_extension.dart';
+import 'package:core/presentation/utils/theme_utils.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_svg/flutter_svg.dart';
+import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_icon_widget_styles.dart';
+import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_item_widget_styles.dart';
+
+class DestinationPickerFolderItem extends StatelessWidget {
+ final bool isSelected;
+ final bool isDesktop;
+ final String text;
+ final String folderIcon;
+ final String selectedIcon;
+ final EdgeInsetsGeometry? margin;
+ final VoidCallback onTap;
+
+ const DestinationPickerFolderItem({
+ super.key,
+ required this.isSelected,
+ required this.isDesktop,
+ required this.text,
+ required this.folderIcon,
+ required this.selectedIcon,
+ required this.onTap,
+ this.margin,
+ });
+
+ @override
+ Widget build(BuildContext context) {
+ final folderIconWidget = SvgPicture.asset(
+ folderIcon,
+ width: MailboxIconWidgetStyles.iconSize,
+ height: MailboxIconWidgetStyles.iconSize,
+ colorFilter: AppColor.primaryLinShare.asFilter(),
+ fit: BoxFit.fill,
+ );
+
+ final displayNameWidget = Text(
+ text,
+ maxLines: 1,
+ overflow: TextOverflow.ellipsis,
+ style: _displayNameTextStyle,
+ );
+
+ final selectedIconWidget = SvgPicture.asset(
+ selectedIcon,
+ width: MailboxIconWidgetStyles.iconSize,
+ height: MailboxIconWidgetStyles.iconSize,
+ fit: BoxFit.fill,
+ );
+
+ final itemHeight = isDesktop
+ ? MailboxItemWidgetStyles.height
+ : MailboxItemWidgetStyles.mobileHeight;
+
+ final borderRadius = BorderRadius.all(Radius.circular(
+ isDesktop
+ ? MailboxItemWidgetStyles.borderRadius
+ : MailboxItemWidgetStyles.mobileBorderRadius,
+ ));
+
+ Widget itemWidget = Material(
+ type: MaterialType.transparency,
+ child: InkWell(
+ onTap: onTap,
+ customBorder: RoundedRectangleBorder(borderRadius: borderRadius),
+ hoverColor: AppColor.colorMailboxHovered,
+ child: Container(
+ padding: const EdgeInsetsDirectional.symmetric(
+ horizontal: MailboxItemWidgetStyles.itemPadding,
+ ),
+ height: itemHeight,
+ child: Row(
+ children: [
+ folderIconWidget,
+ const SizedBox(width: MailboxItemWidgetStyles.labelIconSpace),
+ Expanded(child: displayNameWidget),
+ if (isSelected) ...[
+ const SizedBox(width: MailboxItemWidgetStyles.labelIconSpace),
+ selectedIconWidget,
+ ],
+ ],
+ ),
+ ),
+ ),
+ );
+
+ if (margin != null) {
+ itemWidget = Padding(padding: margin!, child: itemWidget);
+ }
+
+ return itemWidget;
+ }
+
+ TextStyle get _displayNameTextStyle {
+ if (isSelected) {
+ return ThemeUtils.textStyleInter700(fontSize: 14);
+ } else {
+ return isDesktop
+ ? ThemeUtils.textStyleBodyBody3(color: Colors.black)
+ : ThemeUtils.textStyleInter500();
+ }
+ }
+}
diff --git a/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart b/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart
index fdcbd68ee..e8c0af208 100644
--- a/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart
+++ b/lib/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart
@@ -172,4 +172,20 @@ extension PresentationMailboxExtension on PresentationMailbox {
isLabelMailbox ? (this as PresentationLabelMailbox).label.id : null;
MailboxId? get browserRouteMailboxId => isLabelMailbox ? null : mailboxId;
+
+ bool get isAllEmailTrashAndSpamFolder => id == PresentationMailbox.allEmailTrashAndSpamFolder.id;
+
+ bool get isAllEmail => id == PresentationMailbox.unifiedMailbox.id;
+
+ bool get isUnifiedMailbox => isAllEmail || isAllEmailTrashAndSpamFolder;
+
+ String getFolderNameForQuickSearch(AppLocalizations appLocalizations) {
+ if (isAllEmailTrashAndSpamFolder) {
+ return appLocalizations.allEmailTrashAndSpam;
+ } else if (isAllEmail) {
+ return appLocalizations.allEmail;
+ } else {
+ return getDisplayNameWithoutContext(appLocalizations);
+ }
+ }
}
\ No newline at end of file
diff --git a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart
index 1b95e2869..3ae9b701a 100644
--- a/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart
+++ b/lib/features/mailbox_dashboard/presentation/controller/advanced_filter_controller.dart
@@ -13,7 +13,6 @@ import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_st
import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/draggable_email_address.dart';
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
-import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/dashboard_action.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/input_field_focus_manager.dart';
@@ -25,7 +24,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/sear
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
-import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/dialog_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
@@ -41,7 +39,7 @@ class AdvancedFilterController extends BaseController {
final startDate = Rxn();
final endDate = Rxn();
final sortOrderType = SearchEmailFilter.defaultSortOrder.obs;
- final selectedFolderName = Rxn();
+ final destinationMailboxSelected = Rxn();
final selectedLabel = Rxn