TF-421 Support delete permanently selection email in mailbox Draft
This commit is contained in:
@@ -139,6 +139,7 @@ extension AppColor on Color {
|
||||
static const colorDividerRuleFilter = Color(0xFFE7E8EC);
|
||||
static const colorIconTextField = Color(0xFFB8C1CC);
|
||||
static const colorVacationNotificationMessageBackground = Color(0x2999A2AD);
|
||||
static const colorDeletePermanentlyButton = Color(0xffE64646);
|
||||
|
||||
static const mapGradientColor = [
|
||||
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
||||
|
||||
@@ -2,6 +2,14 @@ import 'package:core/core.dart';
|
||||
import 'package:tmail_ui_user/features/base/state/ui_action_state.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/state.dart' as jmap;
|
||||
|
||||
class StartDeleteEmailPermanently extends UIState {
|
||||
|
||||
StartDeleteEmailPermanently();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class DeleteEmailPermanentlySuccess extends UIActionState {
|
||||
|
||||
DeleteEmailPermanentlySuccess({
|
||||
|
||||
@@ -14,6 +14,8 @@ class DeleteEmailPermanentlyInteractor {
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId, EmailId emailId) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(StartDeleteEmailPermanently());
|
||||
|
||||
final listState = await Future.wait([
|
||||
_mailboxRepository.getMailboxState(),
|
||||
_emailRepository.getEmailState(),
|
||||
|
||||
@@ -421,12 +421,17 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
}
|
||||
}),
|
||||
Obx(() => buildIconWeb(
|
||||
icon: SvgPicture.asset(imagePaths.icDelete, fit: BoxFit.fill),
|
||||
tooltip: controller.selectedMailbox.value?.isTrash == true
|
||||
icon: SvgPicture.asset(
|
||||
canDeletePermanently ? imagePaths.icDeleteComposer : imagePaths.icDelete,
|
||||
color: canDeletePermanently ? AppColor.colorDeletePermanentlyButton : AppColor.primaryColor,
|
||||
width: 20,
|
||||
height: 20,
|
||||
fit: BoxFit.fill),
|
||||
tooltip: canDeletePermanently
|
||||
? AppLocalizations.of(context).delete_permanently
|
||||
: AppLocalizations.of(context).move_to_trash,
|
||||
onTap: () {
|
||||
if (controller.selectedMailbox.value?.isTrash == true) {
|
||||
if (canDeletePermanently) {
|
||||
return controller.dispatchAction(HandleEmailActionTypeAction(context,
|
||||
controller.listEmailSelected,
|
||||
EmailActionType.deletePermanently));
|
||||
@@ -439,6 +444,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
||||
]);
|
||||
}
|
||||
|
||||
bool get canDeletePermanently {
|
||||
return controller.selectedMailbox.value?.isTrash == true ||
|
||||
controller.selectedMailbox.value?.isDrafts == true;
|
||||
}
|
||||
|
||||
Widget _buildSearchForm(BuildContext context) {
|
||||
return Row(
|
||||
children: [
|
||||
|
||||
@@ -21,12 +21,14 @@ extension DeleteActionTypeExtension on DeleteActionType {
|
||||
}
|
||||
}
|
||||
|
||||
String getContentDialog(BuildContext context, {int? count}) {
|
||||
String getContentDialog(BuildContext context, {int? count, String? mailboxName}) {
|
||||
switch(this) {
|
||||
case DeleteActionType.all:
|
||||
return AppLocalizations.of(context).empty_trash_dialog_message;
|
||||
case DeleteActionType.multiple:
|
||||
return AppLocalizations.of(context).delete_multiple_messages_dialog(count ?? 0);
|
||||
return AppLocalizations.of(context).delete_multiple_messages_dialog(
|
||||
count ?? 0,
|
||||
mailboxName ?? '');
|
||||
case DeleteActionType.single:
|
||||
return AppLocalizations.of(context).delete_single_message_dialog;
|
||||
}
|
||||
|
||||
@@ -928,7 +928,11 @@ class ThreadController extends BaseController {
|
||||
moveSelectedMultipleEmailToTrash(selectionEmail);
|
||||
break;
|
||||
case EmailActionType.deletePermanently:
|
||||
deleteSelectionEmailsPermanently(context, DeleteActionType.multiple, selectedEmails: selectionEmail);
|
||||
deleteSelectionEmailsPermanently(
|
||||
context,
|
||||
DeleteActionType.multiple,
|
||||
selectedEmails: selectionEmail,
|
||||
presentationMailbox: currentMailbox);
|
||||
break;
|
||||
case EmailActionType.moveToSpam:
|
||||
moveSelectedMultipleEmailToSpam(selectionEmail);
|
||||
@@ -1144,10 +1148,20 @@ class ThreadController extends BaseController {
|
||||
|
||||
bool get isMailboxTrash => mailboxDashBoardController.selectedMailbox.value?.role == PresentationMailbox.roleTrash;
|
||||
|
||||
void deleteSelectionEmailsPermanently(BuildContext context, DeleteActionType actionType, {List<PresentationEmail>? selectedEmails}) {
|
||||
void deleteSelectionEmailsPermanently(
|
||||
BuildContext context,
|
||||
DeleteActionType actionType,
|
||||
{
|
||||
List<PresentationEmail>? selectedEmails,
|
||||
PresentationMailbox? presentationMailbox
|
||||
}
|
||||
) {
|
||||
if (_responsiveUtils.isMobile(context)) {
|
||||
(ConfirmationDialogActionSheetBuilder(context)
|
||||
..messageText(actionType.getContentDialog(context, count: selectedEmails?.length))
|
||||
..messageText(actionType.getContentDialog(
|
||||
context,
|
||||
count: selectedEmails?.length,
|
||||
mailboxName: presentationMailbox?.name?.name))
|
||||
..onCancelAction(AppLocalizations.of(context).cancel, () => popBack())
|
||||
..onConfirmAction(actionType.getConfirmActionName(context), () => _deleteSelectionEmailsPermanentlyAction(actionType)))
|
||||
.show();
|
||||
@@ -1158,7 +1172,10 @@ class ThreadController extends BaseController {
|
||||
builder: (BuildContext context) => PointerInterceptor(child: (ConfirmDialogBuilder(_imagePaths)
|
||||
..key(const Key('confirm_dialog_delete_emails_permanently'))
|
||||
..title(actionType.getTitleDialog(context))
|
||||
..content(actionType.getContentDialog(context, count: selectedEmails?.length))
|
||||
..content(actionType.getContentDialog(
|
||||
context,
|
||||
count: selectedEmails?.length,
|
||||
mailboxName: presentationMailbox?.name?.name))
|
||||
..addIcon(SvgPicture.asset(_imagePaths.icRemoveDialog, fit: BoxFit.fill))
|
||||
..colorConfirmButton(AppColor.colorConfirmActionDialog)
|
||||
..styleTextConfirmButton(const TextStyle(fontSize: 17, fontWeight: FontWeight.w500, color: AppColor.colorActionDeleteConfirmDialog))
|
||||
|
||||
@@ -190,21 +190,25 @@ class AppBarThreadWidgetBuilder {
|
||||
iconPadding: const EdgeInsets.all(5),
|
||||
splashRadius: 15,
|
||||
icon: SvgPicture.asset(
|
||||
_imagePaths.icDeleteComposer,
|
||||
width: 18,
|
||||
height: 18,
|
||||
color: AppColor.textFieldErrorBorderColor,
|
||||
canDeletePermanently ? _imagePaths.icDeleteComposer : _imagePaths.icDelete,
|
||||
color: canDeletePermanently ? AppColor.colorDeletePermanentlyButton : AppColor.primaryColor,
|
||||
width: 20,
|
||||
height: 20,
|
||||
fit: BoxFit.fill),
|
||||
tooltip: _currentMailbox?.role != PresentationMailbox.roleTrash
|
||||
? AppLocalizations.of(_context).move_to_trash
|
||||
: AppLocalizations.of(_context).delete_permanently,
|
||||
onTap: () => _currentMailbox?.isTrash == true
|
||||
tooltip: canDeletePermanently
|
||||
? AppLocalizations.of(_context).delete_permanently
|
||||
: AppLocalizations.of(_context).move_to_trash,
|
||||
onTap: () => canDeletePermanently
|
||||
? _onEmailSelectionAction?.call(EmailActionType.deletePermanently, _listSelectionEmail)
|
||||
: _onEmailSelectionAction?.call(EmailActionType.moveToTrash, _listSelectionEmail)),
|
||||
const SizedBox(width: 10),
|
||||
]);
|
||||
}
|
||||
|
||||
bool get canDeletePermanently {
|
||||
return _currentMailbox?.isTrash == true || _currentMailbox?.isDrafts == true;
|
||||
}
|
||||
|
||||
Widget _buildBodyAppBarForMobile() {
|
||||
return Row(children: [
|
||||
Expanded(child: Stack(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"@@last_modified": "2022-09-08T14:02:20.481140",
|
||||
"@@last_modified": "2022-09-08T15:46:55.686024",
|
||||
"initializing_data": "Initializing data...",
|
||||
"@initializing_data": {
|
||||
"type": "text",
|
||||
@@ -1036,14 +1036,16 @@
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"delete_multiple_messages_dialog": "You are about to permanently delete {count} items in Trash . Do you want to continue?",
|
||||
"delete_multiple_messages_dialog": "You are about to permanently delete {count} items in {mailboxName} . Do you want to continue?",
|
||||
"@delete_multiple_messages_dialog": {
|
||||
"type": "text",
|
||||
"placeholders_order": [
|
||||
"count"
|
||||
"count",
|
||||
"mailboxName"
|
||||
],
|
||||
"placeholders": {
|
||||
"count": {}
|
||||
"count": {},
|
||||
"mailboxName": {}
|
||||
}
|
||||
},
|
||||
"delete_single_message_dialog": "You are about to permanently delete this message. Do you want to continue?",
|
||||
|
||||
@@ -1075,11 +1075,11 @@ class AppLocalizations {
|
||||
name: 'delete_message_forever');
|
||||
}
|
||||
|
||||
String delete_multiple_messages_dialog(int count) {
|
||||
String delete_multiple_messages_dialog(int count, String mailboxName) {
|
||||
return Intl.message(
|
||||
'You are about to permanently delete $count items in Trash . Do you want to continue?',
|
||||
'You are about to permanently delete $count items in $mailboxName . Do you want to continue?',
|
||||
name: 'delete_multiple_messages_dialog',
|
||||
args: [count]);
|
||||
args: [count, mailboxName]);
|
||||
}
|
||||
|
||||
String get delete_single_message_dialog {
|
||||
|
||||
Reference in New Issue
Block a user