TF-1710 Show banner delete all spam emails
(cherry picked from commit 6b45dcd8de1ca83225994d8918c0998515634d40)
This commit is contained in:
+71
@@ -1978,6 +1978,77 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
AppLocalizations.of(currentContext!).toast_message_empty_trash_folder_success);
|
AppLocalizations.of(currentContext!).toast_message_empty_trash_folder_success);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isEmptySpamBannerEnabledOnWeb(BuildContext context) {
|
||||||
|
return selectedMailbox.value != null &&
|
||||||
|
selectedMailbox.value!.isSpam &&
|
||||||
|
selectedMailbox.value!.countEmails > 0 &&
|
||||||
|
!searchController.isSearchActive() &&
|
||||||
|
_responsiveUtils.isWebDesktop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isEmptySpamBannerEnabledOnMobile(BuildContext context) {
|
||||||
|
return selectedMailbox.value != null &&
|
||||||
|
selectedMailbox.value!.isSpam &&
|
||||||
|
selectedMailbox.value!.countEmails > 0 &&
|
||||||
|
!searchController.isSearchActive() &&
|
||||||
|
!_responsiveUtils.isWebDesktop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
void openDialogEmptySpamFolder(BuildContext context) {
|
||||||
|
final spamMailbox = selectedMailbox.value;
|
||||||
|
if (spamMailbox == null || !spamMailbox.isSpam) {
|
||||||
|
logError('MailboxDashBoardController::openDialogEmptySpamFolder: Selected mailbox is not spam');
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (_responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
|
(ConfirmationDialogActionSheetBuilder(context)
|
||||||
|
..messageText(AppLocalizations.of(context).emptySpamMessageDialog)
|
||||||
|
..onCancelAction(AppLocalizations.of(context).cancel, popBack)
|
||||||
|
..onConfirmAction(AppLocalizations.of(context).delete_all, () {
|
||||||
|
popBack();
|
||||||
|
if (spamMailbox.countEmails > 0) {
|
||||||
|
emptySpamFolderAction(spamFolderId: spamMailbox.id);
|
||||||
|
} else {
|
||||||
|
_appToast.showToastWarningMessage(
|
||||||
|
context,
|
||||||
|
AppLocalizations.of(context).noEmailInYourCurrentMailbox
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
.show();
|
||||||
|
} else {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
|
||||||
|
builder: (context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths)
|
||||||
|
..key(const Key('confirm_dialog_empty_spam'))
|
||||||
|
..title(AppLocalizations.of(context).emptySpamFolder)
|
||||||
|
..content(AppLocalizations.of(context).emptySpamMessageDialog)
|
||||||
|
..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog, fit: BoxFit.fill))
|
||||||
|
..colorConfirmButton(AppColor.colorConfirmActionDialog)
|
||||||
|
..styleTextConfirmButton(const TextStyle(
|
||||||
|
fontSize: 17,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: AppColor.colorActionDeleteConfirmDialog))
|
||||||
|
..onCloseButtonAction(popBack)
|
||||||
|
..onConfirmButtonAction(AppLocalizations.of(context).delete_all, () {
|
||||||
|
popBack();
|
||||||
|
if (spamMailbox.countEmails > 0) {
|
||||||
|
emptySpamFolderAction(spamFolderId: spamMailbox.id);
|
||||||
|
} else {
|
||||||
|
_appToast.showToastWarningMessage(
|
||||||
|
context,
|
||||||
|
AppLocalizations.of(context).noEmailInYourCurrentMailbox
|
||||||
|
);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack)
|
||||||
|
).build())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
|
|||||||
@@ -21,6 +21,8 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/sear
|
|||||||
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';
|
||||||
|
import 'package:tmail_ui_user/features/thread/presentation/styles/banner_delete_all_spam_emails_styles.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/banner_delete_all_spam_emails_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_banner/spam_report_banner_web_widget.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/spam_banner/spam_report_banner_web_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/top_bar_thread_selection.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/top_bar_thread_selection.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
@@ -124,6 +126,21 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
Expanded(child: Column(children: [
|
Expanded(child: Column(children: [
|
||||||
const SpamReportBannerWebWidget(),
|
const SpamReportBannerWebWidget(),
|
||||||
_buildEmptyTrashButton(context),
|
_buildEmptyTrashButton(context),
|
||||||
|
Obx(() {
|
||||||
|
if (controller.isEmptySpamBannerEnabledOnWeb(context)) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsetsDirectional.only(
|
||||||
|
top: BannerDeleteAllSpamEmailsStyles.webTopMargin,
|
||||||
|
end: BannerDeleteAllSpamEmailsStyles.webEndMargin
|
||||||
|
),
|
||||||
|
child: BannerDeleteAllSpamEmailsWidget(
|
||||||
|
onTapAction: () => controller.openDialogEmptySpamFolder(context)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
QuotasWarningBannerWidget(
|
QuotasWarningBannerWidget(
|
||||||
margin: EdgeInsets.only(
|
margin: EdgeInsets.only(
|
||||||
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class BannerDeleteAllSpamEmailsStyles {
|
||||||
|
static const double borderRadius = 14;
|
||||||
|
static const double buttonBorderRadius = 20;
|
||||||
|
static const double horizontalPadding = 16;
|
||||||
|
static const double verticalPadding = 10;
|
||||||
|
static const double webEndMargin = 16;
|
||||||
|
static const double webTopMargin = 8;
|
||||||
|
static const double mobileMargin = 16;
|
||||||
|
static const double labelTextSize = 13;
|
||||||
|
static const double buttonTextSize = 17;
|
||||||
|
static const double iconSize = 20;
|
||||||
|
static const double space = 8;
|
||||||
|
static const Color backgroundColor = Colors.white;
|
||||||
|
static const Color borderStrokeColor = AppColor.colorBorderBodyThread;
|
||||||
|
static const Color labelTextColor = AppColor.colorSubtitle;
|
||||||
|
static const Color buttonTextColor = AppColor.toastErrorBackgroundColor;
|
||||||
|
}
|
||||||
@@ -20,8 +20,10 @@ import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option
|
|||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/search_more_email_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/model/delete_action_type.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/presentation/styles/banner_delete_all_spam_emails_styles.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/thread_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/app_bar_thread_widget_builder.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/banner_delete_all_spam_emails_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/bottom_bar_thread_selection_widget.dart';
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/bottom_bar_thread_selection_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'
|
import 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_builder.dart'
|
||||||
if (dart.library.html) 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart';
|
if (dart.library.html) 'package:tmail_ui_user/features/thread/presentation/widgets/email_tile_web_builder.dart';
|
||||||
@@ -77,6 +79,20 @@ class ThreadView extends GetWidget<ThreadController>
|
|||||||
_buildVacationNotificationMessage(context),
|
_buildVacationNotificationMessage(context),
|
||||||
],
|
],
|
||||||
_buildEmptyTrashButton(context),
|
_buildEmptyTrashButton(context),
|
||||||
|
Obx(() {
|
||||||
|
if (controller.mailboxDashBoardController.isEmptySpamBannerEnabledOnMobile(context)) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsetsDirectional.symmetric(
|
||||||
|
horizontal: BannerDeleteAllSpamEmailsStyles.mobileMargin
|
||||||
|
),
|
||||||
|
child: BannerDeleteAllSpamEmailsWidget(
|
||||||
|
onTapAction: () => controller.mailboxDashBoardController.openDialogEmptySpamFolder(context)
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
if (!_responsiveUtils.isDesktop(context))
|
if (!_responsiveUtils.isDesktop(context))
|
||||||
_buildMarkAsMailboxReadLoading(context),
|
_buildMarkAsMailboxReadLoading(context),
|
||||||
_buildLoadingView(),
|
_buildLoadingView(),
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
|
import 'package:get/get.dart';
|
||||||
|
import 'package:tmail_ui_user/features/thread/presentation/styles/banner_delete_all_spam_emails_styles.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
class BannerDeleteAllSpamEmailsWidget extends StatelessWidget {
|
||||||
|
|
||||||
|
final VoidCallback onTapAction;
|
||||||
|
|
||||||
|
const BannerDeleteAllSpamEmailsWidget({super.key, required this.onTapAction});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final imagePaths = Get.find<ImagePaths>();
|
||||||
|
return Container(
|
||||||
|
decoration: const ShapeDecoration(
|
||||||
|
color: BannerDeleteAllSpamEmailsStyles.backgroundColor,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
side: BorderSide(
|
||||||
|
width: 1,
|
||||||
|
color: BannerDeleteAllSpamEmailsStyles.borderStrokeColor,
|
||||||
|
),
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(BannerDeleteAllSpamEmailsStyles.borderRadius)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Material(
|
||||||
|
color: Colors.transparent,
|
||||||
|
child: InkWell(
|
||||||
|
onTap: onTapAction,
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(BannerDeleteAllSpamEmailsStyles.borderRadius)),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsetsDirectional.symmetric(
|
||||||
|
horizontal: BannerDeleteAllSpamEmailsStyles.horizontalPadding,
|
||||||
|
vertical: BannerDeleteAllSpamEmailsStyles.verticalPadding
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
imagePaths.icDeleteRuleMobile,
|
||||||
|
width: BannerDeleteAllSpamEmailsStyles.iconSize,
|
||||||
|
height: BannerDeleteAllSpamEmailsStyles.iconSize,
|
||||||
|
fit: BoxFit.fill
|
||||||
|
),
|
||||||
|
const SizedBox(width: BannerDeleteAllSpamEmailsStyles.space),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context).deleteAllSpamEmailsNow,
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: BannerDeleteAllSpamEmailsStyles.buttonTextSize,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
color: BannerDeleteAllSpamEmailsStyles.buttonTextColor
|
||||||
|
)
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
AppLocalizations.of(context).bannerDeleteAllSpamEmailsMessage,
|
||||||
|
style: const TextStyle(
|
||||||
|
color: BannerDeleteAllSpamEmailsStyles.labelTextColor,
|
||||||
|
fontSize: BannerDeleteAllSpamEmailsStyles.labelTextSize,
|
||||||
|
fontWeight: FontWeight.w400
|
||||||
|
)
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"@@last_modified": "2023-08-03T15:58:37.476969",
|
"@@last_modified": "2023-08-03T18:37:14.070879",
|
||||||
"initializing_data": "Initializing data...",
|
"initializing_data": "Initializing data...",
|
||||||
"@initializing_data": {
|
"@initializing_data": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -3125,5 +3125,11 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"bannerDeleteAllSpamEmailsMessage": "All messages in Spam will be deleted if you reach limited storage.",
|
||||||
|
"@bannerDeleteAllSpamEmailsMessage": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3222,4 +3222,16 @@ class AppLocalizations {
|
|||||||
'You are about to permanently delete all items in Spam . Do you want to continue?',
|
'You are about to permanently delete all items in Spam . Do you want to continue?',
|
||||||
name: 'emptySpamMessageDialog');
|
name: 'emptySpamMessageDialog');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get bannerDeleteAllSpamEmailsMessage {
|
||||||
|
return Intl.message(
|
||||||
|
'All messages in Spam will be deleted if you reach limited storage.',
|
||||||
|
name: 'bannerDeleteAllSpamEmailsMessage');
|
||||||
|
}
|
||||||
|
|
||||||
|
String get deleteAllSpamEmailsNow {
|
||||||
|
return Intl.message(
|
||||||
|
'Delete all spam emails now',
|
||||||
|
name: 'deleteAllSpamEmailsNow');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user