TF-1792 Hide banner empty trash when mailbox trash empty emails

(cherry picked from commit b0533ebb3e480b737a84085d6743eba1b8c897a6)
This commit is contained in:
dab246
2023-05-04 19:00:31 +07:00
committed by Dat Vu
parent 4d84ac176a
commit 94d066305a
8 changed files with 54 additions and 16 deletions
@@ -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;
@@ -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;