TF-1684 Implement handle transform html signature
(cherry picked from commit cc535a6cf418d27b59e121ae6cd3dc57c065ddf3)
This commit is contained in:
@@ -120,16 +120,16 @@ class _HtmlContentViewerOnWebState extends State<HtmlContentViewerOnWeb> {
|
|||||||
let textContent = e.target.textContent;
|
let textContent = e.target.textContent;
|
||||||
console.log("handleOnClickLink: " + link);
|
console.log("handleOnClickLink: " + link);
|
||||||
console.log("handleOnClickLink: " + textContent);
|
console.log("handleOnClickLink: " + textContent);
|
||||||
if (link && isValidUrl(link)) {
|
if (link && isValidMailtoLink(link)) {
|
||||||
window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + link}), "*");
|
window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + link}), "*");
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
} else if (textContent && isValidUrl(textContent)) {
|
} else if (textContent && isValidMailtoLink(textContent)) {
|
||||||
window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + textContent}), "*");
|
window.parent.postMessage(JSON.stringify({"view": "$createdViewId", "type": "toDart: OpenLink", "url": "" + textContent}), "*");
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function isValidUrl(string) {
|
function isValidMailtoLink(string) {
|
||||||
let url;
|
let url;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -138,7 +138,7 @@ class _HtmlContentViewerOnWebState extends State<HtmlContentViewerOnWeb> {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return url.protocol === "http:" || url.protocol === "https:" || url.protocol === "mailto:";
|
return url.protocol === "mailto:";
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
''';
|
''';
|
||||||
@@ -232,8 +232,6 @@ class _HtmlContentViewerOnWebState extends State<HtmlContentViewerOnWeb> {
|
|||||||
final urlString = link as String;
|
final urlString = link as String;
|
||||||
if (urlString.startsWith('mailto:')) {
|
if (urlString.startsWith('mailto:')) {
|
||||||
widget.mailtoDelegate?.call(Uri.parse(urlString));
|
widget.mailtoDelegate?.call(Uri.parse(urlString));
|
||||||
} else {
|
|
||||||
html.window.open(urlString, '_blank');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+14
-1
@@ -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/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/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/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_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/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/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_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/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/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/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/model/identity_action_type.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/delete_identity_dialog_builder.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 DeleteIdentityInteractor _deleteIdentityInteractor;
|
||||||
final EditIdentityInteractor _editIdentityInteractor;
|
final EditIdentityInteractor _editIdentityInteractor;
|
||||||
final EditDefaultIdentityInteractor _editDefaultIdentityInteractor;
|
final EditDefaultIdentityInteractor _editDefaultIdentityInteractor;
|
||||||
|
final TransformHtmlSignatureInteractor _transformHtmlSignatureInteractor;
|
||||||
|
|
||||||
final identitySelected = Rxn<Identity>();
|
final identitySelected = Rxn<Identity>();
|
||||||
|
final signatureSelected = Rxn<String>();
|
||||||
final listAllIdentities = <Identity>[].obs;
|
final listAllIdentities = <Identity>[].obs;
|
||||||
|
|
||||||
IdentitiesController(
|
IdentitiesController(
|
||||||
@@ -56,7 +61,8 @@ class IdentitiesController extends BaseController {
|
|||||||
this._createNewIdentityInteractor,
|
this._createNewIdentityInteractor,
|
||||||
this._editIdentityInteractor,
|
this._editIdentityInteractor,
|
||||||
this._createNewDefaultIdentityInteractor,
|
this._createNewDefaultIdentityInteractor,
|
||||||
this._editDefaultIdentityInteractor
|
this._editDefaultIdentityInteractor,
|
||||||
|
this._transformHtmlSignatureInteractor
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -84,6 +90,8 @@ class IdentitiesController extends BaseController {
|
|||||||
_deleteIdentitySuccess(success);
|
_deleteIdentitySuccess(success);
|
||||||
} else if (success is EditIdentitySuccess) {
|
} else if (success is EditIdentitySuccess) {
|
||||||
_editIdentitySuccess(success);
|
_editIdentitySuccess(success);
|
||||||
|
} else if (success is TransformHtmlSignatureSuccess) {
|
||||||
|
signatureSelected.value = success.signature;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@@ -127,7 +135,12 @@ class IdentitiesController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectIdentity(Identity? newIdentity) {
|
void selectIdentity(Identity? newIdentity) {
|
||||||
|
signatureSelected.value = null;
|
||||||
identitySelected.value = newIdentity;
|
identitySelected.value = newIdentity;
|
||||||
|
|
||||||
|
if (newIdentity != null) {
|
||||||
|
consumeState(_transformHtmlSignatureInteractor.execute(newIdentity.signatureAsString));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void goToCreateNewIdentity(BuildContext context) async {
|
void goToCreateNewIdentity(BuildContext context) async {
|
||||||
|
|||||||
@@ -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_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/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/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/identities_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/identity_interactors_bindings.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<CreateNewIdentityInteractor>(),
|
Get.find<CreateNewIdentityInteractor>(),
|
||||||
Get.find<EditIdentityInteractor>(),
|
Get.find<EditIdentityInteractor>(),
|
||||||
Get.find<CreateNewDefaultIdentityInteractor>(),
|
Get.find<CreateNewDefaultIdentityInteractor>(),
|
||||||
Get.find<EditDefaultIdentityInteractor>()
|
Get.find<EditDefaultIdentityInteractor>(),
|
||||||
|
Get.find<TransformHtmlSignatureInteractor>()
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+2
@@ -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_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/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/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/features/manage_account/presentation/profiles/identities/utils/identity_utils.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
|
||||||
|
|
||||||
@@ -52,6 +53,7 @@ class IdentityInteractorsBindings extends InteractorsBindings {
|
|||||||
Get.lazyPut(() => EditDefaultIdentityInteractor(
|
Get.lazyPut(() => EditDefaultIdentityInteractor(
|
||||||
Get.find<IdentityRepository>(),
|
Get.find<IdentityRepository>(),
|
||||||
Get.find<IdentityUtils>()));
|
Get.find<IdentityUtils>()));
|
||||||
|
Get.lazyPut(() => TransformHtmlSignatureInteractor(Get.find<IdentityRepository>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
+38
-4
@@ -2,8 +2,10 @@ import 'package:core/presentation/extensions/color_extension.dart';
|
|||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:fading_edge_scrollview/fading_edge_scrollview.dart';
|
import 'package:fading_edge_scrollview/fading_edge_scrollview.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get_state_manager/get_state_manager.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/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/identity_list_tile_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/identities/widgets/signature_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),
|
_buildListIdentityView(context),
|
||||||
Container(height: 1, color: AppColor.attachmentFileBorderColor),
|
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
|
else
|
||||||
_buildListIdentityView(context)
|
_buildListIdentityView(context)
|
||||||
@@ -62,9 +70,13 @@ class IdentitiesRadioListBuilder extends StatelessWidget {
|
|||||||
...[
|
...[
|
||||||
_buildListIdentityView(context),
|
_buildListIdentityView(context),
|
||||||
Container(width: 1, color: AppColor.attachmentFileBorderColor),
|
Container(width: 1, color: AppColor.attachmentFileBorderColor),
|
||||||
Expanded(
|
Expanded(child: Obx(() {
|
||||||
child: Obx(() => SignatureBuilder(identity: controller.identitySelected.value!)),
|
if (controller.signatureSelected.value != null) {
|
||||||
)
|
return SignatureBuilder(controller.signatureSelected.value!);
|
||||||
|
} else {
|
||||||
|
return _buildLoadingView();
|
||||||
|
}
|
||||||
|
}))
|
||||||
]
|
]
|
||||||
else
|
else
|
||||||
Expanded(child: _buildListIdentityView(context))
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+6
-18
@@ -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_on_web_widget.dart';
|
||||||
import 'package:core/presentation/views/html_viewer/html_content_viewer_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/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:core/utils/build_utils.dart';
|
||||||
import 'package:flutter/material.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 {
|
class SignatureBuilder extends StatelessWidget {
|
||||||
|
|
||||||
const SignatureBuilder({
|
const SignatureBuilder(
|
||||||
|
this.signatureSelected, {
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.identity,
|
|
||||||
this.width,
|
this.width,
|
||||||
this.height = 256
|
this.height = 256
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
final Identity identity;
|
final String signatureSelected;
|
||||||
final double? width;
|
final double? width;
|
||||||
final double height;
|
final double height;
|
||||||
|
|
||||||
@@ -38,13 +34,10 @@ class SignatureBuilder extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildSignature(double width, double height) {
|
Widget _buildSignature(double width, double height) {
|
||||||
final signature = identity.signatureAsString;
|
if (signatureSelected.isNotEmpty) {
|
||||||
log('SignatureBuilder::_buildSignature():signature: $signature');
|
|
||||||
if (signature.isNotEmpty) {
|
|
||||||
final htmlSignatureDecoded = _decodeHtml(signature);
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
return HtmlContentViewerOnWeb(
|
return HtmlContentViewerOnWeb(
|
||||||
contentHtml: htmlSignatureDecoded,
|
contentHtml: signatureSelected,
|
||||||
widthContent: width,
|
widthContent: width,
|
||||||
heightContent: height,
|
heightContent: height,
|
||||||
controller: HtmlViewerControllerForWeb(),
|
controller: HtmlViewerControllerForWeb(),
|
||||||
@@ -52,7 +45,7 @@ class SignatureBuilder extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return HtmlContentViewer(
|
return HtmlContentViewer(
|
||||||
contentHtml: htmlSignatureDecoded,
|
contentHtml: signatureSelected,
|
||||||
heightContent: height
|
heightContent: height
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -60,9 +53,4 @@ class SignatureBuilder extends StatelessWidget {
|
|||||||
return SizedBox(width: width, height: height);
|
return SizedBox(width: width, height: height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String _decodeHtml(String htmlString) {
|
|
||||||
final unescape = HtmlUnescape();
|
|
||||||
return unescape.convert(htmlString);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user