TF-1865: Update UI and replace task in workmanager when update sending email

(cherry picked from commit 15168421c994c5f928873e0794bcbf0c36b015c9)
This commit is contained in:
HuyNguyen
2023-06-06 01:30:43 +07:00
committed by Dat Vu
parent 9ca0c7385a
commit ee6bf907ff
13 changed files with 206 additions and 170 deletions
@@ -33,6 +33,7 @@ import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:rich_text_composer/rich_text_composer.dart';
import 'package:super_tag_editor/tag_editor.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/composer/domain/extensions/sending_email_extension.dart';
import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/composer/domain/state/download_image_as_base64_state.dart';
@@ -235,9 +236,7 @@ class ComposerController extends BaseController {
@override
void onReady() async {
_initEmail();
if (isNetworkConnectionAvailable) {
_getAllIdentities();
}
_getAllIdentities();
if (!BuildUtils.isWeb) {
Future.delayed(const Duration(milliseconds: 500), () =>
_checkContactPermission());
@@ -616,7 +615,8 @@ class ComposerController extends BaseController {
{
bool asDrafts = false,
MailboxId? draftMailboxId,
MailboxId? outboxMailboxId
MailboxId? outboxMailboxId,
ComposerArguments? arguments
}
) async {
Set<EmailAddress> listFromEmailAddress = {EmailAddress(null, userProfile.email)};
@@ -663,7 +663,10 @@ class ComposerController extends BaseController {
final generatePartId = PartId(_uuid.v1());
final isUpdateSendingEmail = arguments?.sendingEmail != null;
return Email(
id: isUpdateSendingEmail ? EmailId(Id(arguments!.sendingEmail!.sendingId)) : null,
mailboxIds: mailboxIds.isNotEmpty ? mailboxIds : null,
from: listFromEmailAddress,
to: listToEmailAddress.toSet(),
@@ -801,17 +804,19 @@ class ComposerController extends BaseController {
final userProfile = mailboxDashBoardController.userProfile.value;
if (arguments != null && accountId != null && userProfile != null && session != null) {
final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId);
final emailRequest = EmailRequest(
email: email,
sentMailboxId: sentMailboxId,
identityId: identitySelected.value?.id,
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
? arguments.presentationEmail?.id
: null,
emailIdAnsweredOrForwarded: arguments.presentationEmail?.id,
emailActionType: arguments.emailActionType
);
final email = await _generateEmail(context, userProfile, outboxMailboxId: outboxMailboxId, arguments: arguments);
final emailRequest = arguments.sendingEmail != null
? arguments.sendingEmail!.toEmailRequest(emailEdit: email)
: EmailRequest(
email: email,
sentMailboxId: sentMailboxId,
identityId: identitySelected.value?.id,
emailIdDestroyed: arguments.emailActionType == EmailActionType.edit
? arguments.presentationEmail?.id
: null,
emailIdAnsweredOrForwarded: arguments.presentationEmail?.id,
emailActionType: arguments.emailActionType
);
final mailboxRequest = outboxMailboxId == null
? CreateNewMailboxRequest(Id(_uuid.v1()), PresentationMailbox.outboxMailboxName)
: null;
@@ -820,7 +825,8 @@ class ComposerController extends BaseController {
session,
accountId,
emailRequest,
mailboxRequest
mailboxRequest,
isUpdateSendingEmail: arguments.sendingEmail != null,
);
uploadController.clearInlineFileUploaded();
@@ -1127,7 +1133,7 @@ class ComposerController extends BaseController {
}
}
if (arguments.emailContents != null && arguments.emailContents!.isNotEmpty) {
if (arguments.emailContents != null && arguments.emailContents!.isNotEmpty && arguments.sendingEmail != null) {
_emailContents = arguments.emailContents;
emailContentsViewState.value = Right(GetEmailContentSuccess(_emailContents!, [], [], arguments.presentationEmail?.toEmail()));
} else {
@@ -9,9 +9,18 @@ class SendingEmailArguments extends RouterArguments {
final AccountId accountId;
final EmailRequest emailRequest;
final CreateNewMailboxRequest? mailboxRequest;
final bool? isUpdateSendingEmail;
SendingEmailArguments(this.session, this.accountId, this.emailRequest, this.mailboxRequest);
SendingEmailArguments(
this.session,
this.accountId,
this.emailRequest,
this.mailboxRequest,
{
this.isUpdateSendingEmail
}
);
@override
List<Object?> get props => [session, accountId, emailRequest, mailboxRequest];
List<Object?> get props => [session, accountId, emailRequest, mailboxRequest, isUpdateSendingEmail];
}