TF-3685 Add integration test for case change identity in draft email
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -114,7 +114,7 @@ class ComposerView extends GetWidget<ComposerController> {
|
||||
children: [
|
||||
Obx(() {
|
||||
if (controller.fromRecipientState.value == PrefixRecipientState.enabled) {
|
||||
return FromComposerMobileWidget(
|
||||
return FromComposerMobileWidget(
|
||||
selectedIdentity: controller.identitySelected.value,
|
||||
imagePaths: controller.imagePaths,
|
||||
responsiveUtils: controller.responsiveUtils,
|
||||
@@ -551,6 +551,7 @@ class ComposerView extends GetWidget<ComposerController> {
|
||||
PopupMenuItem(
|
||||
padding: EdgeInsets.zero,
|
||||
child: PopupItemWidget(
|
||||
key: const Key('save_as_draft_popup_item'),
|
||||
iconAction: controller.imagePaths.icSaveToDraft,
|
||||
nameAction: AppLocalizations.of(context).saveAsDraft,
|
||||
colorIcon: ComposerStyle.popupItemIconColor,
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
import 'package:core/presentation/utils/html_transformer/transform_configuration.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
@@ -96,7 +95,7 @@ extension SetupEmailContentExtension on ComposerController {
|
||||
emailContentsViewState.value = Left(uiState);
|
||||
consumeState(Stream.value(Left(uiState)));
|
||||
} else {
|
||||
emailContentsViewState.value = Right(UIState.idle);
|
||||
emailContentsViewState.value = Right(LoadEmailContentCompleted());
|
||||
}
|
||||
break;
|
||||
case EmailActionType.editSendingEmail:
|
||||
@@ -161,7 +160,7 @@ extension SetupEmailContentExtension on ComposerController {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(uiState.exception));
|
||||
consumeState(Stream.value(Left(GetEmailContentFailure(uiState.exception))));
|
||||
} else {
|
||||
emailContentsViewState.value = Right(UIState.idle);
|
||||
emailContentsViewState.value = Right(LoadEmailContentCompleted());
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -207,7 +206,7 @@ extension SetupEmailContentExtension on ComposerController {
|
||||
emailContentsViewState.value = Left(GetEmailContentFailure(uiState.exception));
|
||||
consumeState(Stream.value(Left(GetEmailContentFailure(uiState.exception))));
|
||||
} else {
|
||||
emailContentsViewState.value = Right(UIState.idle);
|
||||
emailContentsViewState.value = Right(LoadEmailContentCompleted());
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -219,7 +218,7 @@ extension SetupEmailContentExtension on ComposerController {
|
||||
emailContentsViewState.value = Right(successState);
|
||||
break;
|
||||
default:
|
||||
emailContentsViewState.value = Right(UIState.idle);
|
||||
emailContentsViewState.value = Right(LoadEmailContentCompleted());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,117 +31,122 @@ class MobileEditorView extends StatelessWidget with EditorViewMixin {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (arguments == null) {
|
||||
if (arguments == null || contentViewState == null) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
switch (arguments!.emailActionType) {
|
||||
case EmailActionType.compose:
|
||||
case EmailActionType.composeFromEmailAddress:
|
||||
case EmailActionType.composeFromFileShared:
|
||||
return MobileEditorWidget(
|
||||
content: HtmlExtension.editorStartTags,
|
||||
direction: AppUtils.getCurrentDirection(context),
|
||||
onCreatedEditorAction: onCreatedEditorAction,
|
||||
onLoadCompletedEditorAction: onLoadCompletedEditorAction,
|
||||
onEditorContentHeightChanged: onEditorContentHeightChanged,
|
||||
);
|
||||
case EmailActionType.editDraft:
|
||||
case EmailActionType.editSendingEmail:
|
||||
case EmailActionType.composeFromContentShared:
|
||||
case EmailActionType.reopenComposerBrowser:
|
||||
case EmailActionType.composeFromMailtoUri:
|
||||
case EmailActionType.composeFromUnsubscribeMailtoLink:
|
||||
case EmailActionType.editAsNewEmail:
|
||||
if (contentViewState == null) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return contentViewState!.fold(
|
||||
(failure) => MobileEditorWidget(
|
||||
content: HtmlExtension.editorStartTags,
|
||||
direction: AppUtils.getCurrentDirection(context),
|
||||
onCreatedEditorAction: onCreatedEditorAction,
|
||||
onLoadCompletedEditorAction: onLoadCompletedEditorAction,
|
||||
onEditorContentHeightChanged: onEditorContentHeightChanged,
|
||||
),
|
||||
(success) {
|
||||
if (success is GetEmailContentLoading) {
|
||||
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
|
||||
} else {
|
||||
var newContent = HtmlExtension.editorStartTags;
|
||||
if (success is GetEmailContentSuccess) {
|
||||
newContent = success.htmlEmailContent;
|
||||
} else if (success is GetEmailContentFromCacheSuccess) {
|
||||
newContent = success.htmlEmailContent;
|
||||
}
|
||||
if (newContent.isEmpty) {
|
||||
newContent = HtmlExtension.editorStartTags;
|
||||
}
|
||||
return MobileEditorWidget(
|
||||
content: newContent,
|
||||
direction: AppUtils.getCurrentDirection(context),
|
||||
onCreatedEditorAction: onCreatedEditorAction,
|
||||
onLoadCompletedEditorAction: onLoadCompletedEditorAction,
|
||||
onEditorContentHeightChanged: onEditorContentHeightChanged,
|
||||
);
|
||||
}
|
||||
final direction = AppUtils.getCurrentDirection(context);
|
||||
final locale = Localizations.localeOf(context);
|
||||
final appLocalizations = AppLocalizations.of(context);
|
||||
final actionType = arguments!.emailActionType;
|
||||
|
||||
if (_isEditOrComposeAction(actionType)) {
|
||||
return contentViewState!.fold(
|
||||
(_) => buildEditor(direction: direction),
|
||||
(success) {
|
||||
if (success is GetEmailContentLoading) {
|
||||
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
|
||||
}
|
||||
);
|
||||
case EmailActionType.reply:
|
||||
case EmailActionType.replyToList:
|
||||
case EmailActionType.replyAll:
|
||||
case EmailActionType.forward:
|
||||
if (contentViewState == null) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
return contentViewState!.fold(
|
||||
(failure) {
|
||||
final emailContentQuoted = getEmailContentQuotedAsHtml(
|
||||
locale: Localizations.localeOf(context),
|
||||
appLocalizations: AppLocalizations.of(context),
|
||||
emailContent: '',
|
||||
emailActionType: arguments!.emailActionType,
|
||||
presentationEmail: arguments!.presentationEmail!
|
||||
);
|
||||
return MobileEditorWidget(
|
||||
content: emailContentQuoted,
|
||||
direction: AppUtils.getCurrentDirection(context),
|
||||
onCreatedEditorAction: onCreatedEditorAction,
|
||||
onLoadCompletedEditorAction: onLoadCompletedEditorAction,
|
||||
onEditorContentHeightChanged: onEditorContentHeightChanged,
|
||||
);
|
||||
},
|
||||
(success) {
|
||||
if (success is GetEmailContentLoading) {
|
||||
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
|
||||
} else {
|
||||
final emailContentQuoted = getEmailContentQuotedAsHtml(
|
||||
locale: Localizations.localeOf(context),
|
||||
appLocalizations: AppLocalizations.of(context),
|
||||
emailContent: success is GetEmailContentSuccess
|
||||
? success.htmlEmailContent
|
||||
: '',
|
||||
emailActionType: arguments!.emailActionType,
|
||||
presentationEmail: arguments!.presentationEmail!
|
||||
);
|
||||
return MobileEditorWidget(
|
||||
content: emailContentQuoted,
|
||||
direction: AppUtils.getCurrentDirection(context),
|
||||
onCreatedEditorAction: onCreatedEditorAction,
|
||||
onLoadCompletedEditorAction: onLoadCompletedEditorAction,
|
||||
onEditorContentHeightChanged: onEditorContentHeightChanged,
|
||||
);
|
||||
}
|
||||
|
||||
String newContent = '';
|
||||
if (success is GetEmailContentSuccess) {
|
||||
newContent = success.htmlEmailContent;
|
||||
} else if (success is GetEmailContentFromCacheSuccess) {
|
||||
newContent = success.htmlEmailContent;
|
||||
}
|
||||
);
|
||||
default:
|
||||
return MobileEditorWidget(
|
||||
content: HtmlExtension.editorStartTags,
|
||||
direction: AppUtils.getCurrentDirection(context),
|
||||
onCreatedEditorAction: onCreatedEditorAction,
|
||||
onLoadCompletedEditorAction: onLoadCompletedEditorAction,
|
||||
onEditorContentHeightChanged: onEditorContentHeightChanged,
|
||||
);
|
||||
|
||||
return buildEditor(
|
||||
direction: direction,
|
||||
content: newContent,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
if (_isReplyOrForwardAction(actionType)) {
|
||||
return contentViewState!.fold(
|
||||
(_) => buildEditor(
|
||||
direction: direction,
|
||||
content: _buildQuotedContent(
|
||||
appLocalizations: appLocalizations,
|
||||
locale: locale,
|
||||
),
|
||||
),
|
||||
(success) {
|
||||
if (success is GetEmailContentLoading) {
|
||||
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
|
||||
}
|
||||
|
||||
return buildEditor(
|
||||
direction: direction,
|
||||
content: _buildQuotedContent(
|
||||
appLocalizations: appLocalizations,
|
||||
locale: locale,
|
||||
emailContent: success is GetEmailContentSuccess
|
||||
? success.htmlEmailContent
|
||||
: '',
|
||||
),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
return contentViewState!.fold(
|
||||
(_) => buildEditor(direction: direction),
|
||||
(success) {
|
||||
if (success is GetEmailContentLoading) {
|
||||
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
|
||||
}
|
||||
return buildEditor(direction: direction);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
bool _isEditOrComposeAction(EmailActionType type) {
|
||||
return {
|
||||
EmailActionType.editDraft,
|
||||
EmailActionType.editSendingEmail,
|
||||
EmailActionType.composeFromContentShared,
|
||||
EmailActionType.reopenComposerBrowser,
|
||||
EmailActionType.composeFromMailtoUri,
|
||||
EmailActionType.composeFromUnsubscribeMailtoLink,
|
||||
EmailActionType.editAsNewEmail,
|
||||
}.contains(type);
|
||||
}
|
||||
|
||||
bool _isReplyOrForwardAction(EmailActionType type) {
|
||||
return {
|
||||
EmailActionType.reply,
|
||||
EmailActionType.replyToList,
|
||||
EmailActionType.replyAll,
|
||||
EmailActionType.forward,
|
||||
}.contains(type);
|
||||
}
|
||||
|
||||
String _buildQuotedContent({
|
||||
required AppLocalizations appLocalizations,
|
||||
required Locale locale,
|
||||
String emailContent = '',
|
||||
}) {
|
||||
return getEmailContentQuotedAsHtml(
|
||||
locale: locale,
|
||||
appLocalizations: appLocalizations,
|
||||
emailContent: emailContent,
|
||||
emailActionType: arguments!.emailActionType,
|
||||
presentationEmail: arguments!.presentationEmail!,
|
||||
);
|
||||
}
|
||||
|
||||
Widget buildEditor({
|
||||
required TextDirection direction,
|
||||
String content = '',
|
||||
}) {
|
||||
return MobileEditorWidget(
|
||||
content: content.isEmpty ? HtmlExtension.editorStartTags : content,
|
||||
direction: direction,
|
||||
onCreatedEditorAction: onCreatedEditorAction,
|
||||
onLoadCompletedEditorAction: onLoadCompletedEditorAction,
|
||||
onEditorContentHeightChanged: onEditorContentHeightChanged,
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -49,6 +49,8 @@ class GetEmailContentFromCacheSuccess extends UIState {
|
||||
];
|
||||
}
|
||||
|
||||
class LoadEmailContentCompleted extends UIState {}
|
||||
|
||||
class GetEmailContentFailure extends FeatureFailure {
|
||||
|
||||
GetEmailContentFailure(dynamic exception, {super.onRetry})
|
||||
|
||||
Reference in New Issue
Block a user