diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 9175ec894..d675e0d7d 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -74,6 +74,7 @@ import 'package:tmail_ui_user/features/composer/presentation/model/inline_image. import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/composer_style.dart'; +import 'package:tmail_ui_user/features/composer/presentation/view/editor_view_mixin.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/from_composer_bottom_sheet_builder.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/saving_message_dialog_view.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/sending_message_dialog_view.dart'; @@ -116,7 +117,7 @@ import 'package:tmail_ui_user/main/routes/route_navigation.dart'; import 'package:tmail_ui_user/main/universal_import/html_stub.dart' as html; class ComposerController extends BaseController - with DragDropFileMixin, AutoCompleteResultMixin + with DragDropFileMixin, AutoCompleteResultMixin, EditorViewMixin implements BeforeReconnectHandler { final mailboxDashBoardController = Get.find(); @@ -213,7 +214,6 @@ class ComposerController extends BaseController List initialAttachments = []; String? _textEditorWeb; - String? _initTextEditor; double? maxWithEditor; EmailId? _emailIdEditing; bool isAttachmentCollapsed = false; @@ -225,6 +225,7 @@ class ComposerController extends BaseController int? _savedEmailDraftHash; bool _restoringSignatureButton = false; GlobalKey? responsiveContainerKey; + Worker? emailContentViewStateWorker; @visibleForTesting bool get restoringSignatureButton => _restoringSignatureButton; @@ -286,7 +287,6 @@ class ComposerController extends BaseController @override void onClose() { - _initTextEditor = null; _textEditorWeb = null; dispatchState(Right(UIClosedState())); composerArguments.value = null; @@ -305,6 +305,8 @@ class ComposerController extends BaseController responsiveContainerKey = null; menuMoreOptionController?.dispose(); menuMoreOptionController = null; + emailContentViewStateWorker?.dispose(); + emailContentViewStateWorker = null; } else { richTextMobileTabletController = null; } @@ -441,6 +443,39 @@ class ComposerController extends BaseController } }); }); + + if (PlatformInfo.isWeb) { + emailContentViewStateWorker = ever(emailContentsViewState, (state) { + state?.fold((_) => null, (success) { + if (success is GetEmailContentSuccess) { + onChangeTextEditorWeb(success.htmlEmailContent); + } else if (success is TransformHtmlEmailContentSuccess) { + final arguments = composerArguments.value; + if (arguments == null || + currentContext == null || + arguments.presentationEmail == null) return; + + final emailActionType = arguments.emailActionType; + + if (emailActionType == EmailActionType.reply || + emailActionType == EmailActionType.replyAll || + emailActionType == EmailActionType.replyToList || + emailActionType == EmailActionType.forward) { + + final emailContentQuoted = getEmailContentQuotedAsHtml( + locale: Localizations.localeOf(currentContext!), + appLocalizations: AppLocalizations.of(currentContext!), + emailContent: success.htmlContent, + emailActionType: arguments.emailActionType, + presentationEmail: arguments.presentationEmail! + ); + + onChangeTextEditorWeb(emailContentQuoted); + } + } + }); + }); + } } void _triggerBrowserEventListener() { @@ -601,9 +636,6 @@ class ComposerController extends BaseController } void onCreatedMobileEditorAction(BuildContext context, HtmlEditorApi editorApi, String? content) { - if (identitySelected.value != null) { - initTextEditor(content); - } richTextMobileTabletController?.htmlEditorApi = editorApi; richTextMobileTabletController?.richTextController.onCreateHTMLEditor( editorApi, @@ -2105,11 +2137,7 @@ class ComposerController extends BaseController HtmlEditorApi? get htmlEditorApi => richTextMobileTabletController?.htmlEditorApi; void onChangeTextEditorWeb(String? text) { - if (identitySelected.value != null) { - initTextEditor(text); - } _textEditorWeb = text; - _initEmailDraftHashAfterSignatureButtonRestored(text); } @@ -2123,14 +2151,8 @@ class ComposerController extends BaseController _initEmailDraftHash(); } - void initTextEditor(String? text) { - _initTextEditor ??= text; - } - void setSubjectEmail(String subject) => subjectEmail.value = subject; - - void onAttachmentDropZoneListener(Attachment attachment) { log('ComposerController::onAttachmentDropZoneListener: attachment = $attachment'); uploadController.validateTotalSizeAttachmentsBeforeUpload(