From c9fed1fa41cbe5431a78242d85f79aaaa4b3404d Mon Sep 17 00:00:00 2001 From: dab246 Date: Tue, 5 Mar 2024 10:02:08 +0700 Subject: [PATCH] TF-2667 Use `Username` replace `UserProfile` --- .../presentation/composer_controller.dart | 54 +++++++++---------- .../model/save_to_draft_view_event.dart | 4 -- .../presentation/contact_controller.dart | 15 ++---- .../contact/presentation/contact_view.dart | 7 +-- .../controller/single_email_controller.dart | 6 +-- .../identity_creator_controller.dart | 7 +-- .../model/identity_creator_arguments.dart | 6 +-- .../datasource/authentication_datasource.dart | 3 +- .../authentication_datasource_impl.dart | 14 ++--- .../authentication_repository_impl.dart | 3 +- .../repository/authentication_repository.dart | 3 +- .../state/authentication_user_state.dart | 8 +-- .../authentication_user_interactor.dart | 8 +-- .../mailbox/presentation/mailbox_view.dart | 2 +- .../presentation/mailbox_view_web.dart | 2 +- .../widgets/user_information_widget.dart | 13 +++-- .../domain/state/get_user_profile_state.dart | 17 ------ .../mailbox_dashboard_controller.dart | 8 +-- .../controller/search_controller.dart | 20 ++++--- .../mailbox_dashboard_view_web.dart | 9 ++-- .../mixin/user_setting_popup_menu_mixin.dart | 48 +++++++++-------- .../model/search/quick_search_filter.dart | 3 +- .../widgets/search_input_form_widget.dart | 4 +- .../manage_account_dashboard_controller.dart | 13 +---- .../manage_account_dashboard_view.dart | 5 +- .../settings/settings_first_level_view.dart | 2 +- .../identities/identities_controller.dart | 9 ++-- .../presentation/search_email_controller.dart | 3 -- .../credential/credential_bindings.dart | 2 +- lib/main/localizations/app_localizations.dart | 18 +++++++ .../extensions/user_profile_extension.dart | 7 --- model/lib/extensions/username_extension.dart | 7 +++ model/lib/model.dart | 7 +-- model/lib/user/avatar_id.dart | 15 ------ model/lib/user/user_profile.dart | 15 ------ model/lib/user/user_profile_response.dart | 26 --------- 36 files changed, 148 insertions(+), 245 deletions(-) delete mode 100644 lib/features/mailbox_dashboard/domain/state/get_user_profile_state.dart delete mode 100644 model/lib/extensions/user_profile_extension.dart create mode 100644 model/lib/extensions/username_extension.dart delete mode 100644 model/lib/user/avatar_id.dart delete mode 100644 model/lib/user/user_profile.dart delete mode 100644 model/lib/user/user_profile_response.dart diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 2e878affb..8132dcbca 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -19,6 +19,7 @@ import 'package:get/get.dart'; import 'package:html_editor_enhanced/html_editor.dart' as web_html_editor; import 'package:http_parser/http_parser.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; @@ -368,13 +369,13 @@ class ComposerController extends BaseController with DragDropFileMixin { }); } - void _listenBrowserEventAction() { - log('ComposerController::_listenBrowserEventAction:'); - _subscriptionOnBeforeUnload = html.window.onBeforeUnload.listen((event) async { - final userProfile = mailboxDashBoardController.userProfile.value; + void _listenBrowserTabRefresh() { + _subscriptionOnBeforeUnload = html.window.onBeforeUnload.listen((event) async { _removeComposerCacheOnWebInteractor.execute(); - if (userProfile != null) { - final draftEmail = await _generateEmail(currentContext!, userProfile); + if (mailboxDashBoardController.sessionCurrent != null) { + final draftEmail = await _generateEmail( + currentContext!, + mailboxDashBoardController.sessionCurrent!.username); _saveComposerCacheOnWebInteractor.execute(draftEmail); } }); @@ -624,17 +625,17 @@ class ComposerController extends BaseController with DragDropFileMixin { emailActionType: actionType, mailboxRole: mailboxRole ); - final userProfile = mailboxDashBoardController.userProfile.value; - if (userProfile != null) { - final isSender = presentationEmail.from.asList().every((element) => element.email == userProfile.email); + final userName = mailboxDashBoardController.sessionCurrent?.username; + if (userName != null) { + final isSender = presentationEmail.from.asList().every((element) => element.email == userName.value); if (isSender) { listToEmailAddress = List.from(recipients.value1.toSet()); listCcEmailAddress = List.from(recipients.value2.toSet()); listBccEmailAddress = List.from(recipients.value3.toSet()); } else { - listToEmailAddress = List.from(recipients.value1.toSet().filterEmailAddress(userProfile.email)); - listCcEmailAddress = List.from(recipients.value2.toSet().filterEmailAddress(userProfile.email)); - listBccEmailAddress = List.from(recipients.value3.toSet().filterEmailAddress(userProfile.email)); + listToEmailAddress = List.from(recipients.value1.toSet().filterEmailAddress(userName.value)); + listCcEmailAddress = List.from(recipients.value2.toSet().filterEmailAddress(userName.value)); + listBccEmailAddress = List.from(recipients.value3.toSet().filterEmailAddress(userName.value)); } } else { listToEmailAddress = List.from(recipients.value1.toSet()); @@ -692,7 +693,7 @@ class ComposerController extends BaseController with DragDropFileMixin { Future _generateEmail( BuildContext context, - UserProfile userProfile, + UserName userName, { bool asDrafts = false, MailboxId? draftMailboxId, @@ -700,7 +701,7 @@ class ComposerController extends BaseController with DragDropFileMixin { ComposerArguments? arguments, } ) async { - Set listFromEmailAddress = {EmailAddress(null, userProfile.email)}; + Set listFromEmailAddress = {EmailAddress(null, userName.value)}; if (identitySelected.value?.email?.isNotEmpty == true) { listFromEmailAddress = { EmailAddress( @@ -709,7 +710,7 @@ class ComposerController extends BaseController with DragDropFileMixin { ) }; } - Set listReplyToEmailAddress = {EmailAddress(null, userProfile.email)}; + Set listReplyToEmailAddress = {EmailAddress(null, userName.value)}; if (identitySelected.value?.replyTo?.isNotEmpty == true) { listReplyToEmailAddress = identitySelected.value!.replyTo!; } @@ -925,7 +926,6 @@ class ComposerController extends BaseController with DragDropFileMixin { bool get _isParamUserNull { if (composerArguments.value == null || - mailboxDashBoardController.userProfile.value == null || mailboxDashBoardController.sessionCurrent == null || mailboxDashBoardController.accountId.value == null ) { @@ -942,19 +942,18 @@ class ComposerController extends BaseController with DragDropFileMixin { return; } - final sendingArgs = await _createSendingEmailArguments(context); + final sendingArgs = await createSendingEmailArguments(context); _closeComposerAction(result: sendingArgs); } - Future _createSendingEmailArguments(BuildContext context) async { + Future createSendingEmailArguments(BuildContext context) async { final session = mailboxDashBoardController.sessionCurrent!; final arguments = composerArguments.value!; final accountId = mailboxDashBoardController.accountId.value!; - final userProfile = mailboxDashBoardController.userProfile.value!; final createdEmail = await _generateEmail( context, - userProfile, + session.username, outboxMailboxId: mailboxDashBoardController.outboxMailbox?.id, arguments: arguments ); @@ -1187,14 +1186,12 @@ class ComposerController extends BaseController with DragDropFileMixin { Future _generateSaveAsDraftsArguments(BuildContext context) async { log('ComposerController::_generateSaveAsDraftsArguments:'); final arguments = composerArguments.value; - final userProfile = mailboxDashBoardController.userProfile.value; final accountId = mailboxDashBoardController.accountId.value; final session = mailboxDashBoardController.sessionCurrent; final draftMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts]; if (arguments == null || draftMailboxId == null || - userProfile == null || session == null || accountId == null ) { @@ -1204,7 +1201,7 @@ class ComposerController extends BaseController with DragDropFileMixin { if (_emailIdEditing != null && _emailIdEditing != arguments.presentationEmail?.id) { final newEmail = await _generateEmail( context, - userProfile, + session.username, asDrafts: true, draftMailboxId: draftMailboxId, arguments: arguments, @@ -1226,7 +1223,7 @@ class ComposerController extends BaseController with DragDropFileMixin { if (isChanged && context.mounted) { final newEmail = await _generateEmail( context, - userProfile, + session.username, asDrafts: true, draftMailboxId: draftMailboxId, arguments: arguments, @@ -1253,19 +1250,18 @@ class ComposerController extends BaseController with DragDropFileMixin { _saveToDraftButtonState = ButtonState.disabled; - final userProfile = mailboxDashBoardController.userProfile.value; final accountId = mailboxDashBoardController.accountId.value; final session = mailboxDashBoardController.sessionCurrent; final draftMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts]; - if (draftMailboxId == null || userProfile == null || session == null || accountId == null) { + if (draftMailboxId == null || session == null || accountId == null) { log('ComposerController::saveToDraftAction: Param is NULL'); return; } final newEmail = await _generateEmail( context, - userProfile, + session.username, asDrafts: true, draftMailboxId: draftMailboxId, arguments: mailboxDashBoardController.composerArguments); @@ -1383,7 +1379,7 @@ class ComposerController extends BaseController with DragDropFileMixin { if (arguments.emailActionType == EmailActionType.editDraft) { return arguments.presentationEmail?.firstEmailAddressInFrom ?? ''; } else { - return mailboxDashBoardController.userProfile.value?.email ?? ''; + return mailboxDashBoardController.sessionCurrent?.username.value ?? ''; } } return ''; @@ -1912,8 +1908,6 @@ class ComposerController extends BaseController with DragDropFileMixin { bool get isNetworkConnectionAvailable => networkConnectionController.isNetworkConnectionAvailable(); - UserProfile? get userProfile => mailboxDashBoardController.userProfile.value; - String? get textEditorWeb => _textEditorWeb; HtmlEditorApi? get htmlEditorApi => richTextMobileTabletController.htmlEditorApi; diff --git a/lib/features/composer/presentation/model/save_to_draft_view_event.dart b/lib/features/composer/presentation/model/save_to_draft_view_event.dart index 14db275c0..08c84a326 100644 --- a/lib/features/composer/presentation/model/save_to_draft_view_event.dart +++ b/lib/features/composer/presentation/model/save_to_draft_view_event.dart @@ -4,14 +4,12 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/email/email.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; -import 'package:model/user/user_profile.dart'; import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart'; class SaveToDraftViewEvent extends ViewEvent { final BuildContext context; final Session session; final AccountId accountId; - final UserProfile userProfile; final MailboxId draftMailboxId; final EmailId? emailIdEditing; final ComposerArguments? arguments; @@ -20,7 +18,6 @@ class SaveToDraftViewEvent extends ViewEvent { required this.context, required this.session, required this.accountId, - required this.userProfile, required this.draftMailboxId, this.emailIdEditing, this.arguments, @@ -31,7 +28,6 @@ class SaveToDraftViewEvent extends ViewEvent { context, session, accountId, - userProfile, draftMailboxId, emailIdEditing, arguments, diff --git a/lib/features/contact/presentation/contact_controller.dart b/lib/features/contact/presentation/contact_controller.dart index c6cca3804..4dc141574 100644 --- a/lib/features/contact/presentation/contact_controller.dart +++ b/lib/features/contact/presentation/contact_controller.dart @@ -2,21 +2,20 @@ import 'package:core/presentation/utils/keyboard_utils.dart'; import 'package:core/utils/app_logger.dart'; import 'package:core/utils/platform_info.dart'; +import 'package:debounce_throttle/debounce_throttle.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/autocomplete/auto_complete_pattern.dart'; -import 'package:model/user/user_profile.dart'; import 'package:permission_handler/permission_handler.dart'; -import 'package:debounce_throttle/debounce_throttle.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/composer/domain/model/contact_suggestion_source.dart'; import 'package:tmail_ui_user/features/composer/domain/state/get_autocomplete_state.dart'; import 'package:tmail_ui_user/features/composer/domain/state/get_device_contact_suggestions_state.dart'; -import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/get_all_autocomplete_interactor.dart'; +import 'package:tmail_ui_user/features/composer/domain/usecases/get_autocomplete_interactor.dart'; import 'package:tmail_ui_user/features/composer/domain/usecases/get_device_contact_suggestions_interactor.dart'; import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart'; import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_suggestion_box_item.dart'; @@ -32,7 +31,6 @@ class ContactController extends BaseController { final searchQuery = SearchQuery.initial().obs; final listContactSearched = RxList(); final scrollListViewController = ScrollController(); - final userProfile = Rxn(); GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor; GetAutoCompleteInteractor? _getAutoCompleteInteractor; @@ -40,7 +38,7 @@ class ContactController extends BaseController { final Debouncer _deBouncerTime = Debouncer(const Duration(milliseconds: 300), initialValue: ''); AccountId? _accountId; - Session? _session; + Session? session; ContactArguments? arguments; EmailAddress? contactSelected; @@ -65,17 +63,14 @@ class ContactController extends BaseController { textInputSearchFocus.requestFocus(); if (arguments != null) { _accountId = arguments!.accountId; - _session = arguments!.session; - if (_session != null) { - userProfile.value = UserProfile(_session!.username.value); - } + session = arguments!.session; final listContactSelected = arguments!.listContactSelected; log('ContactController::onReady(): arguments: $arguments'); log('ContactController::onReady(): listContactSelected: $listContactSelected'); if (listContactSelected.isNotEmpty) { contactSelected = EmailAddress(listContactSelected.first, listContactSelected.first); } - injectAutoCompleteBindings(_session, _accountId); + injectAutoCompleteBindings(session, _accountId); } if (PlatformInfo.isMobile) { Future.delayed( diff --git a/lib/features/contact/presentation/contact_view.dart b/lib/features/contact/presentation/contact_view.dart index 632917dc5..2818c5b9a 100644 --- a/lib/features/contact/presentation/contact_view.dart +++ b/lib/features/contact/presentation/contact_view.dart @@ -80,9 +80,10 @@ class ContactView extends GetWidget { ), if (PlatformInfo.isWeb) Obx(() { - final userEmail = controller.userProfile.value?.email; - if (userEmail != null && userEmail.isNotEmpty) { - final userEmailAddress = EmailAddress(AppLocalizations.of(context).me, controller.userProfile.value?.email); + if (controller.session?.username.value.isNotEmpty == true) { + final userEmailAddress = EmailAddress( + AppLocalizations.of(context).me, + controller.session?.username.value); final fromMeSuggestionEmailAddress = SuggestionEmailAddress(userEmailAddress, state: SuggestionEmailState.valid); return Padding( padding: const EdgeInsets.symmetric(horizontal: 4), diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 5c65219be..18cb841f6 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -1193,8 +1193,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin { void _handleSendReceiptToSenderAction(BuildContext context) { final accountId = mailboxDashBoardController.accountId.value; - final userProfile = mailboxDashBoardController.userProfile.value; - if (accountId == null || userProfile == null) { + final session = mailboxDashBoardController.sessionCurrent; + if (accountId == null || session == null) { return; } @@ -1219,7 +1219,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin { return; } - final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? userProfile.email; + final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? session.username.value; log('SingleEmailController::_handleSendReceiptToSenderAction():receiverEmailAddress: $receiverEmailAddress'); final mdnToSender = _generateMDN(context, currentEmail!, receiverEmailAddress); final sendReceiptRequest = SendReceiptToSenderRequest( diff --git a/lib/features/identity_creator/presentation/identity_creator_controller.dart b/lib/features/identity_creator/presentation/identity_creator_controller.dart index 302ac7837..a76fd9364 100644 --- a/lib/features/identity_creator/presentation/identity_creator_controller.dart +++ b/lib/features/identity_creator/presentation/identity_creator_controller.dart @@ -23,7 +23,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:model/extensions/email_address_extension.dart'; import 'package:model/extensions/identity_extension.dart'; import 'package:model/extensions/session_extension.dart'; -import 'package:model/user/user_profile.dart'; import 'package:path_provider/path_provider.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; @@ -81,7 +80,6 @@ class IdentityCreatorController extends BaseController { String? _contentHtmlEditor; AccountId? accountId; Session? session; - UserProfile? userProfile; Identity? identity; IdentityCreatorArguments? arguments; @@ -123,7 +121,6 @@ class IdentityCreatorController extends BaseController { if (arguments != null) { accountId = arguments!.accountId; session = arguments!.session; - userProfile = arguments!.userProfile; identity = arguments!.identity; actionType.value = arguments!.actionType; _checkDefaultIdentityIsSupported(); @@ -214,8 +211,8 @@ class IdentityCreatorController extends BaseController { void _setDefaultEmailAddressList() { listEmailAddressOfReplyTo.add(noneEmailAddress); - if (userProfile != null && userProfile?.email.isNotEmpty == true) { - final userEmailAddress = EmailAddress(null, userProfile!.email); + if (session?.username.value.isNotEmpty == true) { + final userEmailAddress = EmailAddress(null, session?.username.value); listEmailAddressDefault.add(userEmailAddress); listEmailAddressOfReplyTo.addAll(listEmailAddressDefault); } diff --git a/lib/features/identity_creator/presentation/model/identity_creator_arguments.dart b/lib/features/identity_creator/presentation/model/identity_creator_arguments.dart index 0259f2b44..16245588f 100644 --- a/lib/features/identity_creator/presentation/model/identity_creator_arguments.dart +++ b/lib/features/identity_creator/presentation/model/identity_creator_arguments.dart @@ -3,20 +3,17 @@ import 'package:equatable/equatable.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/identities/identity.dart'; -import 'package:model/model.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart'; class IdentityCreatorArguments with EquatableMixin { final AccountId accountId; final Session session; - final UserProfile userProfile; final IdentityActionType actionType; final Identity? identity; IdentityCreatorArguments( this.accountId, this.session, - this.userProfile, { this.identity, this.actionType = IdentityActionType.create @@ -27,7 +24,6 @@ class IdentityCreatorArguments with EquatableMixin { List get props => [ accountId, session, - userProfile, - identity, + identity, actionType]; } \ No newline at end of file diff --git a/lib/features/login/data/datasource/authentication_datasource.dart b/lib/features/login/data/datasource/authentication_datasource.dart index a7f775ee7..b574c2764 100644 --- a/lib/features/login/data/datasource/authentication_datasource.dart +++ b/lib/features/login/data/datasource/authentication_datasource.dart @@ -1,7 +1,6 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:model/account/password.dart'; -import 'package:model/user/user_profile.dart'; abstract class AuthenticationDataSource { - Future authenticationUser(Uri baseUrl, UserName userName, Password password); + Future authenticationUser(Uri baseUrl, UserName userName, Password password); } \ No newline at end of file diff --git a/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart b/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart index 781563a41..7691cc091 100644 --- a/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart +++ b/lib/features/login/data/datasource_impl/authentication_datasource_impl.dart @@ -1,16 +1,18 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:model/account/password.dart'; -import 'package:model/user/user_profile.dart'; import 'package:tmail_ui_user/features/login/data/datasource/authentication_datasource.dart'; +import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart'; class AuthenticationDataSourceImpl extends AuthenticationDataSource { - AuthenticationDataSourceImpl(); + final ExceptionThrower _exceptionThrower; + + AuthenticationDataSourceImpl(this._exceptionThrower); @override - Future authenticationUser(Uri baseUrl, UserName userName, Password password) { - return Future.sync(() { - return UserProfile(userName.value); - }); + Future authenticationUser(Uri baseUrl, UserName userName, Password password) async { + return Future.sync(() async { + return userName; + }).catchError(_exceptionThrower.throwException); } } \ No newline at end of file diff --git a/lib/features/login/data/repository/authentication_repository_impl.dart b/lib/features/login/data/repository/authentication_repository_impl.dart index ea2e77e4c..410a8d7a4 100644 --- a/lib/features/login/data/repository/authentication_repository_impl.dart +++ b/lib/features/login/data/repository/authentication_repository_impl.dart @@ -1,6 +1,5 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:model/account/password.dart'; -import 'package:model/user/user_profile.dart'; import 'package:tmail_ui_user/features/login/data/datasource/authentication_datasource.dart'; import 'package:tmail_ui_user/features/login/domain/repository/authentication_repository.dart'; @@ -10,7 +9,7 @@ class AuthenticationRepositoryImpl extends AuthenticationRepository { AuthenticationRepositoryImpl(this.loginDataSource); @override - Future authenticationUser(Uri baseUrl, UserName userName, Password password) { + Future authenticationUser(Uri baseUrl, UserName userName, Password password) { return loginDataSource.authenticationUser(baseUrl, userName, password); } } \ No newline at end of file diff --git a/lib/features/login/domain/repository/authentication_repository.dart b/lib/features/login/domain/repository/authentication_repository.dart index 03aa122db..189f29c3e 100644 --- a/lib/features/login/domain/repository/authentication_repository.dart +++ b/lib/features/login/domain/repository/authentication_repository.dart @@ -1,8 +1,7 @@ import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:model/account/password.dart'; -import 'package:model/user/user_profile.dart'; abstract class AuthenticationRepository { - Future authenticationUser(Uri baseUrl, UserName userName, Password password); + Future authenticationUser(Uri baseUrl, UserName userName, Password password); } \ No newline at end of file diff --git a/lib/features/login/domain/state/authentication_user_state.dart b/lib/features/login/domain/state/authentication_user_state.dart index bf9fc8365..611e806a6 100644 --- a/lib/features/login/domain/state/authentication_user_state.dart +++ b/lib/features/login/domain/state/authentication_user_state.dart @@ -1,16 +1,16 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; -import 'package:model/user/user_profile.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; class AuthenticationUserLoading extends LoadingState {} class AuthenticationUserSuccess extends UIState { - final UserProfile userProfile; + final UserName userName; - AuthenticationUserSuccess(this.userProfile); + AuthenticationUserSuccess(this.userName); @override - List get props => [userProfile]; + List get props => [userName]; } class AuthenticationUserFailure extends FeatureFailure { diff --git a/lib/features/login/domain/usecases/authentication_user_interactor.dart b/lib/features/login/domain/usecases/authentication_user_interactor.dart index ba1f4f827..c60c80252 100644 --- a/lib/features/login/domain/usecases/authentication_user_interactor.dart +++ b/lib/features/login/domain/usecases/authentication_user_interactor.dart @@ -29,24 +29,24 @@ class AuthenticationInteractor { }) async* { try { yield Right(AuthenticationUserLoading()); - final user = await authenticationRepository.authenticationUser(baseUrl, userName, password); + final username = await authenticationRepository.authenticationUser(baseUrl, userName, password); await Future.wait([ credentialRepository.saveBaseUrl(baseUrl), credentialRepository.storeAuthenticationInfo( AuthenticationInfoCache( - userName.value, + username.value, password.value ) ), ]); await _accountRepository.setCurrentAccount( PersonalAccount( - userName.value, + username.value, AuthenticationType.basic, isSelected: true ) ); - yield Right(AuthenticationUserSuccess(user)); + yield Right(AuthenticationUserSuccess(username)); } catch (e) { yield Left(AuthenticationUserFailure(e)); } diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index 069ebf410..d660d8d1f 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -167,7 +167,7 @@ class MailboxView extends BaseMailboxView { return const SizedBox.shrink(); } return UserInformationWidget( - userProfile: controller.mailboxDashBoardController.userProfile.value, + userName: controller.mailboxDashBoardController.sessionCurrent?.username, subtitle: AppLocalizations.of(context).manage_account, onSubtitleClick: controller.mailboxDashBoardController.goToSettings, border: const Border( diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index 19b3f23ed..07e490094 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -103,7 +103,7 @@ class MailboxView extends BaseMailboxView { child: Column(children: [ if (!controller.responsiveUtils.isDesktop(context)) Obx(() => UserInformationWidget( - userProfile: controller.mailboxDashBoardController.userProfile.value, + userName: controller.mailboxDashBoardController.sessionCurrent?.username, subtitle: AppLocalizations.of(context).manage_account, onSubtitleClick: controller.mailboxDashBoardController.goToSettings, border: const Border( diff --git a/lib/features/mailbox/presentation/widgets/user_information_widget.dart b/lib/features/mailbox/presentation/widgets/user_information_widget.dart index a4a6140cd..45d7122ec 100644 --- a/lib/features/mailbox/presentation/widgets/user_information_widget.dart +++ b/lib/features/mailbox/presentation/widgets/user_information_widget.dart @@ -4,14 +4,17 @@ import 'package:core/presentation/views/image/avatar_builder.dart'; import 'package:core/presentation/views/text/text_overflow_builder.dart'; import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; -import 'package:model/user/user_profile.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:get/get.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; +import 'package:model/extensions/username_extension.dart'; import 'package:tmail_ui_user/features/base/widget/material_text_button.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; typedef OnSubtitleClick = void Function(); class UserInformationWidget extends StatelessWidget { - final UserProfile? userProfile; + final UserName? userName; final String? subtitle; final EdgeInsetsGeometry? titlePadding; final OnSubtitleClick? onSubtitleClick; @@ -20,7 +23,7 @@ class UserInformationWidget extends StatelessWidget { const UserInformationWidget({ Key? key, - this.userProfile, + this.userName, this.subtitle, this.titlePadding, this.onSubtitleClick, @@ -35,7 +38,7 @@ class UserInformationWidget extends StatelessWidget { decoration: BoxDecoration(border: border), child: Row(children: [ (AvatarBuilder() - ..text(userProfile != null ? userProfile!.getAvatarText() : '') + ..text(userName?.firstCharacter ?? '') ..backgroundColor(Colors.white) ..textColor(Colors.black) ..addBoxShadows([const BoxShadow( @@ -48,7 +51,7 @@ class UserInformationWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ TextOverflowBuilder( - userProfile != null ? '${userProfile?.email}' : '', + userName?.value ?? '', style: const TextStyle( fontSize: 17, color: AppColor.colorNameEmail, diff --git a/lib/features/mailbox_dashboard/domain/state/get_user_profile_state.dart b/lib/features/mailbox_dashboard/domain/state/get_user_profile_state.dart deleted file mode 100644 index 0598dd21c..000000000 --- a/lib/features/mailbox_dashboard/domain/state/get_user_profile_state.dart +++ /dev/null @@ -1,17 +0,0 @@ -import 'package:core/presentation/state/failure.dart'; -import 'package:core/presentation/state/success.dart'; -import 'package:model/user/user_profile.dart'; - -class GetUserProfileSuccess extends UIState { - final UserProfile userProfile; - - GetUserProfileSuccess(this.userProfile); - - @override - List get props => []; -} - -class GetUserProfileFailure extends FeatureFailure { - - GetUserProfileFailure(dynamic exception) : super(exception: exception); -} \ No newline at end of file diff --git a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart index 4314ec2e2..2a56ca648 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart @@ -199,7 +199,6 @@ class MailboxDashBoardController extends ReloadableController { final selectedMailbox = Rxn(); final selectedEmail = Rxn(); final accountId = Rxn(); - final userProfile = Rxn(); final dashBoardAction = Rxn(); final mailboxUIAction = Rxn(); final emailUIAction = Rxn(); @@ -514,7 +513,6 @@ class MailboxDashBoardController extends ReloadableController { final currentAccountId = session.personalAccount.accountId; sessionCurrent = session; accountId.value = currentAccountId; - userProfile.value = UserProfile(session.username.value); injectAutoCompleteBindings(session, currentAccountId); injectRuleFilterBindings(session, currentAccountId); @@ -1447,13 +1445,12 @@ class MailboxDashBoardController extends ReloadableController { } void selectQuickSearchFilter(QuickSearchFilter filter) { - return searchController.selectQuickSearchFilter(filter, userProfile.value!); + return searchController.selectQuickSearchFilter(filter); } void selectQuickSearchFilterFrom(EmailAddress fromEmailFilter) { return searchController.selectQuickSearchFilter( QuickSearchFilter.fromMe, - userProfile.value!, fromEmailFilter: fromEmailFilter ); } @@ -1463,11 +1460,10 @@ class MailboxDashBoardController extends ReloadableController { } Future> quickSearchEmails(String query) async { - if (sessionCurrent != null && accountId.value != null && userProfile.value != null) { + if (sessionCurrent != null && accountId.value != null) { return searchController.quickSearchEmails( session: sessionCurrent!, accountId: accountId.value!, - userProfile: userProfile.value!, query: query ); } else { diff --git a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart index ea55dd620..c725cda47 100644 --- a/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart +++ b/lib/features/mailbox_dashboard/presentation/controller/search_controller.dart @@ -9,6 +9,7 @@ import 'package:jmap_dart_client/jmap/core/filter/filter.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:jmap_dart_client/jmap/core/sort/comparator.dart'; import 'package:jmap_dart_client/jmap/core/unsigned_int.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:jmap_dart_client/jmap/core/utc_date.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_address.dart'; import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart'; @@ -17,7 +18,6 @@ import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart'; import 'package:model/email/presentation_email.dart'; import 'package:model/extensions/email_filter_condition_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; -import 'package:model/user/user_profile.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart'; @@ -73,10 +73,9 @@ class SearchController extends BaseController with DateRangePickerMixin { void selectQuickSearchFilter( QuickSearchFilter quickSearchFilter, - UserProfile userProfile, {EmailAddress? fromEmailFilter} ) { - final isFilterSelected = quickSearchFilter.isSelected(searchEmailFilter.value, userProfile); + final isFilterSelected = quickSearchFilter.isSelected(searchEmailFilter.value); switch (quickSearchFilter) { case QuickSearchFilter.hasAttachment: @@ -110,7 +109,6 @@ class SearchController extends BaseController with DateRangePickerMixin { required Session session, required AccountId accountId, required String query, - required UserProfile userProfile, }) async { return await _quickSearchEmailInteractor.execute( session, @@ -119,7 +117,7 @@ class SearchController extends BaseController with DateRangePickerMixin { sort: {}..add( EmailComparator(EmailComparatorProperty.receivedAt) ..setIsAscending(false)), - filter: _mappingToFilterOnSuggestionForm(userProfile: userProfile, query: query), + filter: _mappingToFilterOnSuggestionForm(userName: session.username, query: query), properties: ThreadConstants.propertiesQuickSearch ).then((result) => result.fold( (failure) => [], @@ -129,7 +127,7 @@ class SearchController extends BaseController with DateRangePickerMixin { )); } - Filter? _mappingToFilterOnSuggestionForm({required String query, required UserProfile userProfile}) { + Filter? _mappingToFilterOnSuggestionForm({required String query, required UserName userName}) { log('SearchController::_mappingToFilterOnSuggestionForm():query: $query'); final filterCondition = EmailFilterCondition( text: query.isNotEmpty == true ? query : null, @@ -143,7 +141,7 @@ class SearchController extends BaseController with DateRangePickerMixin { ? true : null, from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe) - ? userProfile.email + ? userName.value : null ); @@ -152,7 +150,7 @@ class SearchController extends BaseController with DateRangePickerMixin { : null; } - void applyFilterSuggestionToSearchFilter(UserProfile? userProfile) { + void applyFilterSuggestionToSearchFilter(UserName? userName) { final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days) ? EmailReceiveTimeType.last7Days : EmailReceiveTimeType.allTime; @@ -160,11 +158,11 @@ class SearchController extends BaseController with DateRangePickerMixin { final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false; var listFromAddress = searchEmailFilter.value.from; - if (userProfile != null) { + if (userName != null) { if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) { - listFromAddress.add(userProfile.email); + listFromAddress.add(userName.value); } else { - listFromAddress.remove(userProfile.email); + listFromAddress.remove(userName.value); } } diff --git a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart index 31c5a86a0..1386e7dc1 100644 --- a/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart +++ b/lib/features/mailbox_dashboard/presentation/mailbox_dashboard_view_web.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_portal/flutter_portal.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; +import 'package:model/extensions/username_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/widget/popup_item_no_icon_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_view_web.dart'; @@ -339,13 +340,13 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { : const SizedBox.shrink(), const SizedBox(width: 24), Obx(() => (AvatarBuilder() - ..text(controller.userProfile.value?.getAvatarText() ?? '') + ..text(controller.sessionCurrent?.username.firstCharacter ?? '') ..backgroundColor(Colors.white) ..textColor(Colors.black) ..context(context) ..addOnTapAvatarActionWithPositionClick((position) => controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context, - controller.userProfile.value, + controller.sessionCurrent?.username, onLogoutAction: () { popBack(); controller.logout(controller.sessionCurrent, controller.accountId.value); @@ -598,7 +599,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { return Obx(() { final isFilterSelected = filter.isSelected( controller.searchController.searchEmailFilter.value, - controller.userProfile.value ); return Padding( @@ -776,7 +776,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView { String _getQuickSearchFilterFromTitle(BuildContext context) { final searchEmailFilterFromFiled = controller.searchController.searchEmailFilter.value.from; if (searchEmailFilterFromFiled.length == 1) { - if (searchEmailFilterFromFiled.first == controller.userProfile.value?.email) { + if (searchEmailFilterFromFiled.first == controller.sessionCurrent?.username.value && + controller.sessionCurrent?.username.value.isNotEmpty == true) { return QuickSearchFilter.fromMe.getTitle(context); } else { return '${AppLocalizations.of(context).from_email_address_prefix} ${searchEmailFilterFromFiled.first}'; diff --git a/lib/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart b/lib/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart index f0f25871c..363859e19 100644 --- a/lib/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart +++ b/lib/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart @@ -1,8 +1,10 @@ -import 'package:core/core.dart'; +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:core/presentation/resources/image_paths.dart'; +import 'package:core/presentation/views/popup_menu/popup_menu_item_widget.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:model/model.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; mixin UserSettingPopupMenuMixin { @@ -10,18 +12,33 @@ mixin UserSettingPopupMenuMixin { List popupMenuUserSettingActionTile( BuildContext context, - UserProfile? userProfile, + UserName? userName, { Function? onLogoutAction, Function? onSettingAction } ) { return [ - PopupMenuItem( - enabled: false, - padding: EdgeInsets.zero, - child: _userInformation(context, userProfile) - ), + if (userName != null) + PopupMenuItem( + enabled: false, + padding: EdgeInsets.zero, + child: SizedBox( + width: 300, + child: ListTile( + contentPadding: const EdgeInsets.symmetric(horizontal: 20), + title: Text( + userName.value, + maxLines: 1, + style: const TextStyle( + fontSize: 15, + color: AppColor.colorHintSearchBar, + fontWeight: FontWeight.normal + ) + ) + ), + ) + ), if (onSettingAction != null) ...[ const PopupMenuDivider(height: 0.5), @@ -42,21 +59,6 @@ mixin UserSettingPopupMenuMixin { ]; } - Widget _userInformation(BuildContext context, UserProfile? userProfile) { - if (userProfile != null) { - return SizedBox( - width: 300, - child: ListTile( - contentPadding: const EdgeInsets.symmetric(horizontal: 20), - title: Text(userProfile.email, maxLines: 1, style: const TextStyle( - fontSize: 15, - color: AppColor.colorHintSearchBar, - fontWeight: FontWeight.normal))), - ); - } - return const SizedBox.shrink(); - } - Widget _settingAction(BuildContext context, Function? onCallBack) { return PopupMenuItemWidget( _imagePaths.icSetting, diff --git a/lib/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart b/lib/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart index 3b1e078ca..2dc8a9e9f 100644 --- a/lib/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart +++ b/lib/features/mailbox_dashboard/presentation/model/search/quick_search_filter.dart @@ -2,7 +2,6 @@ import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/resources/image_paths.dart'; import 'package:flutter/cupertino.dart'; -import 'package:model/user/user_profile.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_receive_time_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/email_sort_order_type.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart'; @@ -89,7 +88,7 @@ enum QuickSearchFilter { bool isApplied(List listFilter) => listFilter.contains(this); - bool isSelected(SearchEmailFilter filter, UserProfile? userProfile) { + bool isSelected(SearchEmailFilter filter) { switch (this) { case QuickSearchFilter.hasAttachment: return filter.hasAttachment == true; diff --git a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart index 2df963c8a..d8463069d 100644 --- a/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart +++ b/lib/features/mailbox_dashboard/presentation/widgets/search_input_form_widget.dart @@ -125,7 +125,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { } if (query.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) { - _searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.userProfile.value); + _searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username); _dashBoardController.searchEmail(context, queryString: query); } else { _dashBoardController.clearSearchEmail(); @@ -146,7 +146,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin { _searchController.searchFocus.unfocus(); _searchController.enableSearch(); - _searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.userProfile.value); + _searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username); _dashBoardController.searchEmail(context, queryString: recent.value); } diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index 405b08749..2c7a77ca8 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -16,7 +16,6 @@ import 'package:server_settings/server_settings/capability_server_settings.dart' import 'package:tmail_ui_user/features/base/action/ui_action.dart'; import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart'; import 'package:tmail_ui_user/features/base/state/banner_state.dart'; -import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_user_profile_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart'; @@ -46,7 +45,6 @@ class ManageAccountDashBoardController extends ReloadableController { UpdateVacationInteractor? _updateVacationInteractor; final appInformation = Rxn(); - final userProfile = Rxn(); final accountId = Rxn(); final accountMenuItemSelected = AccountMenuItem.profiles.obs; final settingsPageLevel = SettingsPageLevel.universal.obs; @@ -74,9 +72,7 @@ class ManageAccountDashBoardController extends ReloadableController { @override void handleSuccessViewState(Success success) { - if (success is GetUserProfileSuccess) { - userProfile.value = success.userProfile; - } else if (success is GetAllVacationSuccess) { + if (success is GetAllVacationSuccess) { if (success.listVacationResponse.isNotEmpty) { vacationResponse.value = success.listVacationResponse.first; } @@ -92,7 +88,6 @@ class ManageAccountDashBoardController extends ReloadableController { log('ManageAccountDashBoardController::handleReloaded:'); sessionCurrent = session; accountId.value = session.personalAccount.accountId; - _getUserProfile(); _bindingInteractorForMenuItemView(sessionCurrent, accountId.value); _getVacationResponse(); _getParametersRouter(); @@ -104,7 +99,6 @@ class ManageAccountDashBoardController extends ReloadableController { sessionCurrent = arguments.session; accountId.value = arguments.session?.personalAccount.accountId; previousUri = arguments.previousUri; - _getUserProfile(); _bindingInteractorForMenuItemView(sessionCurrent, accountId.value); _getVacationResponse(); if (arguments.menuSettingCurrent != null) { @@ -163,11 +157,6 @@ class ManageAccountDashBoardController extends ReloadableController { appInformation.value = info; } - void _getUserProfile() async { - log('ManageAccountDashBoardController::_getUserProfile(): $sessionCurrent'); - userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; - } - void _getVacationResponse() { if (accountId.value != null && _getAllVacationInteractor != null) { consumeState(_getAllVacationInteractor!.execute(accountId.value!)); diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart index 1cd383a8a..1190fd097 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart @@ -7,6 +7,7 @@ import 'package:core/presentation/views/text/slogan_builder.dart'; import 'package:core/utils/platform_info.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:model/model.dart'; import 'package:tmail_ui_user/features/base/state/banner_state.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_view.dart'; @@ -139,7 +140,7 @@ class ManageAccountDashBoardView extends GetWidget (AvatarBuilder() - ..text(controller.userProfile.value?.getAvatarText() ?? '') + ..text(controller.sessionCurrent?.username.firstCharacter ?? '') ..backgroundColor(Colors.white) ..textColor(Colors.black) ..context(context) @@ -149,7 +150,7 @@ class ManageAccountDashBoardView extends GetWidget { controller: PlatformInfo.isMobile ? null : controller.settingScrollController, child: Column(children: [ Obx(() => UserInformationWidget( - userProfile: controller.manageAccountDashboardController.userProfile.value, + userName: controller.manageAccountDashboardController.sessionCurrent?.username, padding: SettingsUtils.getPaddingInFirstLevel(context, controller.responsiveUtils), titlePadding: const EdgeInsetsDirectional.only(start: 16))), Divider( 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 34beda441..e7abe242d 100644 --- a/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart +++ b/lib/features/manage_account/presentation/profiles/identities/identities_controller.dart @@ -142,10 +142,9 @@ class IdentitiesController extends BaseController { void goToCreateNewIdentity(BuildContext context) async { final accountId = _accountDashBoardController.accountId.value; - final userProfile = _accountDashBoardController.userProfile.value; final session = _accountDashBoardController.sessionCurrent; - if (accountId != null && session != null && userProfile != null) { - final arguments = IdentityCreatorArguments(accountId, session, userProfile); + if (accountId != null && session != null) { + final arguments = IdentityCreatorArguments(accountId, session); final newIdentityArguments = PlatformInfo.isWeb ? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments) @@ -249,13 +248,11 @@ class IdentitiesController extends BaseController { void goToEditIdentity(BuildContext context, Identity identity) async { final accountId = _accountDashBoardController.accountId.value; - final userProfile = _accountDashBoardController.userProfile.value; final session = _accountDashBoardController.sessionCurrent; - if (accountId != null && session != null && userProfile != null) { + if (accountId != null && session != null) { final arguments = IdentityCreatorArguments( accountId, session, - userProfile, identity: identity, actionType: IdentityActionType.edit); diff --git a/lib/features/search/email/presentation/search_email_controller.dart b/lib/features/search/email/presentation/search_email_controller.dart index 03f58018e..c0465e517 100644 --- a/lib/features/search/email/presentation/search_email_controller.dart +++ b/lib/features/search/email/presentation/search_email_controller.dart @@ -24,7 +24,6 @@ import 'package:model/extensions/presentation_email_extension.dart'; import 'package:model/extensions/presentation_mailbox_extension.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/select_mode.dart'; -import 'package:model/user/user_profile.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.dart'; import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart'; @@ -112,8 +111,6 @@ class SearchEmailController extends BaseController Session? get session => mailboxDashBoardController.sessionCurrent; - UserProfile? get userProfile => mailboxDashBoardController.userProfile.value; - SearchQuery? get searchQuery => simpleSearchFilter.value.text; RxList get listResultSearch => mailboxDashBoardController.listResultSearch; diff --git a/lib/main/bindings/credential/credential_bindings.dart b/lib/main/bindings/credential/credential_bindings.dart index f2b7699b1..82abf014d 100644 --- a/lib/main/bindings/credential/credential_bindings.dart +++ b/lib/main/bindings/credential/credential_bindings.dart @@ -71,7 +71,7 @@ class CredentialBindings extends InteractorsBindings { Get.find(), Get.find()) ); - Get.put(AuthenticationDataSourceImpl()); + Get.put(AuthenticationDataSourceImpl(Get.find())); Get.put(AuthenticationOIDCDataSourceImpl( Get.find(), Get.find(), diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index ff1b9d64f..fedc72313 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -3944,4 +3944,22 @@ class AppLocalizations { name: 'loadingPleaseWait', ); } + + String get status { + return Intl.message( + 'Status', + name: 'status'); + } + + String get progress { + return Intl.message( + 'Progress', + name: 'progress'); + } + + String get sendingMessage { + return Intl.message( + 'Sending message', + name: 'sendingMessage'); + } } \ No newline at end of file diff --git a/model/lib/extensions/user_profile_extension.dart b/model/lib/extensions/user_profile_extension.dart deleted file mode 100644 index b9f332d1a..000000000 --- a/model/lib/extensions/user_profile_extension.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:model/model.dart'; - -extension UserProfileExtension on UserProfile { - UserProfileResponse toUserProfileResponse() { - return UserProfileResponse(email); - } -} \ No newline at end of file diff --git a/model/lib/extensions/username_extension.dart b/model/lib/extensions/username_extension.dart new file mode 100644 index 000000000..66005a6b4 --- /dev/null +++ b/model/lib/extensions/username_extension.dart @@ -0,0 +1,7 @@ + +import 'package:core/presentation/extensions/string_extension.dart'; +import 'package:jmap_dart_client/jmap/core/user_name.dart'; + +extension UsernameExtension on UserName { + String get firstCharacter => value.firstLetterToUpperCase.toUpperCase(); +} \ No newline at end of file diff --git a/model/lib/model.dart b/model/lib/model.dart index 760cccb81..2835ec4df 100644 --- a/model/lib/model.dart +++ b/model/lib/model.dart @@ -57,7 +57,7 @@ export 'extensions/presentation_email_extension.dart'; export 'extensions/presentation_mailbox_extension.dart'; export 'extensions/properties_extension.dart'; export 'extensions/session_extension.dart'; -export 'extensions/user_profile_extension.dart'; +export 'extensions/username_extension.dart'; export 'extensions/utc_date_extension.dart'; // Identity export 'identity/identity_request_dto.dart'; @@ -79,7 +79,4 @@ export 'oidc/token_id.dart'; export 'oidc/token_oidc.dart'; // Upload export 'upload/file_info.dart'; -export 'upload/upload_response.dart'; -// User -export 'user/user_profile.dart'; -export 'user/user_profile_response.dart'; \ No newline at end of file +export 'upload/upload_response.dart'; \ No newline at end of file diff --git a/model/lib/user/avatar_id.dart b/model/lib/user/avatar_id.dart deleted file mode 100644 index 2710f8aa8..000000000 --- a/model/lib/user/avatar_id.dart +++ /dev/null @@ -1,15 +0,0 @@ - -import 'package:equatable/equatable.dart'; - -class AvatarId with EquatableMixin { - final String id; - - AvatarId(this.id); - - factory AvatarId.initial() { - return AvatarId(''); - } - - @override - List get props => [id]; -} \ No newline at end of file diff --git a/model/lib/user/user_profile.dart b/model/lib/user/user_profile.dart deleted file mode 100644 index 80609cd21..000000000 --- a/model/lib/user/user_profile.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:equatable/equatable.dart'; - -class UserProfile with EquatableMixin { - - final String email; - - UserProfile(this.email); - - String getAvatarText() { - return email[0].toUpperCase(); - } - - @override - List get props => [email]; -} \ No newline at end of file diff --git a/model/lib/user/user_profile_response.dart b/model/lib/user/user_profile_response.dart deleted file mode 100644 index 10f4842cb..000000000 --- a/model/lib/user/user_profile_response.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:equatable/equatable.dart'; -import 'package:json_annotation/json_annotation.dart'; -import 'package:model/model.dart'; - -part 'user_profile_response.g.dart'; - -@JsonSerializable() -class UserProfileResponse with EquatableMixin { - - final String email; - - UserProfileResponse(this.email); - - factory UserProfileResponse.fromJson(Map json) => _$UserProfileResponseFromJson(json); - - Map toJson() => _$UserProfileResponseToJson(this); - - @override - List get props => [email]; -} - -extension UserProfileResponseExtension on UserProfileResponse { - UserProfile toUserProfile() { - return UserProfile(email); - } -} \ No newline at end of file