TF-3189 new confirmation popup when enabling subaddressing for a folder

This commit is contained in:
Florent Azavant
2024-11-29 12:25:42 +01:00
committed by Dat H. Pham
parent 019dbe6e03
commit 78be3e4d79
6 changed files with 164 additions and 7 deletions
@@ -75,6 +75,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.d
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/open_mailbox_view_event.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_utils.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/copy_subaddress_widget.dart';
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/mailbox_creator_arguments.dart';
import 'package:tmail_ui_user/features/mailbox_creator/presentation/model/new_mailbox_arguments.dart';
@@ -1267,6 +1268,22 @@ class MailboxController extends BaseMailboxController
_unsubscribeMailboxAction(mailbox.id);
break;
case MailboxActions.allowSubaddressing:
try{
final subaddress = getSubaddress(mailboxDashBoardController.userEmail, findNodePathWithSeparator(mailbox.id, '.')!);
openConfirmationDialogSubaddressingAction(
context,
responsiveUtils,
imagePaths,
mailbox.id,
mailbox.getDisplayName(context),
subaddress,
mailbox.rights,
onAllowSubaddressingAction: _handleSubaddressingAction
);
} catch (error) {
appToast.showToastErrorMessage(context, AppLocalizations.of(context).errorWhileFetchingSubaddress);
}
break;
case MailboxActions.disallowSubaddressing:
_handleSubaddressingAction(mailbox.id, mailbox.rights, actions);
break;
@@ -1644,6 +1661,51 @@ class MailboxController extends BaseMailboxController
return session.getContactSupportCapability(accountId);
}
void openConfirmationDialogSubaddressingAction(
BuildContext context,
ResponsiveUtils responsiveUtils,
ImagePaths imagePaths,
MailboxId mailboxId,
String mailboxName,
String subaddress,
Map<String, List<String>?>? currentRights, {
required AllowSubaddressingActionCallback onAllowSubaddressingAction
}) {
if (responsiveUtils.isLandscapeMobile(context) || responsiveUtils.isPortraitMobile(context)) {
(ConfirmationDialogActionSheetBuilder(context)
..messageText(AppLocalizations.of(context).message_confirmation_dialog_allow_subaddressing(mailboxName))
..onCancelAction(AppLocalizations.of(context).cancel, () => popBack())
..onConfirmAction(AppLocalizations.of(context).allow, () => onAllowSubaddressingAction(mailboxId, currentRights, MailboxActions.allowSubaddressing))
).show();
} else {
Get.dialog(
PointerInterceptor(
child: (ConfirmDialogBuilder(imagePaths)
..key(const Key('confirm_dialog_subaddressing'))
..title(AppLocalizations.of(context).allowSubaddressing)
..styleTitle(const TextStyle(
fontSize: 17,
fontWeight: FontWeight.w500,
color: AppColor.colorTextButton
))
..content(AppLocalizations.of(context).message_confirmation_dialog_allow_subaddressing(mailboxName))
..addIcon(SvgPicture.asset(imagePaths.icSubaddressingAllow, width: 64, height: 64))
..addWidgetContent(CopySubaddressWidget(
context: context,
imagePath: imagePaths,
subaddress: subaddress,
onCopyButtonAction: () => copySubaddressAction(context, subaddress),
))
..colorCancelButton(AppColor.colorContentEmail)
..onCloseButtonAction(() => popBack())
..onConfirmButtonAction(AppLocalizations.of(context).allow, () => onAllowSubaddressingAction(mailboxId, currentRights, MailboxActions.allowSubaddressing))
..onCancelButtonAction(AppLocalizations.of(context).cancel, () => popBack())
).build()),
barrierColor: AppColor.colorDefaultCupertinoActionSheet,
);
}
}
void copySubaddressAction(BuildContext context, String subaddress) {
Clipboard.setData(ClipboardData(text: subaddress));
appToast.showToastSuccessMessage(context, AppLocalizations.of(context).emailSubaddressCopiedToClipboard);
@@ -0,0 +1,50 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/views/button/tmail_button_widget.dart';
import 'package:flutter/material.dart';
typedef OnCopyButtonAction = void Function();
class CopySubaddressWidget extends StatelessWidget {
final BuildContext context;
final ImagePaths imagePath;
final String subaddress;
final OnCopyButtonAction onCopyButtonAction;
const CopySubaddressWidget({
super.key,
required this.context,
required this.imagePath,
required this.subaddress,
required this.onCopyButtonAction
});
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 24),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Text(
subaddress,
style: const TextStyle(fontSize: 17.0, color: AppColor.colorMessageDialog),
),
),
TMailButtonWidget.fromIcon(
icon: imagePath.icCopy,
iconSize: 30,
padding: const EdgeInsets.all(3),
backgroundColor: Colors.transparent,
margin: const EdgeInsetsDirectional.only(top: 16, end: 16),
onTapActionCallback: onCopyButtonAction
)
],
),
);
}
}