TF-1718 Show dialog unsubscribe mail

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit d29ea95dc63719c35676fd87a82c73c55ee9db0d)
This commit is contained in:
dab246
2023-11-16 00:14:40 +07:00
committed by Dat Vu
parent 94909470af
commit 0b49cf36ee
6 changed files with 83 additions and 6 deletions
@@ -229,6 +229,8 @@ extension AppColor on Color {
static const colorScrollbarThumbColor = Color(0xFFD8E1EB);
static const colorDropDownTitleComposer = Color(0xFF79747E);
static const colorDropDownItemTitleComposer = Color(0xFF0A0A0A);
static const messageDialogColor = Color(0xFF8C9CAF);
static const messageDialogHighlightColor = Color(0xFF37383A);
static const mapGradientColor = [
[Color(0xFF21D4FD), Color(0xFFB721FF)],
@@ -440,6 +440,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
if (isShowMessageReadReceipt) {
_handleReadReceipt();
}
if (success.emailCurrent?.hasListUnsubscribe == true) {
_handleUnsubscribe(success.emailCurrent!.listUnsubscribe);
} else {
emailUnsubscribe.value = null;
}
}
}
@@ -956,7 +962,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void handleEmailAction(BuildContext context, PresentationEmail presentationEmail, EmailActionType actionType) {
switch(actionType) {
case EmailActionType.markAsUnread:
popBack();
markAsEmailRead(presentationEmail, ReadActions.markAsUnread, MarkReadAction.tap);
break;
case EmailActionType.markAsStarred:
@@ -975,16 +980,17 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
deleteEmailPermanently(context, presentationEmail);
break;
case EmailActionType.moveToSpam:
popBack();
moveToSpam(context, presentationEmail);
break;
case EmailActionType.unSpam:
popBack();
unSpam(context, presentationEmail);
break;
case EmailActionType.createRule:
quickCreatingRule(context, presentationEmail.from!.first);
break;
case EmailActionType.unsubscribe:
_unsubscribeEmail(context, presentationEmail);
break;
default:
break;
}
@@ -1392,4 +1398,33 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
);
}
}
void _unsubscribeEmail(BuildContext context, PresentationEmail presentationEmail) {
showConfirmDialogAction(
context,
'',
AppLocalizations.of(context).unsubscribe,
onConfirmAction: () => {},
showAsBottomSheet: true,
title: AppLocalizations.of(context).unsubscribeMail,
icon: SvgPicture.asset(imagePaths.icEmpty),
messageStyle: const TextStyle(
color: AppColor.messageDialogColor,
fontSize: 14,
fontWeight: FontWeight.w500
),
listTextSpan: [
TextSpan(text: AppLocalizations.of(context).unsubscribeMailDialogMessage),
TextSpan(
text: ' ${presentationEmail.getSenderName()}',
style: const TextStyle(
color: AppColor.messageDialogHighlightColor,
fontSize: 15,
fontWeight: FontWeight.w500
),
),
const TextSpan(text: ' ?'),
]
);
}
}
@@ -36,6 +36,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/information_se
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
class EmailView extends GetWidget<SingleEmailController> {
@@ -304,6 +305,7 @@ class EmailView extends GetWidget<SingleEmailController> {
responsiveUtils: controller.responsiveUtils,
emailUnsubscribe: controller.emailUnsubscribe.value,
openEmailAddressDetailAction: controller.openEmailAddressDialog,
onEmailActionClick: (presentationEmail, actionType) => controller.handleEmailAction(context, presentationEmail, actionType),
)),
Obx(() {
final attachments = controller.attachments.listAttachmentsDisplayedOutSide;
@@ -472,7 +474,10 @@ class EmailView extends GetWidget<SingleEmailController> {
? const EdgeInsetsDirectional.only(end: 12)
: EdgeInsets.zero
)
..onActionClick((presentationEmail) => controller.handleEmailAction(context, presentationEmail, action))).build();
..onActionClick((presentationEmail) {
popBack();
controller.handleEmailAction(context, presentationEmail, action);
})).build();
}).toList();
}
@@ -483,6 +488,7 @@ class EmailView extends GetWidget<SingleEmailController> {
) {
return actionTypes.map((action) {
return PopupMenuItem(
key: Key('${action.name}_action'),
padding: EdgeInsets.zero,
child: PopupItemWidget(
action.getIcon(controller.imagePaths),
@@ -494,7 +500,10 @@ class EmailView extends GetWidget<SingleEmailController> {
fontSize: 16,
color: Colors.black
),
onCallbackAction: () => controller.handleEmailAction(context, presentationEmail, action)
onCallbackAction: () {
popBack();
controller.handleEmailAction(context, presentationEmail, action);
}
)
);
}).toList();
@@ -3,12 +3,14 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/presentation_email_extension.dart';
import 'package:tmail_ui_user/features/base/widget/email_avatar_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/model/email_unsubscribe.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_receiver_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_sender_builder.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_app_bar_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/widgets/received_time_builder.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -19,6 +21,7 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget {
final ImagePaths imagePaths;
final EmailUnsubscribe? emailUnsubscribe;
final OnOpenEmailAddressDetailAction? openEmailAddressDetailAction;
final OnEmailActionClick? onEmailActionClick;
const InformationSenderAndReceiverBuilder({
Key? key,
@@ -27,6 +30,7 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget {
required this.imagePaths,
required this.emailUnsubscribe,
this.openEmailAddressDetailAction,
this.onEmailActionClick,
}) : super(key: key);
@override
@@ -70,6 +74,7 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget {
),
padding: const EdgeInsetsDirectional.symmetric(vertical: 5, horizontal: 8),
backgroundColor: Colors.transparent,
onTapActionCallback: () => onEmailActionClick?.call(emailSelected, EmailActionType.unsubscribe),
),
],
)
+13 -1
View File
@@ -1,5 +1,5 @@
{
"@@last_modified": "2023-11-15T14:44:16.030072",
"@@last_modified": "2023-11-16T00:13:28.374001",
"initializing_data": "Initializing data...",
"@initializing_data": {
"type": "text",
@@ -3499,5 +3499,17 @@
"type": "text",
"placeholders_order": [],
"placeholders": {}
},
"unsubscribeMail": "Unsubscribe mail",
"@unsubscribeMail": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
},
"unsubscribeMailDialogMessage": "Are you sure you'd like to stop receiving similar messages from",
"@unsubscribeMailDialogMessage": {
"type": "text",
"placeholders_order": [],
"placeholders": {}
}
}
@@ -3631,4 +3631,18 @@ class AppLocalizations {
name: 'unsubscribe',
);
}
String get unsubscribeMail {
return Intl.message(
'Unsubscribe mail',
name: 'unsubscribeMail',
);
}
String get unsubscribeMailDialogMessage {
return Intl.message(
'Are you sure you\'d like to stop receiving similar messages from',
name: 'unsubscribeMailDialogMessage',
);
}
}