TF-1194 create new default identity: update identites controller and identity_creator controller
This commit is contained in:
@@ -3,18 +3,23 @@ import 'package:core/utils/app_logger.dart';
|
|||||||
import 'package:core/utils/build_utils.dart';
|
import 'package:core/utils/build_utils.dart';
|
||||||
import 'package:enough_html_editor/enough_html_editor.dart';
|
import 'package:enough_html_editor/enough_html_editor.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:get/get_core/get_core.dart';
|
||||||
|
import 'package:get/get_instance/get_instance.dart';
|
||||||
|
import 'package:get/get_rx/get_rx.dart';
|
||||||
import 'package:html_editor_enhanced/html_editor.dart';
|
import 'package:html_editor_enhanced/html_editor.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.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/id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||||
import 'package:model/extensions/email_address_extension.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:model/extensions/identity_extension.dart';
|
|
||||||
import 'package:model/user/user_profile.dart';
|
|
||||||
import 'package:rich_text_composer/richtext_controller.dart';
|
import 'package:rich_text_composer/richtext_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_mobile_tablet_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/composer/presentation/controller/rich_text_web_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/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/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/email_address_validator.dart';
|
||||||
@@ -49,8 +54,13 @@ class IdentityCreatorController extends BaseController {
|
|||||||
final replyToOfIdentity = Rxn<EmailAddress>();
|
final replyToOfIdentity = Rxn<EmailAddress>();
|
||||||
final bccOfIdentity = Rxn<EmailAddress>();
|
final bccOfIdentity = Rxn<EmailAddress>();
|
||||||
final actionType = IdentityActionType.create.obs;
|
final actionType = IdentityActionType.create.obs;
|
||||||
|
final isDefaultIdentity = RxBool(false);
|
||||||
|
final htmlEditorNode = FocusNode(debugLabel: 'html_editor');
|
||||||
|
final identityCreatorBinding = IdentityCreatorBindings();
|
||||||
|
|
||||||
late RichTextController keyboardRichTextController;
|
late RichTextController keyboardRichTextController;
|
||||||
|
late RichTextWebController richTextWebController;
|
||||||
|
late RichTextMobileTabletController richTextMobileTabletController;
|
||||||
late HtmlEditorController signatureHtmlEditorController;
|
late HtmlEditorController signatureHtmlEditorController;
|
||||||
TextEditingController? signaturePlainEditorController;
|
TextEditingController? signaturePlainEditorController;
|
||||||
TextEditingController? inputNameIdentityController;
|
TextEditingController? inputNameIdentityController;
|
||||||
@@ -88,7 +98,10 @@ class IdentityCreatorController extends BaseController {
|
|||||||
void onInit() {
|
void onInit() {
|
||||||
super.onInit();
|
super.onInit();
|
||||||
keyboardRichTextController = RichTextController();
|
keyboardRichTextController = RichTextController();
|
||||||
signatureHtmlEditorController = HtmlEditorController(processNewLineAsBr: true);
|
richTextWebController = RichTextWebController();
|
||||||
|
richTextMobileTabletController = RichTextMobileTabletController();
|
||||||
|
signatureHtmlEditorController =
|
||||||
|
HtmlEditorController(processNewLineAsBr: true);
|
||||||
signaturePlainEditorController = TextEditingController();
|
signaturePlainEditorController = TextEditingController();
|
||||||
inputNameIdentityController = TextEditingController();
|
inputNameIdentityController = TextEditingController();
|
||||||
inputBccIdentityController = TextEditingController();
|
inputBccIdentityController = TextEditingController();
|
||||||
@@ -158,13 +171,12 @@ class IdentityCreatorController extends BaseController {
|
|||||||
|
|
||||||
void _getALlIdentitiesSuccess(GetAllIdentitiesSuccess success) {
|
void _getALlIdentitiesSuccess(GetAllIdentitiesSuccess success) {
|
||||||
if (success.identities?.isNotEmpty == true) {
|
if (success.identities?.isNotEmpty == true) {
|
||||||
listEmailAddressDefault.value = success.identities
|
listEmailAddressDefault.value = success.identities!
|
||||||
!.map((identity) => identity.toEmailAddressNoName())
|
.map((identity) => identity.toEmailAddressNoName())
|
||||||
.toSet()
|
.toSet()
|
||||||
.toList();
|
.toList();
|
||||||
listEmailAddressOfReplyTo.add(noneEmailAddress);
|
listEmailAddressOfReplyTo.add(noneEmailAddress);
|
||||||
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
|
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
|
||||||
|
|
||||||
_setUpAllFieldEmailAddress();
|
_setUpAllFieldEmailAddress();
|
||||||
} else {
|
} else {
|
||||||
_setDefaultEmailAddressList();
|
_setDefaultEmailAddressList();
|
||||||
@@ -286,21 +298,28 @@ class IdentityCreatorController extends BaseController {
|
|||||||
? {replyToOfIdentity.value!}
|
? {replyToOfIdentity.value!}
|
||||||
: <EmailAddress>{};
|
: <EmailAddress>{};
|
||||||
|
|
||||||
|
final sortOrder = isDefaultIdentity.value ? UnsignedInt(0) : null;
|
||||||
|
|
||||||
final newIdentity = Identity(
|
final newIdentity = Identity(
|
||||||
name: _nameIdentity,
|
name: _nameIdentity,
|
||||||
email: emailOfIdentity.value?.email,
|
email: emailOfIdentity.value?.email,
|
||||||
replyTo: replyToAddress,
|
replyTo: replyToAddress,
|
||||||
bcc: bccAddress,
|
bcc: bccAddress,
|
||||||
textSignature: Signature(signaturePlainText),
|
textSignature: Signature(signaturePlainText),
|
||||||
htmlSignature: Signature(signatureHtmlText ?? ''));
|
htmlSignature: Signature(signatureHtmlText ?? ''),
|
||||||
|
sortOrder: sortOrder);
|
||||||
|
|
||||||
final generateCreateId = Id(_uuid.v1());
|
final generateCreateId = Id(_uuid.v1());
|
||||||
|
|
||||||
if (actionType.value == IdentityActionType.create) {
|
if (actionType.value == IdentityActionType.create) {
|
||||||
final identityRequest = CreateNewIdentityRequest(generateCreateId, newIdentity);
|
final identityRequest = CreateNewIdentityRequest(
|
||||||
|
generateCreateId,
|
||||||
|
newIdentity,
|
||||||
|
isDefaultIdentity: isDefaultIdentity.value
|
||||||
|
);
|
||||||
|
_disposeWidget();
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
|
||||||
onCreatedIdentityCallback?.call(identityRequest);
|
onCreatedIdentityCallback?.call(identityRequest);
|
||||||
} else {
|
} else {
|
||||||
popBack(result: identityRequest);
|
popBack(result: identityRequest);
|
||||||
@@ -318,6 +337,11 @@ class IdentityCreatorController extends BaseController {
|
|||||||
popBack(result: identityRequest);
|
popBack(result: identityRequest);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
identityCreatorBinding.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
void onCheckboxChanged() {
|
||||||
|
isDefaultIdentity.value = !isDefaultIdentity.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
String? _getErrorInputNameString(BuildContext context) {
|
String? _getErrorInputNameString(BuildContext context) {
|
||||||
@@ -364,12 +388,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _clearAll() {
|
|
||||||
signaturePlainEditorController?.clear();
|
|
||||||
inputNameIdentityController?.clear();
|
|
||||||
inputBccIdentityController?.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<EmailAddress> getSuggestionEmailAddress(String? pattern) {
|
List<EmailAddress> getSuggestionEmailAddress(String? pattern) {
|
||||||
if (pattern == null || pattern.isEmpty) {
|
if (pattern == null || pattern.isEmpty) {
|
||||||
return List.empty();
|
return List.empty();
|
||||||
@@ -382,19 +400,19 @@ class IdentityCreatorController extends BaseController {
|
|||||||
void clearFocusEditor(BuildContext context) {
|
void clearFocusEditor(BuildContext context) {
|
||||||
if (!BuildUtils.isWeb) {
|
if (!BuildUtils.isWeb) {
|
||||||
signatureHtmlEditorMobileController?.unfocus();
|
signatureHtmlEditorMobileController?.unfocus();
|
||||||
|
richTextMobileTabletController.htmlEditorApi?.unfocus();
|
||||||
|
keyboardRichTextController.hideRichTextView();
|
||||||
}
|
}
|
||||||
FocusScope.of(context).unfocus();
|
SystemChannels.textInput.invokeMethod('TextInput.hide');
|
||||||
}
|
}
|
||||||
|
|
||||||
void closeView(BuildContext context) {
|
void closeView(BuildContext context) {
|
||||||
_clearAll();
|
|
||||||
clearFocusEditor(context);
|
|
||||||
|
|
||||||
if (BuildUtils.isWeb) {
|
if (BuildUtils.isWeb) {
|
||||||
_disposeWidget();
|
_disposeWidget();
|
||||||
onDismissIdentityCreator?.call();
|
onDismissIdentityCreator?.call();
|
||||||
} else {
|
} else {
|
||||||
popBack();
|
popBack();
|
||||||
|
identityCreatorBinding.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+51
-9
@@ -13,13 +13,17 @@ import 'package:get/get.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.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/identity_creator_view.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/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/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/model/edit_identity_request.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_default_identity_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_identity_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/create_new_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/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/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_identity_interactor.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/usecases/edit_identity_interactor.dart';
|
||||||
@@ -28,7 +32,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/manage_accoun
|
|||||||
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/model/settings_page_level.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.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';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class IdentitiesController extends BaseController {
|
class IdentitiesController extends BaseController {
|
||||||
@@ -37,9 +40,11 @@ class IdentitiesController extends BaseController {
|
|||||||
final _appToast = Get.find<AppToast>();
|
final _appToast = Get.find<AppToast>();
|
||||||
final _imagePaths = Get.find<ImagePaths>();
|
final _imagePaths = Get.find<ImagePaths>();
|
||||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
|
final _identityCreatorBindings = IdentityCreatorBindings();
|
||||||
|
|
||||||
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
final GetAllIdentitiesInteractor _getAllIdentitiesInteractor;
|
||||||
final CreateNewIdentityInteractor _createNewIdentityInteractor;
|
final CreateNewIdentityInteractor _createNewIdentityInteractor;
|
||||||
|
final CreateNewDefaultIdentityInteractor _createNewDefaultIdentityInteractor;
|
||||||
final DeleteIdentityInteractor _deleteIdentityInteractor;
|
final DeleteIdentityInteractor _deleteIdentityInteractor;
|
||||||
final EditIdentityInteractor _editIdentityInteractor;
|
final EditIdentityInteractor _editIdentityInteractor;
|
||||||
|
|
||||||
@@ -53,6 +58,7 @@ class IdentitiesController extends BaseController {
|
|||||||
this._deleteIdentityInteractor,
|
this._deleteIdentityInteractor,
|
||||||
this._createNewIdentityInteractor,
|
this._createNewIdentityInteractor,
|
||||||
this._editIdentityInteractor,
|
this._editIdentityInteractor,
|
||||||
|
this._createNewDefaultIdentityInteractor
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -80,6 +86,8 @@ class IdentitiesController extends BaseController {
|
|||||||
_handleGetAllIdentitiesSuccess(success);
|
_handleGetAllIdentitiesSuccess(success);
|
||||||
} else if (success is CreateNewIdentitySuccess) {
|
} else if (success is CreateNewIdentitySuccess) {
|
||||||
_createNewIdentitySuccess(success);
|
_createNewIdentitySuccess(success);
|
||||||
|
} else if (success is CreateNewDefaultIdentitySuccess) {
|
||||||
|
_createNewDefaultIdentitySuccess(success);
|
||||||
} else if (success is DeleteIdentitySuccess) {
|
} else if (success is DeleteIdentitySuccess) {
|
||||||
_deleteIdentitySuccess(success);
|
_deleteIdentitySuccess(success);
|
||||||
} else if (success is EditIdentitySuccess) {
|
} else if (success is EditIdentitySuccess) {
|
||||||
@@ -154,9 +162,8 @@ class IdentitiesController extends BaseController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
final newIdentityArguments = await push(
|
final newIdentityArguments =
|
||||||
AppRoutes.identityCreator,
|
await _getIdentityRequest(context, arguments);
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newIdentityArguments is CreateNewIdentityRequest) {
|
if (newIdentityArguments is CreateNewIdentityRequest) {
|
||||||
_createNewIdentityAction(accountId, newIdentityArguments);
|
_createNewIdentityAction(accountId, newIdentityArguments);
|
||||||
@@ -167,8 +174,34 @@ class IdentitiesController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _createNewIdentityAction(AccountId accountId, CreateNewIdentityRequest identityRequest) async {
|
Future<dynamic> _getIdentityRequest(
|
||||||
consumeState(_createNewIdentityInteractor.execute(accountId, identityRequest));
|
BuildContext context,
|
||||||
|
dynamic arguments
|
||||||
|
) async {
|
||||||
|
return await showModalBottomSheet(
|
||||||
|
enableDrag: false,
|
||||||
|
context: context,
|
||||||
|
isScrollControlled: true,
|
||||||
|
shape: const RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.only(
|
||||||
|
topLeft: Radius.circular(16.0),
|
||||||
|
topRight: Radius.circular(16.0)),
|
||||||
|
),
|
||||||
|
builder: (context) {
|
||||||
|
_identityCreatorBindings.dependencies();
|
||||||
|
return IdentityCreatorView.fromArguments(arguments);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void _createNewIdentityAction(
|
||||||
|
AccountId accountId,
|
||||||
|
CreateNewIdentityRequest identityRequest
|
||||||
|
) async {
|
||||||
|
if (identityRequest.isDefaultIdentity) {
|
||||||
|
consumeState(_createNewDefaultIdentityInteractor.execute(accountId, identityRequest));
|
||||||
|
} else {
|
||||||
|
consumeState(_createNewIdentityInteractor.execute(accountId, identityRequest));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _createNewIdentitySuccess(CreateNewIdentitySuccess success) {
|
void _createNewIdentitySuccess(CreateNewIdentitySuccess success) {
|
||||||
@@ -182,6 +215,17 @@ class IdentitiesController extends BaseController {
|
|||||||
_refreshAllIdentities();
|
_refreshAllIdentities();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _createNewDefaultIdentitySuccess(CreateNewDefaultIdentitySuccess success) {
|
||||||
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
|
_appToast.showToastWithIcon(
|
||||||
|
currentOverlayContext!,
|
||||||
|
message: AppLocalizations.of(currentContext!).you_have_created_a_new_default_identity,
|
||||||
|
icon: _imagePaths.icSelected);
|
||||||
|
}
|
||||||
|
|
||||||
|
_refreshAllIdentities();
|
||||||
|
}
|
||||||
|
|
||||||
void openConfirmationDialogDeleteIdentityAction(BuildContext context, Identity identity) {
|
void openConfirmationDialogDeleteIdentityAction(BuildContext context, Identity identity) {
|
||||||
if (_responsiveUtils.isScreenWithShortestSide(context)) {
|
if (_responsiveUtils.isScreenWithShortestSide(context)) {
|
||||||
(ConfirmationDialogActionSheetBuilder(context)
|
(ConfirmationDialogActionSheetBuilder(context)
|
||||||
@@ -294,9 +338,7 @@ class IdentitiesController extends BaseController {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
final newIdentityArguments = await push(
|
final newIdentityArguments = await _getIdentityRequest(context, arguments);
|
||||||
AppRoutes.identityCreator,
|
|
||||||
arguments: arguments);
|
|
||||||
|
|
||||||
if (newIdentityArguments is CreateNewIdentityRequest) {
|
if (newIdentityArguments is CreateNewIdentityRequest) {
|
||||||
_createNewIdentityAction(accountId, newIdentityArguments);
|
_createNewIdentityAction(accountId, newIdentityArguments);
|
||||||
|
|||||||
Reference in New Issue
Block a user