TF-1792 Hide banner empty trash when mailbox trash empty emails
(cherry picked from commit b0533ebb3e480b737a84085d6743eba1b8c897a6)
This commit is contained in:
@@ -57,6 +57,7 @@ extension AppColor on Color {
|
||||
static const enableSendEmailButtonColor = Color(0xFF007AFF);
|
||||
static const disableSendEmailButtonColor = Color(0xFFA9B4C2);
|
||||
static const borderLeftEmailContentColor = Color(0xFFEFEFEF);
|
||||
static const toastWarningBackgroundColor = Color(0xFFFFC107);
|
||||
static const toastSuccessBackgroundColor = Color(0xFF4BB34B);
|
||||
static const toastErrorBackgroundColor = Color(0xFFE64646);
|
||||
static const toastWithActionBackgroundColor = Color(0xFF3F3F3F);
|
||||
|
||||
@@ -48,6 +48,25 @@ class AppToast {
|
||||
);
|
||||
}
|
||||
|
||||
void showToastWarningMessage(
|
||||
BuildContext context,
|
||||
String message,
|
||||
{
|
||||
Color? leadingSVGIconColor,
|
||||
String? leadingSVGIcon,
|
||||
}
|
||||
) {
|
||||
final imagePaths = Get.find<ImagePaths>();
|
||||
showToastMessage(
|
||||
context,
|
||||
message,
|
||||
backgroundColor: AppColor.toastWarningBackgroundColor,
|
||||
textColor: Colors.white,
|
||||
leadingSVGIconColor: leadingSVGIconColor ?? (leadingSVGIcon == null ? Colors.white : null),
|
||||
leadingSVGIcon: leadingSVGIcon ?? imagePaths.icInfoCircleOutline
|
||||
);
|
||||
}
|
||||
|
||||
void showToastMessage(
|
||||
BuildContext context,
|
||||
String message,
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/views/bottom_popup/confirmation_dialog_action_sheet_builder.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:pointer_interceptor/pointer_interceptor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
||||
@@ -47,11 +45,12 @@ mixin MailboxActionHandlerMixin {
|
||||
|
||||
void emptyTrashAction(
|
||||
BuildContext context,
|
||||
MailboxId mailboxId,
|
||||
PresentationMailbox mailbox,
|
||||
MailboxDashBoardController dashboardController
|
||||
) {
|
||||
final responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
final imagePaths = Get.find<ImagePaths>();
|
||||
final appToast = Get.find<AppToast>();
|
||||
|
||||
if (responsiveUtils.isScreenWithShortestSide(context)) {
|
||||
(ConfirmationDialogActionSheetBuilder(context)
|
||||
@@ -59,7 +58,14 @@ mixin MailboxActionHandlerMixin {
|
||||
..onCancelAction(AppLocalizations.of(context).cancel, popBack)
|
||||
..onConfirmAction(AppLocalizations.of(context).delete, () {
|
||||
popBack();
|
||||
dashboardController.emptyTrashFolderAction(trashFolderId: mailboxId);
|
||||
if (mailbox.countEmails > 0) {
|
||||
dashboardController.emptyTrashFolderAction(trashFolderId: mailbox.id);
|
||||
} else {
|
||||
appToast.showToastWarningMessage(
|
||||
context,
|
||||
AppLocalizations.of(context).noEmailInYourCurrentMailbox
|
||||
);
|
||||
}
|
||||
}))
|
||||
.show();
|
||||
} else {
|
||||
@@ -78,8 +84,15 @@ mixin MailboxActionHandlerMixin {
|
||||
color: AppColor.colorActionDeleteConfirmDialog))
|
||||
..onCloseButtonAction(popBack)
|
||||
..onConfirmButtonAction(AppLocalizations.of(context).delete, () {
|
||||
popBack();
|
||||
dashboardController.emptyTrashFolderAction(trashFolderId: mailboxId);
|
||||
popBack();
|
||||
if (mailbox.countEmails > 0) {
|
||||
dashboardController.emptyTrashFolderAction(trashFolderId: mailbox.id);
|
||||
} else {
|
||||
appToast.showToastWarningMessage(
|
||||
context,
|
||||
AppLocalizations.of(context).noEmailInYourCurrentMailbox
|
||||
);
|
||||
}
|
||||
})
|
||||
..onCancelButtonAction(AppLocalizations.of(context).cancel, popBack))
|
||||
.build()));
|
||||
|
||||
@@ -940,7 +940,7 @@ class MailboxController extends BaseMailboxController with MailboxActionHandlerM
|
||||
_unsubscribeMailboxAction(mailbox.id);
|
||||
break;
|
||||
case MailboxActions.emptyTrash:
|
||||
emptyTrashAction(context, mailbox.id, mailboxDashBoardController);
|
||||
emptyTrashAction(context, mailbox, mailboxDashBoardController);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
+5
-3
@@ -1394,9 +1394,11 @@ class MailboxDashBoardController extends ReloadableController {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool get isMailboxTrash => selectedMailbox.value?.isTrash == true;
|
||||
bool get isMailboxTrashValid {
|
||||
return selectedMailbox.value != null
|
||||
&& selectedMailbox.value!.isTrash
|
||||
&& selectedMailbox.value!.countEmails > 0;
|
||||
}
|
||||
|
||||
void emptyTrashAction(BuildContext context) {
|
||||
dispatchAction(EmptyTrashAction(context));
|
||||
|
||||
@@ -639,15 +639,16 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
.toList();
|
||||
}
|
||||
|
||||
bool supportEmptyTrash(BuildContext context) {
|
||||
return controller.isMailboxTrash
|
||||
&& !controller.searchController.isSearchActive()
|
||||
&& responsiveUtils.isWebDesktop(context);
|
||||
bool _supportEmptyTrash(BuildContext context) {
|
||||
return controller.isMailboxTrashValid
|
||||
&& !controller.searchController.isSearchActive()
|
||||
&& responsiveUtils.isWebDesktop(context);
|
||||
}
|
||||
|
||||
Widget _buildEmptyTrashButton(BuildContext context) {
|
||||
return Obx(() {
|
||||
if (supportEmptyTrash(context)) {
|
||||
log('MailboxDashBoardView::_buildEmptyTrashButton():');
|
||||
if (_supportEmptyTrash(context)) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(14)),
|
||||
|
||||
@@ -278,7 +278,7 @@ class SearchMailboxController extends BaseMailboxController with MailboxActionHa
|
||||
);
|
||||
break;
|
||||
case MailboxActions.emptyTrash:
|
||||
emptyTrashAction(context, mailbox.id, dashboardController);
|
||||
emptyTrashAction(context, mailbox, dashboardController);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -79,6 +79,8 @@ class PresentationMailbox with EquatableMixin {
|
||||
return unreadEmails!.value.value <= 999 ? '${unreadEmails!.value.value}' : '999+';
|
||||
}
|
||||
|
||||
int get countEmails => totalEmails?.value.value.toInt() ?? 0;
|
||||
|
||||
bool get isSpam => role == roleSpam;
|
||||
|
||||
bool get isTrash => role == roleTrash;
|
||||
|
||||
Reference in New Issue
Block a user