diff --git a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
index a66e1265c..bcb8bde70 100644
--- a/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
+++ b/core/lib/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart
@@ -120,16 +120,16 @@ class _HtmlContentViewerOnWebState extends State {
let textContent = e.target.textContent;
console.log("handleOnClickLink: " + link);
console.log("handleOnClickLink: " + textContent);
- if (link && isValidUrl(link)) {
+ if (link && isValidMailtoLink(link)) {
window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + link}), "*");
e.preventDefault();
- } else if (textContent && isValidUrl(textContent)) {
+ } else if (textContent && isValidMailtoLink(textContent)) {
window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + textContent}), "*");
e.preventDefault();
}
}
- function isValidUrl(string) {
+ function isValidMailtoLink(string) {
let url;
try {
@@ -138,7 +138,7 @@ class _HtmlContentViewerOnWebState extends State {
return false;
}
- return url.protocol === "http:" || url.protocol === "https:" || url.protocol === "mailto:";
+ return url.protocol === "mailto:";
}
''';
@@ -232,8 +232,6 @@ class _HtmlContentViewerOnWebState extends State {
final urlString = link as String;
if (urlString.startsWith('mailto:')) {
widget.mailtoDelegate?.call(Uri.parse(urlString));
- } else {
- html.window.open(urlString, '_blank');
}
}
}
diff --git a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart
index 3b7a1ae73..57b2c1662 100644
--- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart
+++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart
@@ -20,12 +20,15 @@ import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_id
import 'package:tmail_ui_user/features/manage_account/domain/state/delete_identity_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/edit_identity_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_identities_state.dart';
+import 'package:tmail_ui_user/features/manage_account/domain/state/transform_html_signature_state.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_default_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_default_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
+import 'package:tmail_ui_user/features/manage_account/domain/usecases/transform_html_signature_interactor.dart';
+import 'package:tmail_ui_user/features/manage_account/presentation/extensions/identity_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.dart';
@@ -46,8 +49,10 @@ class IdentitiesController extends BaseController {
final DeleteIdentityInteractor _deleteIdentityInteractor;
final EditIdentityInteractor _editIdentityInteractor;
final EditDefaultIdentityInteractor _editDefaultIdentityInteractor;
+ final TransformHtmlSignatureInteractor _transformHtmlSignatureInteractor;
final identitySelected = Rxn();
+ final signatureSelected = Rxn();
final listAllIdentities = [].obs;
IdentitiesController(
@@ -56,7 +61,8 @@ class IdentitiesController extends BaseController {
this._createNewIdentityInteractor,
this._editIdentityInteractor,
this._createNewDefaultIdentityInteractor,
- this._editDefaultIdentityInteractor
+ this._editDefaultIdentityInteractor,
+ this._transformHtmlSignatureInteractor
);
@override
@@ -84,6 +90,8 @@ class IdentitiesController extends BaseController {
_deleteIdentitySuccess(success);
} else if (success is EditIdentitySuccess) {
_editIdentitySuccess(success);
+ } else if (success is TransformHtmlSignatureSuccess) {
+ signatureSelected.value = success.signature;
}
}
);
@@ -127,7 +135,12 @@ class IdentitiesController extends BaseController {
}
void selectIdentity(Identity? newIdentity) {
+ signatureSelected.value = null;
identitySelected.value = newIdentity;
+
+ if (newIdentity != null) {
+ consumeState(_transformHtmlSignatureInteractor.execute(newIdentity.signatureAsString));
+ }
}
void goToCreateNewIdentity(BuildContext context) async {
diff --git a/lib/features/manage_account/presentation/profiles/identities/identity_bindings.dart b/lib/features/manage_account/presentation/profiles/identities/identity_bindings.dart
index dde20f9c5..cf1f63c4c 100644
--- a/lib/features/manage_account/presentation/profiles/identities/identity_bindings.dart
+++ b/lib/features/manage_account/presentation/profiles/identities/identity_bindings.dart
@@ -5,6 +5,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_ide
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_default_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
+import 'package:tmail_ui_user/features/manage_account/domain/usecases/transform_html_signature_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart';
@@ -20,7 +21,8 @@ class IdentityBindings extends Bindings {
Get.find(),
Get.find(),
Get.find(),
- Get.find()
+ Get.find(),
+ Get.find()
));
}
}
\ No newline at end of file
diff --git a/lib/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart b/lib/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart
index 36586c760..d8a165822 100644
--- a/lib/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart
+++ b/lib/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.dart
@@ -11,6 +11,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/usecases/delete_ide
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_default_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_identity_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_identities_interactor.dart';
+import 'package:tmail_ui_user/features/manage_account/domain/usecases/transform_html_signature_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/utils/identity_utils.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
@@ -52,6 +53,7 @@ class IdentityInteractorsBindings extends InteractorsBindings {
Get.lazyPut(() => EditDefaultIdentityInteractor(
Get.find(),
Get.find()));
+ Get.lazyPut(() => TransformHtmlSignatureInteractor(Get.find()));
}
@override
diff --git a/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart b/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart
index 68466e51d..a1557c800 100644
--- a/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart
+++ b/lib/features/manage_account/presentation/profiles/identities/widgets/identities_radio_list_builder.dart
@@ -2,8 +2,10 @@ import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:fading_edge_scrollview/fading_edge_scrollview.dart';
+import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get_state_manager/get_state_manager.dart';
+import 'package:tmail_ui_user/features/manage_account/domain/state/transform_html_signature_state.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identities_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/identity_list_tile_builder.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart';
@@ -46,7 +48,13 @@ class IdentitiesRadioListBuilder extends StatelessWidget {
...[
_buildListIdentityView(context),
Container(height: 1, color: AppColor.attachmentFileBorderColor),
- Obx(() => SignatureBuilder(identity: controller.identitySelected.value!))
+ Obx(() {
+ if (controller.signatureSelected.value != null) {
+ return SignatureBuilder(controller.signatureSelected.value!);
+ } else {
+ return _buildLoadingView();
+ }
+ })
]
else
_buildListIdentityView(context)
@@ -62,9 +70,13 @@ class IdentitiesRadioListBuilder extends StatelessWidget {
...[
_buildListIdentityView(context),
Container(width: 1, color: AppColor.attachmentFileBorderColor),
- Expanded(
- child: Obx(() => SignatureBuilder(identity: controller.identitySelected.value!)),
- )
+ Expanded(child: Obx(() {
+ if (controller.signatureSelected.value != null) {
+ return SignatureBuilder(controller.signatureSelected.value!);
+ } else {
+ return _buildLoadingView();
+ }
+ }))
]
else
Expanded(child: _buildListIdentityView(context))
@@ -102,4 +114,26 @@ class IdentitiesRadioListBuilder extends StatelessWidget {
))
);
}
+
+ Widget _buildLoadingView() {
+ return Obx(() => controller.viewState.value.fold(
+ (failure) => const SizedBox.shrink(),
+ (success) {
+ if (success is TransformHtmlSignatureLoading) {
+ return const Align(
+ alignment: Alignment.topCenter,
+ child: Padding(
+ padding: EdgeInsets.all(16),
+ child: SizedBox(
+ width: 30,
+ height: 30,
+ child: CupertinoActivityIndicator(color: AppColor.colorLoading)
+ ))
+ );
+ } else {
+ return const SizedBox.shrink();
+ }
+ }
+ ));
+ }
}
\ No newline at end of file
diff --git a/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart b/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart
index a0d0fdafc..8f7a275ce 100644
--- a/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart
+++ b/lib/features/manage_account/presentation/profiles/identities/widgets/signature_builder.dart
@@ -1,23 +1,19 @@
import 'package:core/presentation/views/html_viewer/html_content_viewer_on_web_widget.dart';
import 'package:core/presentation/views/html_viewer/html_content_viewer_widget.dart';
import 'package:core/presentation/views/html_viewer/html_viewer_controller_for_web.dart';
-import 'package:core/utils/app_logger.dart';
import 'package:core/utils/build_utils.dart';
import 'package:flutter/material.dart';
-import 'package:html_unescape/html_unescape_small.dart';
-import 'package:jmap_dart_client/jmap/identities/identity.dart';
-import 'package:tmail_ui_user/features/manage_account/presentation/extensions/identity_extension.dart';
class SignatureBuilder extends StatelessWidget {
- const SignatureBuilder({
+ const SignatureBuilder(
+ this.signatureSelected, {
Key? key,
- required this.identity,
this.width,
this.height = 256
}) : super(key: key);
- final Identity identity;
+ final String signatureSelected;
final double? width;
final double height;
@@ -38,13 +34,10 @@ class SignatureBuilder extends StatelessWidget {
}
Widget _buildSignature(double width, double height) {
- final signature = identity.signatureAsString;
- log('SignatureBuilder::_buildSignature():signature: $signature');
- if (signature.isNotEmpty) {
- final htmlSignatureDecoded = _decodeHtml(signature);
+ if (signatureSelected.isNotEmpty) {
if (BuildUtils.isWeb) {
return HtmlContentViewerOnWeb(
- contentHtml: htmlSignatureDecoded,
+ contentHtml: signatureSelected,
widthContent: width,
heightContent: height,
controller: HtmlViewerControllerForWeb(),
@@ -52,7 +45,7 @@ class SignatureBuilder extends StatelessWidget {
);
} else {
return HtmlContentViewer(
- contentHtml: htmlSignatureDecoded,
+ contentHtml: signatureSelected,
heightContent: height
);
}
@@ -60,9 +53,4 @@ class SignatureBuilder extends StatelessWidget {
return SizedBox(width: width, height: height);
}
}
-
- String _decodeHtml(String htmlString) {
- final unescape = HtmlUnescape();
- return unescape.convert(htmlString);
- }
}
\ No newline at end of file