TF-3715 Thread Detail create resuable actions
TF-3715 Thread Detail refactor actions for expanded email view TF-3715 Thread Detail apply actions for collapsed email view TF-3715 Thread Detail fix unit tests TF-3715 Thread Detail add await for _getEmailContent in composer TF-3715 Thread Detail remove unused emailLoaded in ThreadDetailAppBar TF-3715 Thread Detail hide print action when isMobile TF-3715 Thread Detail allow mark as read in EmailActionReactor TF-3715 Thread Detail fix loadMoreThreadDetailEmails unit test TF-3715 Thread Detail fix action small tap region TF-3715 Thread Detail fix cannot permanent delete email TF-3715 Thread Detail prevent close when move email TF-3715 Thread Detail fix refresh when mark star selected collapsed email TF-3715 Thread Detail update print action display logic TF-3715 Thread Detail fix duplicate mark star in app bar TF-3715 Thread Detail create new transformer for reply forward empty content email TF-3715 Thread Detail fix email not load after open multiple times TF-3715 Thread Detail fix close when move expanded email TF-3715 Thread Detail fix duplicate and missing actions TF-3715 Thread Detail restore editAsNewEmail action to _getEmailContent in setupEmailContent TF-3715 Thread Detail update print action name TF-3715 Thread Detail handle move and delete email with 1 item in thread detail TF-3715 Thread Detail fix tap outside to close context menu TF-3715 Thread Detail fix create rule and compose from recipient info TF-3715 Thread Detail handle move and delete email with 1 item in thread detail TF-3715 Thread Detail Fix cannot create email rule TF-3715 Thread Detail Fix crash composer TF-3715 Thread Detail Fix cannot unsubscribe TF-3715 Thread Detail Fix duplicate actions on single email TF-3715 Thread Detail Fix refresh view when reply/forward TF-3715 Thread Detail Revert old logic to _getEmailContent TF-3715 Thread Detail Update specific cases for UpdatedEmailKeywordsAction TF-3715 Thread Detail Fix concurrent modification during iteration TF-3715 Thread Detail Fix unsubscribe for all thread detail emails TF-3715 Thread Detail Remove unnecessary Future in reactor TF-3715 Thread Detail Remove dependency from SingleEmailController TF-3715 Thread Detail Apply individual list post and unsubscribe header TF-3715 Thread Detail Fix unsubscribe collapsed email TF-3715 Thread Detail Conditionally inject rule filter interactor
This commit is contained in:
@@ -196,7 +196,7 @@ extension EmailActionTypeExtension on EmailActionType {
|
||||
case EmailActionType.openInNewTab:
|
||||
return appLocalizations.openInNewTab;
|
||||
case EmailActionType.printAll:
|
||||
return appLocalizations.printAll;
|
||||
return appLocalizations.print;
|
||||
case EmailActionType.forward:
|
||||
return appLocalizations.forward;
|
||||
case EmailActionType.replyAll:
|
||||
|
||||
@@ -27,78 +27,13 @@ extension SetupEmailContentExtension on ComposerController {
|
||||
switch(currentEmailActionType) {
|
||||
case EmailActionType.editAsNewEmail:
|
||||
case EmailActionType.editDraft:
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final emailId = arguments.presentationEmail?.id;
|
||||
|
||||
if (session == null) {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(NotFoundSessionException()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (accountId == null) {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(NotFoundAccountIdException()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (emailId == null) {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(NotFoundEmailException()));
|
||||
return;
|
||||
}
|
||||
|
||||
final resultState = await getEmailContentInteractor.execute(
|
||||
session,
|
||||
accountId,
|
||||
emailId,
|
||||
mailboxDashBoardController.baseDownloadUrl,
|
||||
TransformConfiguration.forEditDraftsEmail(),
|
||||
await _getEmailContent(
|
||||
arguments,
|
||||
transformConfiguration: TransformConfiguration.forEditDraftsEmail(),
|
||||
additionalProperties: Properties({
|
||||
IndividualHeaderIdentifier.identityHeader.value,
|
||||
}),
|
||||
).last;
|
||||
|
||||
final uiState = resultState.fold((failure) => failure, (success) => success);
|
||||
|
||||
if (uiState is GetEmailContentSuccess) {
|
||||
initAttachmentsAndInlineImages(
|
||||
attachments: uiState.attachments,
|
||||
inlineImages: uiState.inlineImages,
|
||||
);
|
||||
|
||||
if (currentEmailActionType == EmailActionType.editDraft ||
|
||||
currentEmailActionType == EmailActionType.editAsNewEmail) {
|
||||
setupEmailRequestReadReceiptFlag(
|
||||
uiState.emailCurrent!.hasRequestReadReceipt,
|
||||
);
|
||||
setupSelectedIdentityForEditDraft(
|
||||
uiState.emailCurrent!.identityIdFromHeader,
|
||||
);
|
||||
}
|
||||
|
||||
emailContentsViewState.value = Right(uiState);
|
||||
} else if (uiState is GetEmailContentFromCacheSuccess) {
|
||||
initAttachmentsAndInlineImages(
|
||||
attachments: uiState.attachments,
|
||||
inlineImages: uiState.inlineImages,
|
||||
);
|
||||
|
||||
if (currentEmailActionType == EmailActionType.editDraft ||
|
||||
currentEmailActionType == EmailActionType.editAsNewEmail) {
|
||||
setupEmailRequestReadReceiptFlag(
|
||||
uiState.emailCurrent.hasRequestReadReceipt,
|
||||
);
|
||||
setupSelectedIdentityForEditDraft(
|
||||
uiState.emailCurrent.identityIdFromHeader,
|
||||
);
|
||||
}
|
||||
|
||||
emailContentsViewState.value = Right(uiState);
|
||||
} else if (uiState is GetEmailContentFailure) {
|
||||
emailContentsViewState.value = Left(uiState);
|
||||
consumeState(Stream.value(Left(uiState)));
|
||||
} else {
|
||||
emailContentsViewState.value = Right(LoadEmailContentCompleted());
|
||||
}
|
||||
);
|
||||
break;
|
||||
case EmailActionType.editSendingEmail:
|
||||
final sendingEmail = arguments.sendingEmail;
|
||||
@@ -130,7 +65,10 @@ extension SetupEmailContentExtension on ComposerController {
|
||||
case EmailActionType.replyAll:
|
||||
case EmailActionType.forward:
|
||||
if (arguments.emailContents?.trim().isNotEmpty != true) {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(EmptyEmailContentException()));
|
||||
await _getEmailContent(
|
||||
arguments,
|
||||
transformConfiguration: TransformConfiguration.forReplyForwardEmptyEmail(),
|
||||
);
|
||||
} else {
|
||||
final resultState = await transformHtmlEmailContentInteractor.execute(
|
||||
arguments.emailContents ?? '',
|
||||
@@ -224,4 +162,81 @@ extension SetupEmailContentExtension on ComposerController {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _getEmailContent(
|
||||
ComposerArguments arguments, {
|
||||
required TransformConfiguration transformConfiguration,
|
||||
Properties? additionalProperties,
|
||||
}) async {
|
||||
final session = mailboxDashBoardController.sessionCurrent;
|
||||
final accountId = mailboxDashBoardController.accountId.value;
|
||||
final emailId = arguments.presentationEmail?.id;
|
||||
|
||||
if (session == null) {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(NotFoundSessionException()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (accountId == null) {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(NotFoundAccountIdException()));
|
||||
return;
|
||||
}
|
||||
|
||||
if (emailId == null) {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(NotFoundEmailException()));
|
||||
return;
|
||||
}
|
||||
|
||||
final resultState = await getEmailContentInteractor.execute(
|
||||
session,
|
||||
accountId,
|
||||
emailId,
|
||||
mailboxDashBoardController.baseDownloadUrl,
|
||||
transformConfiguration,
|
||||
additionalProperties: additionalProperties,
|
||||
).last;
|
||||
|
||||
final uiState = resultState.fold((failure) => failure, (success) => success);
|
||||
|
||||
if (uiState is GetEmailContentSuccess) {
|
||||
initAttachmentsAndInlineImages(
|
||||
attachments: uiState.attachments,
|
||||
inlineImages: uiState.inlineImages,
|
||||
);
|
||||
|
||||
if (currentEmailActionType == EmailActionType.editDraft ||
|
||||
currentEmailActionType == EmailActionType.editAsNewEmail) {
|
||||
setupEmailRequestReadReceiptFlag(
|
||||
uiState.emailCurrent!.hasRequestReadReceipt,
|
||||
);
|
||||
setupSelectedIdentityForEditDraft(
|
||||
uiState.emailCurrent!.identityIdFromHeader,
|
||||
);
|
||||
}
|
||||
|
||||
emailContentsViewState.value = Right(uiState);
|
||||
} else if (uiState is GetEmailContentFromCacheSuccess) {
|
||||
initAttachmentsAndInlineImages(
|
||||
attachments: uiState.attachments,
|
||||
inlineImages: uiState.inlineImages,
|
||||
);
|
||||
|
||||
if (currentEmailActionType == EmailActionType.editDraft
|
||||
|| currentEmailActionType == EmailActionType.editAsNewEmail) {
|
||||
setupEmailRequestReadReceiptFlag(
|
||||
uiState.emailCurrent.hasRequestReadReceipt,
|
||||
);
|
||||
setupSelectedIdentityForEditDraft(
|
||||
uiState.emailCurrent.identityIdFromHeader,
|
||||
);
|
||||
}
|
||||
|
||||
emailContentsViewState.value = Right(uiState);
|
||||
} else if (uiState is GetEmailContentFailure) {
|
||||
emailContentsViewState.value = Left(uiState);
|
||||
consumeState(Stream.value(Left(uiState)));
|
||||
} else {
|
||||
emailContentsViewState.value = Right(LoadEmailContentCompleted());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user