TF-3480 Fix reload multiple times, if composer is in minimize or hide, content maybe lost

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-03-17 10:56:44 +07:00
committed by Dat H. Pham
parent 826149dbdb
commit f0fb43aa2a
@@ -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<MailboxDashBoardController>();
@@ -213,7 +214,6 @@ class ComposerController extends BaseController
List<Attachment> initialAttachments = <Attachment>[];
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(