From 7faa9c791cd372c8386c77e597a240500b121ead Mon Sep 17 00:00:00 2001 From: DatDang Date: Fri, 6 Sep 2024 15:10:03 +0700 Subject: [PATCH] TF-3035 Show and hide signature toggle button on draft --- .../data/repository/composer_repository_impl.dart | 4 +--- .../composer/presentation/composer_controller.dart | 13 +++++++++++++ .../composer/presentation/composer_view_web.dart | 3 +++ .../presentation/view/web/web_editor_view.dart | 8 ++++++++ .../presentation/widgets/web/web_editor_widget.dart | 4 ++++ pubspec.lock | 2 +- 6 files changed, 30 insertions(+), 4 deletions(-) diff --git a/lib/features/composer/data/repository/composer_repository_impl.dart b/lib/features/composer/data/repository/composer_repository_impl.dart index f435699ba..ec1386230 100644 --- a/lib/features/composer/data/repository/composer_repository_impl.dart +++ b/lib/features/composer/data/repository/composer_repository_impl.dart @@ -61,9 +61,7 @@ class ComposerRepositoryImpl extends ComposerRepository { emailAttachments.addAll(tupleContentInlineAttachments.value2); } - if (createEmailRequest.draftsMailboxId == null) { - emailContent = await _removeCollapsedExpandedSignatureEffect(emailContent: emailContent); - } + emailContent = await _removeCollapsedExpandedSignatureEffect(emailContent: emailContent); final userAgent = await _applicationManager.generateApplicationUserAgent(); final emailBodyPartId = PartId(_uuid.v1()); diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index c55a1107a..0deb2125e 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -15,6 +15,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:html/parser.dart'; import 'package:html_editor_enhanced/html_editor.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; @@ -1437,6 +1438,18 @@ class ComposerController extends BaseController with DragDropFileMixin implement identitySelected.value = selectedIdentityFromHeader; } + Future restoreCollapsibleButton(String? emailContent) async { + try { + if (emailContent == null) return; + final emailDocument = parse(emailContent); + final signature = emailDocument.querySelector('div.tmail-signature'); + if (signature == null) return; + await _applySignature(signature.innerHtml); + } catch (e) { + logError('ComposerController::_restoreCollapsibleButton: $e'); + } + } + void _transformHtmlEmailContent(String? emailContent) { emailContentsViewState(Right(TransformHtmlEmailContentLoading())); if (emailContent?.isEmpty == true) { diff --git a/lib/features/composer/presentation/composer_view_web.dart b/lib/features/composer/presentation/composer_view_web.dart index 90c32d58d..6621e9f5f 100644 --- a/lib/features/composer/presentation/composer_view_web.dart +++ b/lib/features/composer/presentation/composer_view_web.dart @@ -202,6 +202,7 @@ class ComposerView extends GetWidget { base64: base64, uploadError: uploadError ), + onInitialContentLoadComplete: controller.restoreCollapsibleButton, )), ), ), @@ -454,6 +455,7 @@ class ComposerView extends GetWidget { base64: base64, uploadError: uploadError ), + onInitialContentLoadComplete: controller.restoreCollapsibleButton, ); }), ), @@ -724,6 +726,7 @@ class ComposerView extends GetWidget { base64: base64, uploadError: uploadError ), + onInitialContentLoadComplete: controller.restoreCollapsibleButton, )), ), ), diff --git a/lib/features/composer/presentation/view/web/web_editor_view.dart b/lib/features/composer/presentation/view/web/web_editor_view.dart index 2f87bc08a..f04efac66 100644 --- a/lib/features/composer/presentation/view/web/web_editor_view.dart +++ b/lib/features/composer/presentation/view/web/web_editor_view.dart @@ -33,6 +33,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { final OnDragEnterListener? onDragEnter; final OnPasteImageSuccessAction? onPasteImageSuccessAction; final OnPasteImageFailureAction? onPasteImageFailureAction; + final OnInitialContentLoadComplete? onInitialContentLoadComplete; const WebEditorView({ super.key, @@ -52,6 +53,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { this.onDragEnter, this.onPasteImageSuccessAction, this.onPasteImageFailureAction, + this.onInitialContentLoadComplete, }); @override @@ -80,6 +82,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { onDragEnter: onDragEnter, onPasteImageSuccessAction: onPasteImageSuccessAction, onPasteImageFailureAction: onPasteImageFailureAction, + onInitialContentLoadComplete: onInitialContentLoadComplete, ); case EmailActionType.editDraft: case EmailActionType.editSendingEmail: @@ -107,6 +110,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { onDragEnter: onDragEnter, onPasteImageSuccessAction: onPasteImageSuccessAction, onPasteImageFailureAction: onPasteImageFailureAction, + onInitialContentLoadComplete: onInitialContentLoadComplete, ), (success) { if (success is GetEmailContentLoading || success is RestoringEmailInlineImages) { @@ -134,6 +138,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { onDragEnter: onDragEnter, onPasteImageSuccessAction: onPasteImageSuccessAction, onPasteImageFailureAction: onPasteImageFailureAction, + onInitialContentLoadComplete: onInitialContentLoadComplete, ); } } @@ -168,6 +173,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { onDragEnter: onDragEnter, onPasteImageSuccessAction: onPasteImageSuccessAction, onPasteImageFailureAction: onPasteImageFailureAction, + onInitialContentLoadComplete: onInitialContentLoadComplete, ); }, (success) { @@ -198,6 +204,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { onDragEnter: onDragEnter, onPasteImageSuccessAction: onPasteImageSuccessAction, onPasteImageFailureAction: onPasteImageFailureAction, + onInitialContentLoadComplete: onInitialContentLoadComplete, ); } } @@ -219,6 +226,7 @@ class WebEditorView extends StatelessWidget with EditorViewMixin { onDragEnter: onDragEnter, onPasteImageSuccessAction: onPasteImageSuccessAction, onPasteImageFailureAction: onPasteImageFailureAction, + onInitialContentLoadComplete: onInitialContentLoadComplete, ); } } diff --git a/lib/features/composer/presentation/widgets/web/web_editor_widget.dart b/lib/features/composer/presentation/widgets/web/web_editor_widget.dart index 77a3c57af..83dc646f5 100644 --- a/lib/features/composer/presentation/widgets/web/web_editor_widget.dart +++ b/lib/features/composer/presentation/widgets/web/web_editor_widget.dart @@ -18,6 +18,7 @@ typedef OnPasteImageFailureAction = Function( List? listFileUpload, String? base64, UploadError uploadError); +typedef OnInitialContentLoadComplete = Function(String text); class WebEditorWidget extends StatefulWidget { @@ -36,6 +37,7 @@ class WebEditorWidget extends StatefulWidget { final OnDragEnterListener? onDragEnter; final OnPasteImageSuccessAction? onPasteImageSuccessAction; final OnPasteImageFailureAction? onPasteImageFailureAction; + final OnInitialContentLoadComplete? onInitialContentLoadComplete; const WebEditorWidget({ super.key, @@ -54,6 +56,7 @@ class WebEditorWidget extends StatefulWidget { this.onDragEnter, this.onPasteImageSuccessAction, this.onPasteImageFailureAction, + this.onInitialContentLoadComplete, }); @override @@ -190,6 +193,7 @@ class _WebEditorState extends State { onDragLeave: (_) {}, onImageUpload: widget.onPasteImageSuccessAction, onImageUploadError: widget.onPasteImageFailureAction, + onInitialTextLoadComplete: widget.onInitialContentLoadComplete, ), ); } diff --git a/pubspec.lock b/pubspec.lock index 81129691a..ae36b3aeb 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1107,7 +1107,7 @@ packages: description: path: "." ref: main - resolved-ref: cc63bc2e8ddf9fad93b4f1dd6e0a04d17937ba05 + resolved-ref: "3274d7fe8c711e7466890b6a3948e9708877ca4a" url: "https://github.com/linagora/html-editor-enhanced.git" source: git version: "3.1.1"