TF-1718 Show dialog unsubscribe mail
Signed-off-by: dab246 <tdvu@linagora.com> (cherry picked from commit d29ea95dc63719c35676fd87a82c73c55ee9db0d)
This commit is contained in:
@@ -229,6 +229,8 @@ extension AppColor on Color {
|
|||||||
static const colorScrollbarThumbColor = Color(0xFFD8E1EB);
|
static const colorScrollbarThumbColor = Color(0xFFD8E1EB);
|
||||||
static const colorDropDownTitleComposer = Color(0xFF79747E);
|
static const colorDropDownTitleComposer = Color(0xFF79747E);
|
||||||
static const colorDropDownItemTitleComposer = Color(0xFF0A0A0A);
|
static const colorDropDownItemTitleComposer = Color(0xFF0A0A0A);
|
||||||
|
static const messageDialogColor = Color(0xFF8C9CAF);
|
||||||
|
static const messageDialogHighlightColor = Color(0xFF37383A);
|
||||||
|
|
||||||
static const mapGradientColor = [
|
static const mapGradientColor = [
|
||||||
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
||||||
|
|||||||
@@ -440,6 +440,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
if (isShowMessageReadReceipt) {
|
if (isShowMessageReadReceipt) {
|
||||||
_handleReadReceipt();
|
_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) {
|
void handleEmailAction(BuildContext context, PresentationEmail presentationEmail, EmailActionType actionType) {
|
||||||
switch(actionType) {
|
switch(actionType) {
|
||||||
case EmailActionType.markAsUnread:
|
case EmailActionType.markAsUnread:
|
||||||
popBack();
|
|
||||||
markAsEmailRead(presentationEmail, ReadActions.markAsUnread, MarkReadAction.tap);
|
markAsEmailRead(presentationEmail, ReadActions.markAsUnread, MarkReadAction.tap);
|
||||||
break;
|
break;
|
||||||
case EmailActionType.markAsStarred:
|
case EmailActionType.markAsStarred:
|
||||||
@@ -975,16 +980,17 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
deleteEmailPermanently(context, presentationEmail);
|
deleteEmailPermanently(context, presentationEmail);
|
||||||
break;
|
break;
|
||||||
case EmailActionType.moveToSpam:
|
case EmailActionType.moveToSpam:
|
||||||
popBack();
|
|
||||||
moveToSpam(context, presentationEmail);
|
moveToSpam(context, presentationEmail);
|
||||||
break;
|
break;
|
||||||
case EmailActionType.unSpam:
|
case EmailActionType.unSpam:
|
||||||
popBack();
|
|
||||||
unSpam(context, presentationEmail);
|
unSpam(context, presentationEmail);
|
||||||
break;
|
break;
|
||||||
case EmailActionType.createRule:
|
case EmailActionType.createRule:
|
||||||
quickCreatingRule(context, presentationEmail.from!.first);
|
quickCreatingRule(context, presentationEmail.from!.first);
|
||||||
break;
|
break;
|
||||||
|
case EmailActionType.unsubscribe:
|
||||||
|
_unsubscribeEmail(context, presentationEmail);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
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/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/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/localizations/app_localizations.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||||
|
|
||||||
class EmailView extends GetWidget<SingleEmailController> {
|
class EmailView extends GetWidget<SingleEmailController> {
|
||||||
@@ -304,6 +305,7 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
responsiveUtils: controller.responsiveUtils,
|
responsiveUtils: controller.responsiveUtils,
|
||||||
emailUnsubscribe: controller.emailUnsubscribe.value,
|
emailUnsubscribe: controller.emailUnsubscribe.value,
|
||||||
openEmailAddressDetailAction: controller.openEmailAddressDialog,
|
openEmailAddressDetailAction: controller.openEmailAddressDialog,
|
||||||
|
onEmailActionClick: (presentationEmail, actionType) => controller.handleEmailAction(context, presentationEmail, actionType),
|
||||||
)),
|
)),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
final attachments = controller.attachments.listAttachmentsDisplayedOutSide;
|
final attachments = controller.attachments.listAttachmentsDisplayedOutSide;
|
||||||
@@ -472,7 +474,10 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
? const EdgeInsetsDirectional.only(end: 12)
|
? const EdgeInsetsDirectional.only(end: 12)
|
||||||
: EdgeInsets.zero
|
: EdgeInsets.zero
|
||||||
)
|
)
|
||||||
..onActionClick((presentationEmail) => controller.handleEmailAction(context, presentationEmail, action))).build();
|
..onActionClick((presentationEmail) {
|
||||||
|
popBack();
|
||||||
|
controller.handleEmailAction(context, presentationEmail, action);
|
||||||
|
})).build();
|
||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -483,6 +488,7 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
) {
|
) {
|
||||||
return actionTypes.map((action) {
|
return actionTypes.map((action) {
|
||||||
return PopupMenuItem(
|
return PopupMenuItem(
|
||||||
|
key: Key('${action.name}_action'),
|
||||||
padding: EdgeInsets.zero,
|
padding: EdgeInsets.zero,
|
||||||
child: PopupItemWidget(
|
child: PopupItemWidget(
|
||||||
action.getIcon(controller.imagePaths),
|
action.getIcon(controller.imagePaths),
|
||||||
@@ -494,7 +500,10 @@ class EmailView extends GetWidget<SingleEmailController> {
|
|||||||
fontSize: 16,
|
fontSize: 16,
|
||||||
color: Colors.black
|
color: Colors.black
|
||||||
),
|
),
|
||||||
onCallbackAction: () => controller.handleEmailAction(context, presentationEmail, action)
|
onCallbackAction: () {
|
||||||
|
popBack();
|
||||||
|
controller.handleEmailAction(context, presentationEmail, action);
|
||||||
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}).toList();
|
}).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/utils/responsive_utils.dart';
|
||||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:model/email/email_action_type.dart';
|
||||||
import 'package:model/email/presentation_email.dart';
|
import 'package:model/email/presentation_email.dart';
|
||||||
import 'package:model/extensions/presentation_email_extension.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/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/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_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_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/features/email/presentation/widgets/received_time_builder.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
@@ -19,6 +21,7 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget {
|
|||||||
final ImagePaths imagePaths;
|
final ImagePaths imagePaths;
|
||||||
final EmailUnsubscribe? emailUnsubscribe;
|
final EmailUnsubscribe? emailUnsubscribe;
|
||||||
final OnOpenEmailAddressDetailAction? openEmailAddressDetailAction;
|
final OnOpenEmailAddressDetailAction? openEmailAddressDetailAction;
|
||||||
|
final OnEmailActionClick? onEmailActionClick;
|
||||||
|
|
||||||
const InformationSenderAndReceiverBuilder({
|
const InformationSenderAndReceiverBuilder({
|
||||||
Key? key,
|
Key? key,
|
||||||
@@ -27,6 +30,7 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget {
|
|||||||
required this.imagePaths,
|
required this.imagePaths,
|
||||||
required this.emailUnsubscribe,
|
required this.emailUnsubscribe,
|
||||||
this.openEmailAddressDetailAction,
|
this.openEmailAddressDetailAction,
|
||||||
|
this.onEmailActionClick,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -70,6 +74,7 @@ class InformationSenderAndReceiverBuilder extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
padding: const EdgeInsetsDirectional.symmetric(vertical: 5, horizontal: 8),
|
padding: const EdgeInsetsDirectional.symmetric(vertical: 5, horizontal: 8),
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
|
onTapActionCallback: () => onEmailActionClick?.call(emailSelected, EmailActionType.unsubscribe),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -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": "Initializing data...",
|
||||||
"@initializing_data": {
|
"@initializing_data": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -3499,5 +3499,17 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"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',
|
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',
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user