TF-3406 Add edit as new email feature

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
DatDang
2025-01-20 19:40:43 +07:00
committed by Dat H. Pham
parent 412431ceaa
commit 3ddb81a8c4
15 changed files with 161 additions and 9 deletions
@@ -43,6 +43,12 @@ mixin EmailActionController {
mailboxDashBoardController.goToComposer(ComposerArguments.editDraftEmail(presentationEmail));
}
void editAsNewEmail(PresentationEmail presentationEmail) {
mailboxDashBoardController.goToComposer(
ComposerArguments.fromPresentationEmail(presentationEmail),
);
}
void previewEmail(PresentationEmail presentationEmail) {
log('EmailActionController::previewEmail():presentationEmailId: ${presentationEmail.id}');
mailboxDashBoardController.openEmailDetailedView(presentationEmail);
@@ -1152,6 +1152,8 @@ class ThreadController extends BaseController with EmailActionController {
case EmailActionType.preview:
if (mailboxContain?.isDrafts == true) {
editDraftEmail(selectedEmail);
} else if (mailboxContain?.isTemplates == true) {
editAsNewEmail(selectedEmail);
} else {
previewEmail(selectedEmail);
}
@@ -697,6 +697,8 @@ class ThreadView extends GetWidget<ThreadController>
_markAsEmailSpamOrUnSpamContextMenuItemAction(context, email, mailboxContain),
if (mailboxContain?.isArchive == false)
_archiveMessageContextMenuItemAction(context, email),
if (mailboxContain?.isDrafts == false)
_editAsNewEmailContextMenuItemAction(context, email),
];
}
@@ -770,7 +772,7 @@ class ThreadView extends GetWidget<ThreadController>
email,
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsetsDirectional.only(start: 12, end: 16)
: const EdgeInsetsDirectional.only(start: 12),
: const EdgeInsetsDirectional.only(end: 12),
iconRightPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsetsDirectional.only(start: 12)
: EdgeInsets.zero
@@ -779,6 +781,35 @@ class ThreadView extends GetWidget<ThreadController>
).build();
}
Widget _editAsNewEmailContextMenuItemAction(
BuildContext context,
PresentationEmail email,
) {
return (
EmailActionCupertinoActionSheetActionBuilder(
const Key('edit_as_new_email_action'),
SvgPicture.asset(
controller.imagePaths.icEdit,
width: 24,
height: 24,
fit: BoxFit.fill,
colorFilter: AppColor.colorTextButton.asFilter()
),
AppLocalizations.of(context).editAsNewEmail,
email,
iconLeftPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsetsDirectional.only(start: 12, end: 16)
: const EdgeInsetsDirectional.only(end: 12),
iconRightPadding: controller.responsiveUtils.isMobile(context)
? const EdgeInsetsDirectional.only(start: 12)
: EdgeInsets.zero)
..onActionClick((email) {
popBack();
controller.editAsNewEmail(email);
})
).build();
}
List<PopupMenuEntry> _popupMenuActionTile(BuildContext context, PresentationEmail email) {
final mailboxContain = email.mailboxContain;
@@ -788,6 +819,8 @@ class ThreadView extends GetWidget<ThreadController>
_buildMarkAsSpamPopupMenuItem(context, email, mailboxContain),
if (mailboxContain?.isArchive == false)
_buildArchiveMessagePopupMenuItem(context, email),
if (mailboxContain?.isDrafts == false)
_buildEditAsNewEmailPopupMenuItem(AppLocalizations.of(context), email),
];
}
@@ -865,6 +898,29 @@ class ThreadView extends GetWidget<ThreadController>
);
}
PopupMenuEntry _buildEditAsNewEmailPopupMenuItem(
AppLocalizations appLocalizations,
PresentationEmail email,
) {
return PopupMenuItem(
padding: EdgeInsets.zero,
child: popupItem(
controller.imagePaths.icEdit,
appLocalizations.editAsNewEmail,
colorIcon: AppColor.colorTextButton,
styleName: const TextStyle(
fontWeight: FontWeight.w500,
fontSize: 16,
color: Colors.black
),
onCallbackAction: () {
popBack();
controller.editAsNewEmail(email);
}
)
);
}
Widget _buildMailboxActionProgressBanner(BuildContext context) {
return Obx(() {
return _MailboxActionProgressBanner(