diff --git a/lib/features/identity_creator/presentation/identity_creator_controller.dart b/lib/features/identity_creator/presentation/identity_creator_controller.dart index 0a7785e52..c52c01fdd 100644 --- a/lib/features/identity_creator/presentation/identity_creator_controller.dart +++ b/lib/features/identity_creator/presentation/identity_creator_controller.dart @@ -2,25 +2,31 @@ import 'package:core/core.dart'; import 'package:enough_html_editor/enough_html_editor.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/foundation.dart'; import 'package:get/get.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/id.dart'; import 'package:jmap_dart_client/jmap/core/properties/properties.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/model.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; -import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/model/signature_type.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/email_address_validator.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/model/verification/empty_name_validator.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/state/verify_name_view_state.dart'; import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_creator/presentation/extensions/validator_failure_extension.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart'; +import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.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/usecases/get_all_identities_interactor.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/identities_controller.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; +import 'package:uuid/uuid.dart'; class IdentityCreatorController extends BaseController { @@ -36,7 +42,9 @@ class IdentityCreatorController extends BaseController { final emailOfIdentity = Rxn(); final replyToOfIdentity = Rxn(); final bccOfIdentity = Rxn(); - final actionType = IdentityActionType.create.obs; + final _uuid = Get.find(); + final _identitiesController = Get.find(); + final _accountDashBoardController = Get.find(); final HtmlEditorController signatureHtmlEditorController = HtmlEditorController(processNewLineAsBr: true); final TextEditingController signaturePlainEditorController = TextEditingController(); @@ -44,10 +52,13 @@ class IdentityCreatorController extends BaseController { final TextEditingController inputBccIdentityController = TextEditingController(); final FocusNode inputNameIdentityFocusNode = FocusNode(); + late Worker identityCreatorIsActiveWorker; + HtmlEditorApi? signatureHtmlEditorMobileController; - AccountId? accountId; - UserProfile? userProfile; - Identity? identity; + AccountId? get accountId => _identitiesController.identityCreatorArguments.value!.accountId; + UserProfile? get userProfile => _identitiesController.identityCreatorArguments.value!.userProfile; + Identity? get identity => _identitiesController.identityCreatorArguments.value!.identity; + IdentityActionType get actionType => _identitiesController.identityCreatorArguments.value!.actionType; String? _nameIdentity; String? _contentHtmlEditor; @@ -67,14 +78,23 @@ class IdentityCreatorController extends BaseController { @override void onReady() { - _getArguments(); + _setUpValueFromIdentity(); _getAllIdentities(); - if (actionType.value == IdentityActionType.edit && identity != null) { - _setUpValueFromIdentity(); - } + _initWorker(); super.onReady(); } + void _initWorker() { + identityCreatorIsActiveWorker = ever(_accountDashBoardController.identityCreatorIsActive, (identityCreatorIsActive) { + if (identityCreatorIsActive == true) { + if (actionType == IdentityActionType.edit && identity != null) { + _setUpValueFromIdentity(); + _setUpAllFieldEmailAddress(); + } + } + }); + } + @override void onClose() { signaturePlainEditorController.dispose(); @@ -103,16 +123,6 @@ class IdentityCreatorController extends BaseController { @override void onError(error) {} - void _getArguments() { - final arguments = Get.arguments; - if (arguments is IdentityCreatorArguments) { - accountId = arguments.accountId; - userProfile = arguments.userProfile; - actionType.value = arguments.actionType; - identity = arguments.identity; - } - } - void _setUpValueFromIdentity() { _nameIdentity = identity?.name ?? ''; inputNameIdentityController.text = identity?.name ?? ''; @@ -170,7 +180,7 @@ class IdentityCreatorController extends BaseController { } void _setUpAllFieldEmailAddress() { - if (actionType.value == IdentityActionType.edit && identity != null) { + if (actionType == IdentityActionType.edit && identity != null) { if (identity?.replyTo?.isNotEmpty == true) { try { replyToOfIdentity.value = listEmailAddressOfReplyTo @@ -286,8 +296,28 @@ class IdentityCreatorController extends BaseController { log('IdentityCreatorController::createNewIdentity(): $newIdentity'); - _clearAll(); - popBack(result: newIdentity); + final generateCreateId = Id(_uuid.v1()); + + if(actionType == IdentityActionType.create) { + _identitiesController.createNewIdentityAction( + accountId!, + CreateNewIdentityRequest(generateCreateId, newIdentity), + ); + } else { + _identitiesController.editIdentityAction( + accountId!, + EditIdentityRequest( + identityId: identity!.id!, + identityRequest: newIdentity.toIdentityRequest(), + ) + ); + } + + if(kIsWeb) { + _accountDashBoardController.identityCreatorIsActive.toggle(); + } else { + popBack(); + } } String? _getErrorInputNameString(BuildContext context) { @@ -359,6 +389,10 @@ class IdentityCreatorController extends BaseController { void closeView(BuildContext context) { _clearAll(); clearFocusEditor(context); - popBack(); + if(kIsWeb) { + _accountDashBoardController.identityCreatorIsActive.toggle(); + } else { + popBack(); + } } } \ No newline at end of file diff --git a/lib/features/identity_creator/presentation/identity_creator_view.dart b/lib/features/identity_creator/presentation/identity_creator_view.dart index 6e8399818..eaa6b716a 100644 --- a/lib/features/identity_creator/presentation/identity_creator_view.dart +++ b/lib/features/identity_creator/presentation/identity_creator_view.dart @@ -124,7 +124,7 @@ class IdentityCreatorView extends GetWidget { Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ Padding( padding: const EdgeInsets.only(left: 24, top: 24), - child: Obx(() => Text(controller.actionType.value == IdentityActionType.create + child: Obx(() => Text(controller.actionType == IdentityActionType.create ? AppLocalizations.of(context).new_identity.inCaps : AppLocalizations.of(context).edit_identity.inCaps, style: const TextStyle( @@ -148,7 +148,7 @@ class IdentityCreatorView extends GetWidget { .build())), const SizedBox(width: 24), Expanded(child: Obx(() { - if (controller.actionType.value == IdentityActionType.create) { + if (controller.actionType == IdentityActionType.create) { return (IdentityDropListFieldBuilder( _imagePaths, AppLocalizations.of(context).email.inCaps, @@ -248,7 +248,7 @@ class IdentityCreatorView extends GetWidget { onTap: () => controller.closeView(context)), const SizedBox(width: 12), Obx(() => buildTextButton( - controller.actionType.value == IdentityActionType.create + controller.actionType == IdentityActionType.create ? AppLocalizations.of(context).create : AppLocalizations.of(context).save, width: 128, @@ -274,7 +274,7 @@ class IdentityCreatorView extends GetWidget { Column(children: [ Padding( padding: const EdgeInsets.only(top: 16), - child: Text(controller.actionType.value == IdentityActionType.create + child: Text(controller.actionType == IdentityActionType.create ? AppLocalizations.of(context).new_identity.inCaps : AppLocalizations.of(context).edit_identity.inCaps, style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 21, color: Colors.black))), @@ -295,7 +295,7 @@ class IdentityCreatorView extends GetWidget { .build()), const SizedBox(height: 24), Obx(() { - if (controller.actionType.value == IdentityActionType.create) { + if (controller.actionType == IdentityActionType.create) { return (IdentityDropListFieldBuilder( _imagePaths, AppLocalizations.of(context).email.inCaps, @@ -391,7 +391,7 @@ class IdentityCreatorView extends GetWidget { const SizedBox(width: 12), Expanded( child: Obx(() => buildTextButton( - controller.actionType.value == IdentityActionType.create + controller.actionType == IdentityActionType.create ? AppLocalizations.of(context).create : AppLocalizations.of(context).save, width: 128, 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 f458dd38a..87e53e0f4 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -1,13 +1,14 @@ import 'package:core/core.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; -import 'package:model/extensions/identity_extension.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; +import 'package:tmail_ui_user/features/identity_creator/presentation/identity_creator_bindings.dart'; import 'package:tmail_ui_user/features/identity_creator/presentation/model/identity_creator_arguments.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart'; import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart'; @@ -25,7 +26,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/setting import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; -import 'package:uuid/uuid.dart'; class IdentitiesController extends BaseController { @@ -33,7 +33,6 @@ class IdentitiesController extends BaseController { final _appToast = Get.find(); final _imagePaths = Get.find(); final _responsiveUtils = Get.find(); - final _uuid = Get.find(); final GetAllIdentitiesInteractor _getAllIdentitiesInteractor; final CreateNewIdentityInteractor _createNewIdentityInteractor; @@ -46,6 +45,8 @@ class IdentitiesController extends BaseController { final idIdentityAll = IdentityId(Id('all')); + final identityCreatorArguments = Rxn(); + late Worker accountIdWorker; IdentitiesController( @@ -140,6 +141,11 @@ class IdentitiesController extends BaseController { } } + void _openIdentityCreatorOverlay() { + IdentityCreatorBindings().dependencies(); + _accountDashBoardController.identityCreatorIsActive.toggle(); + } + void selectIdentity(Identity? newIdentity) { identitySelected.value = newIdentity; if (newIdentity != null) { @@ -159,20 +165,16 @@ class IdentitiesController extends BaseController { final accountId = _accountDashBoardController.accountId.value; final userProfile = _accountDashBoardController.userProfile.value; if (accountId != null && userProfile != null) { - final newIdentity = await push( - AppRoutes.IDENTITY_CREATOR, - arguments: IdentityCreatorArguments(accountId, userProfile)); - - if (newIdentity != null && newIdentity is Identity) { - final generateCreateId = Id(_uuid.v1()); - _createNewIdentityAction( - accountId, - CreateNewIdentityRequest(generateCreateId, newIdentity)); + identityCreatorArguments.value = IdentityCreatorArguments(accountId, userProfile); + if (kIsWeb) { + _openIdentityCreatorOverlay(); + } else { + push(AppRoutes.IDENTITY_CREATOR); } } } - void _createNewIdentityAction(AccountId accountId, CreateNewIdentityRequest identityRequest) async { + void createNewIdentityAction(AccountId accountId, CreateNewIdentityRequest identityRequest) async { consumeState(_createNewIdentityInteractor.execute(accountId, identityRequest)); } @@ -285,25 +287,20 @@ class IdentitiesController extends BaseController { final accountId = _accountDashBoardController.accountId.value; final userProfile = _accountDashBoardController.userProfile.value; if (accountId != null && userProfile != null) { - final newIdentity = await push( - AppRoutes.IDENTITY_CREATOR, - arguments: IdentityCreatorArguments( - accountId, - userProfile, - identity: identity, - actionType: IdentityActionType.edit)); - - if (newIdentity is Identity) { - log('IdentitiesController::goToEditIdentity(): $newIdentity'); - _editIdentityAction(accountId, EditIdentityRequest( - identityId: identity.id!, - identityRequest: newIdentity.toIdentityRequest() - )); + identityCreatorArguments.value = IdentityCreatorArguments( + accountId, + userProfile, + identity: identity, + actionType: IdentityActionType.edit); + if (kIsWeb) { + _openIdentityCreatorOverlay(); + } else { + push(AppRoutes.IDENTITY_CREATOR); } } } - void _editIdentityAction(AccountId accountId, EditIdentityRequest editIdentityRequest) async { + void editIdentityAction(AccountId accountId, EditIdentityRequest editIdentityRequest) async { log('IdentitiesController::_editIdentityAction(): $editIdentityRequest'); consumeState(_editIdentityInteractor.execute(accountId, editIdentityRequest)); } diff --git a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart index bee7ccb9b..37beeab24 100644 --- a/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart +++ b/lib/features/rules_filter_creator/presentation/rules_filter_creator_controller.dart @@ -25,7 +25,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/e import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/creator_action_type.dart'; import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/email_rule_filter_action.dart'; -import 'package:tmail_ui_user/features/rules_filter_creator/presentation/model/rules_filter_creator_arguments.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; import 'package:tmail_ui_user/main/routes/route_navigation.dart'; @@ -53,7 +52,7 @@ class RulesFilterCreatorController extends BaseMailboxController { final _accountDashBoardController = Get.find(); final _emailRulesController = Get.find(); - late Worker rulesFilterCreatorArgumentsWorker; + late Worker rulesFilterCreatorIsActiveWorker; get actionType => _emailRulesController.rulesFilterCreatorArguments.value!.actionType; @@ -71,21 +70,16 @@ class RulesFilterCreatorController extends BaseMailboxController { ) : super(treeBuilder); void _initWorker() { - rulesFilterCreatorArgumentsWorker = ever(_emailRulesController.rulesFilterCreatorArguments, (rulesFilterCreatorArguments) { - if (rulesFilterCreatorArguments is RulesFilterCreatorArguments) { + rulesFilterCreatorIsActiveWorker = ever(_accountDashBoardController.rulesFilterCreatorIsActive, (rulesFilterCreatorIsActive) { + if (rulesFilterCreatorIsActive == true) { _setUpDefaultValueRuleFilter(); } }); } - @override - void onInit() { - _initWorker(); - super.onInit(); - } - @override void onReady() { + _initWorker(); _setUpDefaultValueRuleFilter(); super.onReady(); }