TF-3515 Add save email as template feature

This commit is contained in:
DatDang
2025-02-25 16:10:20 +07:00
committed by Dat H. Pham
parent ef1f979c4b
commit 7f09f9ceb4
40 changed files with 1079 additions and 54 deletions
@@ -39,12 +39,12 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
}
}
Set<EmailAddress>? createReplyToRecipients({bool isDraft = false}) {
Set<EmailAddress>? createReplyToRecipients({bool isNotReplyTo = false}) {
if (replyToRecipients?.isNotEmpty == true) {
return replyToRecipients;
}
if (isDraft) return null;
if (isNotReplyTo) return null;
return identity?.replyTo?.isNotEmpty == true
? identity!.replyTo!
@@ -60,18 +60,27 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
KeyWordIdentifier.emailDraft: true,
KeyWordIdentifier.emailSeen: true,
};
} else if (templateMailboxId != null) {
return {
KeyWordIdentifier.emailSeen: true,
};
} else {
return null;
}
}
Map<MailboxId, bool>? createMailboxIds() {
if (draftsMailboxId != null || outboxMailboxId != null) {
if (draftsMailboxId != null
|| outboxMailboxId != null
|| templateMailboxId != null
) {
return {
if (draftsMailboxId != null)
draftsMailboxId!: true,
if (outboxMailboxId != null)
outboxMailboxId!: true,
if (templateMailboxId != null)
templateMailboxId!: true,
};
} else {
return null;
@@ -115,6 +124,7 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
required PartId partId,
bool withIdentityHeader = false,
bool isDraft = false,
bool isTemplate = false,
}) {
return Email(
mailboxIds: createMailboxIds(),
@@ -122,7 +132,7 @@ extension CreateEmailRequestExtension on CreateEmailRequest {
to: toRecipients,
cc: ccRecipients,
bcc: bccRecipients,
replyTo: createReplyToRecipients(isDraft: isDraft),
replyTo: createReplyToRecipients(isNotReplyTo: isDraft || isTemplate),
inReplyTo: createInReplyTo(),
references: createReferences(),
keywords: createKeywords(),
@@ -65,8 +65,9 @@ extension SetupEmailContentExtension on ComposerController {
inlineImages: uiState.inlineImages,
);
if (currentEmailActionType == EmailActionType.editDraft) {
setupEmailRequestReadReceiptFlagForEditDraft(
if (currentEmailActionType == EmailActionType.editDraft ||
currentEmailActionType == EmailActionType.editAsNewEmail) {
setupEmailRequestReadReceiptFlag(
uiState.emailCurrent!.hasRequestReadReceipt,
);
setupSelectedIdentityForEditDraft(
@@ -81,8 +82,9 @@ extension SetupEmailContentExtension on ComposerController {
inlineImages: uiState.inlineImages,
);
if (currentEmailActionType == EmailActionType.editDraft) {
setupEmailRequestReadReceiptFlagForEditDraft(
if (currentEmailActionType == EmailActionType.editDraft ||
currentEmailActionType == EmailActionType.editAsNewEmail) {
setupEmailRequestReadReceiptFlag(
uiState.emailCurrent.hasRequestReadReceipt,
);
setupSelectedIdentityForEditDraft(
@@ -10,7 +10,8 @@ extension SetupEmailRequestReadReceiptFlagExtension on ComposerController {
void setupEmailRequestReadReceiptFlag(ComposerArguments arguments) {
if (currentEmailActionType == EmailActionType.reopenComposerBrowser) {
hasRequestReadReceipt.value = arguments.hasRequestReadReceipt ?? false;
} else if (currentEmailActionType != EmailActionType.editDraft) {
} else if (currentEmailActionType != EmailActionType.editDraft &&
currentEmailActionType != EmailActionType.editAsNewEmail) {
getServerSetting();
}
}
@@ -3,7 +3,7 @@ import 'package:tmail_ui_user/features/composer/presentation/composer_controller
extension SetupEmailRequestReadReceiptFlagExtension on ComposerController {
void setupEmailRequestReadReceiptFlagForEditDraft(bool isRequestReadReceipt) {
void setupEmailRequestReadReceiptFlag(bool isRequestReadReceipt) {
hasRequestReadReceipt.value = isRequestReadReceipt;
}
}
@@ -0,0 +1,13 @@
import 'package:model/email/email_action_type.dart';
import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
extension SetupEmailTemplateIdExtension on ComposerController {
void setupEmailTemplateId(ComposerArguments arguments) {
if (currentEmailActionType == EmailActionType.editAsNewEmail ||
currentEmailActionType == EmailActionType.reopenComposerBrowser
) {
currentTemplateEmailId = arguments.savedEmailTemplateId;
}
}
}