TF-2667 Use Username replace UserProfile
This commit is contained in:
@@ -19,6 +19,7 @@ import 'package:get/get.dart';
|
|||||||
import 'package:html_editor_enhanced/html_editor.dart' as web_html_editor;
|
import 'package:html_editor_enhanced/html_editor.dart' as web_html_editor;
|
||||||
import 'package:http_parser/http_parser.dart';
|
import 'package:http_parser/http_parser.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/user_name.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.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||||
@@ -368,13 +369,13 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void _listenBrowserEventAction() {
|
void _listenBrowserTabRefresh() {
|
||||||
log('ComposerController::_listenBrowserEventAction:');
|
_subscriptionOnBeforeUnload = html.window.onBeforeUnload.listen((event) async {
|
||||||
_subscriptionOnBeforeUnload = html.window.onBeforeUnload.listen((event) async {
|
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
|
||||||
_removeComposerCacheOnWebInteractor.execute();
|
_removeComposerCacheOnWebInteractor.execute();
|
||||||
if (userProfile != null) {
|
if (mailboxDashBoardController.sessionCurrent != null) {
|
||||||
final draftEmail = await _generateEmail(currentContext!, userProfile);
|
final draftEmail = await _generateEmail(
|
||||||
|
currentContext!,
|
||||||
|
mailboxDashBoardController.sessionCurrent!.username);
|
||||||
_saveComposerCacheOnWebInteractor.execute(draftEmail);
|
_saveComposerCacheOnWebInteractor.execute(draftEmail);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -624,17 +625,17 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
emailActionType: actionType,
|
emailActionType: actionType,
|
||||||
mailboxRole: mailboxRole
|
mailboxRole: mailboxRole
|
||||||
);
|
);
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
final userName = mailboxDashBoardController.sessionCurrent?.username;
|
||||||
if (userProfile != null) {
|
if (userName != null) {
|
||||||
final isSender = presentationEmail.from.asList().every((element) => element.email == userProfile.email);
|
final isSender = presentationEmail.from.asList().every((element) => element.email == userName.value);
|
||||||
if (isSender) {
|
if (isSender) {
|
||||||
listToEmailAddress = List.from(recipients.value1.toSet());
|
listToEmailAddress = List.from(recipients.value1.toSet());
|
||||||
listCcEmailAddress = List.from(recipients.value2.toSet());
|
listCcEmailAddress = List.from(recipients.value2.toSet());
|
||||||
listBccEmailAddress = List.from(recipients.value3.toSet());
|
listBccEmailAddress = List.from(recipients.value3.toSet());
|
||||||
} else {
|
} else {
|
||||||
listToEmailAddress = List.from(recipients.value1.toSet().filterEmailAddress(userProfile.email));
|
listToEmailAddress = List.from(recipients.value1.toSet().filterEmailAddress(userName.value));
|
||||||
listCcEmailAddress = List.from(recipients.value2.toSet().filterEmailAddress(userProfile.email));
|
listCcEmailAddress = List.from(recipients.value2.toSet().filterEmailAddress(userName.value));
|
||||||
listBccEmailAddress = List.from(recipients.value3.toSet().filterEmailAddress(userProfile.email));
|
listBccEmailAddress = List.from(recipients.value3.toSet().filterEmailAddress(userName.value));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
listToEmailAddress = List.from(recipients.value1.toSet());
|
listToEmailAddress = List.from(recipients.value1.toSet());
|
||||||
@@ -692,7 +693,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
|
|
||||||
Future<Email> _generateEmail(
|
Future<Email> _generateEmail(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
UserProfile userProfile,
|
UserName userName,
|
||||||
{
|
{
|
||||||
bool asDrafts = false,
|
bool asDrafts = false,
|
||||||
MailboxId? draftMailboxId,
|
MailboxId? draftMailboxId,
|
||||||
@@ -700,7 +701,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
ComposerArguments? arguments,
|
ComposerArguments? arguments,
|
||||||
}
|
}
|
||||||
) async {
|
) async {
|
||||||
Set<EmailAddress> listFromEmailAddress = {EmailAddress(null, userProfile.email)};
|
Set<EmailAddress> listFromEmailAddress = {EmailAddress(null, userName.value)};
|
||||||
if (identitySelected.value?.email?.isNotEmpty == true) {
|
if (identitySelected.value?.email?.isNotEmpty == true) {
|
||||||
listFromEmailAddress = {
|
listFromEmailAddress = {
|
||||||
EmailAddress(
|
EmailAddress(
|
||||||
@@ -709,7 +710,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
)
|
)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
Set<EmailAddress> listReplyToEmailAddress = {EmailAddress(null, userProfile.email)};
|
Set<EmailAddress> listReplyToEmailAddress = {EmailAddress(null, userName.value)};
|
||||||
if (identitySelected.value?.replyTo?.isNotEmpty == true) {
|
if (identitySelected.value?.replyTo?.isNotEmpty == true) {
|
||||||
listReplyToEmailAddress = identitySelected.value!.replyTo!;
|
listReplyToEmailAddress = identitySelected.value!.replyTo!;
|
||||||
}
|
}
|
||||||
@@ -925,7 +926,6 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
|
|
||||||
bool get _isParamUserNull {
|
bool get _isParamUserNull {
|
||||||
if (composerArguments.value == null ||
|
if (composerArguments.value == null ||
|
||||||
mailboxDashBoardController.userProfile.value == null ||
|
|
||||||
mailboxDashBoardController.sessionCurrent == null ||
|
mailboxDashBoardController.sessionCurrent == null ||
|
||||||
mailboxDashBoardController.accountId.value == null
|
mailboxDashBoardController.accountId.value == null
|
||||||
) {
|
) {
|
||||||
@@ -942,19 +942,18 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final sendingArgs = await _createSendingEmailArguments(context);
|
final sendingArgs = await createSendingEmailArguments(context);
|
||||||
_closeComposerAction(result: sendingArgs);
|
_closeComposerAction(result: sendingArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<SendingEmailArguments> _createSendingEmailArguments(BuildContext context) async {
|
Future<SendingEmailArguments> createSendingEmailArguments(BuildContext context) async {
|
||||||
final session = mailboxDashBoardController.sessionCurrent!;
|
final session = mailboxDashBoardController.sessionCurrent!;
|
||||||
final arguments = composerArguments.value!;
|
final arguments = composerArguments.value!;
|
||||||
final accountId = mailboxDashBoardController.accountId.value!;
|
final accountId = mailboxDashBoardController.accountId.value!;
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value!;
|
|
||||||
|
|
||||||
final createdEmail = await _generateEmail(
|
final createdEmail = await _generateEmail(
|
||||||
context,
|
context,
|
||||||
userProfile,
|
session.username,
|
||||||
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.id,
|
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.id,
|
||||||
arguments: arguments
|
arguments: arguments
|
||||||
);
|
);
|
||||||
@@ -1187,14 +1186,12 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
Future<SaveToDraftArguments?> _generateSaveAsDraftsArguments(BuildContext context) async {
|
Future<SaveToDraftArguments?> _generateSaveAsDraftsArguments(BuildContext context) async {
|
||||||
log('ComposerController::_generateSaveAsDraftsArguments:');
|
log('ComposerController::_generateSaveAsDraftsArguments:');
|
||||||
final arguments = composerArguments.value;
|
final arguments = composerArguments.value;
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final session = mailboxDashBoardController.sessionCurrent;
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
final draftMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts];
|
final draftMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts];
|
||||||
|
|
||||||
if (arguments == null ||
|
if (arguments == null ||
|
||||||
draftMailboxId == null ||
|
draftMailboxId == null ||
|
||||||
userProfile == null ||
|
|
||||||
session == null ||
|
session == null ||
|
||||||
accountId == null
|
accountId == null
|
||||||
) {
|
) {
|
||||||
@@ -1204,7 +1201,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
if (_emailIdEditing != null && _emailIdEditing != arguments.presentationEmail?.id) {
|
if (_emailIdEditing != null && _emailIdEditing != arguments.presentationEmail?.id) {
|
||||||
final newEmail = await _generateEmail(
|
final newEmail = await _generateEmail(
|
||||||
context,
|
context,
|
||||||
userProfile,
|
session.username,
|
||||||
asDrafts: true,
|
asDrafts: true,
|
||||||
draftMailboxId: draftMailboxId,
|
draftMailboxId: draftMailboxId,
|
||||||
arguments: arguments,
|
arguments: arguments,
|
||||||
@@ -1226,7 +1223,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
if (isChanged && context.mounted) {
|
if (isChanged && context.mounted) {
|
||||||
final newEmail = await _generateEmail(
|
final newEmail = await _generateEmail(
|
||||||
context,
|
context,
|
||||||
userProfile,
|
session.username,
|
||||||
asDrafts: true,
|
asDrafts: true,
|
||||||
draftMailboxId: draftMailboxId,
|
draftMailboxId: draftMailboxId,
|
||||||
arguments: arguments,
|
arguments: arguments,
|
||||||
@@ -1253,19 +1250,18 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
|
|
||||||
_saveToDraftButtonState = ButtonState.disabled;
|
_saveToDraftButtonState = ButtonState.disabled;
|
||||||
|
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final session = mailboxDashBoardController.sessionCurrent;
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
final draftMailboxId = mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts];
|
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');
|
log('ComposerController::saveToDraftAction: Param is NULL');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final newEmail = await _generateEmail(
|
final newEmail = await _generateEmail(
|
||||||
context,
|
context,
|
||||||
userProfile,
|
session.username,
|
||||||
asDrafts: true,
|
asDrafts: true,
|
||||||
draftMailboxId: draftMailboxId,
|
draftMailboxId: draftMailboxId,
|
||||||
arguments: mailboxDashBoardController.composerArguments);
|
arguments: mailboxDashBoardController.composerArguments);
|
||||||
@@ -1383,7 +1379,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
if (arguments.emailActionType == EmailActionType.editDraft) {
|
if (arguments.emailActionType == EmailActionType.editDraft) {
|
||||||
return arguments.presentationEmail?.firstEmailAddressInFrom ?? '';
|
return arguments.presentationEmail?.firstEmailAddressInFrom ?? '';
|
||||||
} else {
|
} else {
|
||||||
return mailboxDashBoardController.userProfile.value?.email ?? '';
|
return mailboxDashBoardController.sessionCurrent?.username.value ?? '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return '';
|
return '';
|
||||||
@@ -1912,8 +1908,6 @@ class ComposerController extends BaseController with DragDropFileMixin {
|
|||||||
|
|
||||||
bool get isNetworkConnectionAvailable => networkConnectionController.isNetworkConnectionAvailable();
|
bool get isNetworkConnectionAvailable => networkConnectionController.isNetworkConnectionAvailable();
|
||||||
|
|
||||||
UserProfile? get userProfile => mailboxDashBoardController.userProfile.value;
|
|
||||||
|
|
||||||
String? get textEditorWeb => _textEditorWeb;
|
String? get textEditorWeb => _textEditorWeb;
|
||||||
|
|
||||||
HtmlEditorApi? get htmlEditorApi => richTextMobileTabletController.htmlEditorApi;
|
HtmlEditorApi? get htmlEditorApi => richTextMobileTabletController.htmlEditorApi;
|
||||||
|
|||||||
@@ -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/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.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';
|
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
|
||||||
|
|
||||||
class SaveToDraftViewEvent extends ViewEvent {
|
class SaveToDraftViewEvent extends ViewEvent {
|
||||||
final BuildContext context;
|
final BuildContext context;
|
||||||
final Session session;
|
final Session session;
|
||||||
final AccountId accountId;
|
final AccountId accountId;
|
||||||
final UserProfile userProfile;
|
|
||||||
final MailboxId draftMailboxId;
|
final MailboxId draftMailboxId;
|
||||||
final EmailId? emailIdEditing;
|
final EmailId? emailIdEditing;
|
||||||
final ComposerArguments? arguments;
|
final ComposerArguments? arguments;
|
||||||
@@ -20,7 +18,6 @@ class SaveToDraftViewEvent extends ViewEvent {
|
|||||||
required this.context,
|
required this.context,
|
||||||
required this.session,
|
required this.session,
|
||||||
required this.accountId,
|
required this.accountId,
|
||||||
required this.userProfile,
|
|
||||||
required this.draftMailboxId,
|
required this.draftMailboxId,
|
||||||
this.emailIdEditing,
|
this.emailIdEditing,
|
||||||
this.arguments,
|
this.arguments,
|
||||||
@@ -31,7 +28,6 @@ class SaveToDraftViewEvent extends ViewEvent {
|
|||||||
context,
|
context,
|
||||||
session,
|
session,
|
||||||
accountId,
|
accountId,
|
||||||
userProfile,
|
|
||||||
draftMailboxId,
|
draftMailboxId,
|
||||||
emailIdEditing,
|
emailIdEditing,
|
||||||
arguments,
|
arguments,
|
||||||
|
|||||||
@@ -2,21 +2,20 @@
|
|||||||
import 'package:core/presentation/utils/keyboard_utils.dart';
|
import 'package:core/presentation/utils/keyboard_utils.dart';
|
||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
|
import 'package:debounce_throttle/debounce_throttle.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
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/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.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/autocomplete/auto_complete_pattern.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: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/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/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_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/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_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/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/model/contact_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/contact/presentation/widgets/contact_suggestion_box_item.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 searchQuery = SearchQuery.initial().obs;
|
||||||
final listContactSearched = RxList<EmailAddress>();
|
final listContactSearched = RxList<EmailAddress>();
|
||||||
final scrollListViewController = ScrollController();
|
final scrollListViewController = ScrollController();
|
||||||
final userProfile = Rxn<UserProfile>();
|
|
||||||
|
|
||||||
GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor;
|
GetAllAutoCompleteInteractor? _getAllAutoCompleteInteractor;
|
||||||
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
|
GetAutoCompleteInteractor? _getAutoCompleteInteractor;
|
||||||
@@ -40,7 +38,7 @@ class ContactController extends BaseController {
|
|||||||
|
|
||||||
final Debouncer<String> _deBouncerTime = Debouncer<String>(const Duration(milliseconds: 300), initialValue: '');
|
final Debouncer<String> _deBouncerTime = Debouncer<String>(const Duration(milliseconds: 300), initialValue: '');
|
||||||
AccountId? _accountId;
|
AccountId? _accountId;
|
||||||
Session? _session;
|
Session? session;
|
||||||
|
|
||||||
ContactArguments? arguments;
|
ContactArguments? arguments;
|
||||||
EmailAddress? contactSelected;
|
EmailAddress? contactSelected;
|
||||||
@@ -65,17 +63,14 @@ class ContactController extends BaseController {
|
|||||||
textInputSearchFocus.requestFocus();
|
textInputSearchFocus.requestFocus();
|
||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
_accountId = arguments!.accountId;
|
_accountId = arguments!.accountId;
|
||||||
_session = arguments!.session;
|
session = arguments!.session;
|
||||||
if (_session != null) {
|
|
||||||
userProfile.value = UserProfile(_session!.username.value);
|
|
||||||
}
|
|
||||||
final listContactSelected = arguments!.listContactSelected;
|
final listContactSelected = arguments!.listContactSelected;
|
||||||
log('ContactController::onReady(): arguments: $arguments');
|
log('ContactController::onReady(): arguments: $arguments');
|
||||||
log('ContactController::onReady(): listContactSelected: $listContactSelected');
|
log('ContactController::onReady(): listContactSelected: $listContactSelected');
|
||||||
if (listContactSelected.isNotEmpty) {
|
if (listContactSelected.isNotEmpty) {
|
||||||
contactSelected = EmailAddress(listContactSelected.first, listContactSelected.first);
|
contactSelected = EmailAddress(listContactSelected.first, listContactSelected.first);
|
||||||
}
|
}
|
||||||
injectAutoCompleteBindings(_session, _accountId);
|
injectAutoCompleteBindings(session, _accountId);
|
||||||
}
|
}
|
||||||
if (PlatformInfo.isMobile) {
|
if (PlatformInfo.isMobile) {
|
||||||
Future.delayed(
|
Future.delayed(
|
||||||
|
|||||||
@@ -80,9 +80,10 @@ class ContactView extends GetWidget<ContactController> {
|
|||||||
),
|
),
|
||||||
if (PlatformInfo.isWeb)
|
if (PlatformInfo.isWeb)
|
||||||
Obx(() {
|
Obx(() {
|
||||||
final userEmail = controller.userProfile.value?.email;
|
if (controller.session?.username.value.isNotEmpty == true) {
|
||||||
if (userEmail != null && userEmail.isNotEmpty) {
|
final userEmailAddress = EmailAddress(
|
||||||
final userEmailAddress = EmailAddress(AppLocalizations.of(context).me, controller.userProfile.value?.email);
|
AppLocalizations.of(context).me,
|
||||||
|
controller.session?.username.value);
|
||||||
final fromMeSuggestionEmailAddress = SuggestionEmailAddress(userEmailAddress, state: SuggestionEmailState.valid);
|
final fromMeSuggestionEmailAddress = SuggestionEmailAddress(userEmailAddress, state: SuggestionEmailState.valid);
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||||
|
|||||||
@@ -1193,8 +1193,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
|
|
||||||
void _handleSendReceiptToSenderAction(BuildContext context) {
|
void _handleSendReceiptToSenderAction(BuildContext context) {
|
||||||
final accountId = mailboxDashBoardController.accountId.value;
|
final accountId = mailboxDashBoardController.accountId.value;
|
||||||
final userProfile = mailboxDashBoardController.userProfile.value;
|
final session = mailboxDashBoardController.sessionCurrent;
|
||||||
if (accountId == null || userProfile == null) {
|
if (accountId == null || session == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1219,7 +1219,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? userProfile.email;
|
final receiverEmailAddress = _getReceiverEmailAddress(currentEmail!) ?? session.username.value;
|
||||||
log('SingleEmailController::_handleSendReceiptToSenderAction():receiverEmailAddress: $receiverEmailAddress');
|
log('SingleEmailController::_handleSendReceiptToSenderAction():receiverEmailAddress: $receiverEmailAddress');
|
||||||
final mdnToSender = _generateMDN(context, currentEmail!, receiverEmailAddress);
|
final mdnToSender = _generateMDN(context, currentEmail!, receiverEmailAddress);
|
||||||
final sendReceiptRequest = SendReceiptToSenderRequest(
|
final sendReceiptRequest = SendReceiptToSenderRequest(
|
||||||
|
|||||||
@@ -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/email_address_extension.dart';
|
||||||
import 'package:model/extensions/identity_extension.dart';
|
import 'package:model/extensions/identity_extension.dart';
|
||||||
import 'package:model/extensions/session_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:path_provider/path_provider.dart';
|
||||||
import 'package:rich_text_composer/rich_text_composer.dart';
|
import 'package:rich_text_composer/rich_text_composer.dart';
|
||||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||||
@@ -81,7 +80,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
String? _contentHtmlEditor;
|
String? _contentHtmlEditor;
|
||||||
AccountId? accountId;
|
AccountId? accountId;
|
||||||
Session? session;
|
Session? session;
|
||||||
UserProfile? userProfile;
|
|
||||||
Identity? identity;
|
Identity? identity;
|
||||||
IdentityCreatorArguments? arguments;
|
IdentityCreatorArguments? arguments;
|
||||||
|
|
||||||
@@ -123,7 +121,6 @@ class IdentityCreatorController extends BaseController {
|
|||||||
if (arguments != null) {
|
if (arguments != null) {
|
||||||
accountId = arguments!.accountId;
|
accountId = arguments!.accountId;
|
||||||
session = arguments!.session;
|
session = arguments!.session;
|
||||||
userProfile = arguments!.userProfile;
|
|
||||||
identity = arguments!.identity;
|
identity = arguments!.identity;
|
||||||
actionType.value = arguments!.actionType;
|
actionType.value = arguments!.actionType;
|
||||||
_checkDefaultIdentityIsSupported();
|
_checkDefaultIdentityIsSupported();
|
||||||
@@ -214,8 +211,8 @@ class IdentityCreatorController extends BaseController {
|
|||||||
void _setDefaultEmailAddressList() {
|
void _setDefaultEmailAddressList() {
|
||||||
listEmailAddressOfReplyTo.add(noneEmailAddress);
|
listEmailAddressOfReplyTo.add(noneEmailAddress);
|
||||||
|
|
||||||
if (userProfile != null && userProfile?.email.isNotEmpty == true) {
|
if (session?.username.value.isNotEmpty == true) {
|
||||||
final userEmailAddress = EmailAddress(null, userProfile!.email);
|
final userEmailAddress = EmailAddress(null, session?.username.value);
|
||||||
listEmailAddressDefault.add(userEmailAddress);
|
listEmailAddressDefault.add(userEmailAddress);
|
||||||
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
|
listEmailAddressOfReplyTo.addAll(listEmailAddressDefault);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,20 +3,17 @@ import 'package:equatable/equatable.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/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/identities/identity.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';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/identity_action_type.dart';
|
||||||
|
|
||||||
class IdentityCreatorArguments with EquatableMixin {
|
class IdentityCreatorArguments with EquatableMixin {
|
||||||
final AccountId accountId;
|
final AccountId accountId;
|
||||||
final Session session;
|
final Session session;
|
||||||
final UserProfile userProfile;
|
|
||||||
final IdentityActionType actionType;
|
final IdentityActionType actionType;
|
||||||
final Identity? identity;
|
final Identity? identity;
|
||||||
|
|
||||||
IdentityCreatorArguments(
|
IdentityCreatorArguments(
|
||||||
this.accountId,
|
this.accountId,
|
||||||
this.session,
|
this.session,
|
||||||
this.userProfile,
|
|
||||||
{
|
{
|
||||||
this.identity,
|
this.identity,
|
||||||
this.actionType = IdentityActionType.create
|
this.actionType = IdentityActionType.create
|
||||||
@@ -27,7 +24,6 @@ class IdentityCreatorArguments with EquatableMixin {
|
|||||||
List<Object?> get props => [
|
List<Object?> get props => [
|
||||||
accountId,
|
accountId,
|
||||||
session,
|
session,
|
||||||
userProfile,
|
|
||||||
identity,
|
identity,
|
||||||
actionType];
|
actionType];
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:model/account/password.dart';
|
import 'package:model/account/password.dart';
|
||||||
import 'package:model/user/user_profile.dart';
|
|
||||||
|
|
||||||
abstract class AuthenticationDataSource {
|
abstract class AuthenticationDataSource {
|
||||||
Future<UserProfile> authenticationUser(Uri baseUrl, UserName userName, Password password);
|
Future<UserName> authenticationUser(Uri baseUrl, UserName userName, Password password);
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,18 @@
|
|||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:model/account/password.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/data/datasource/authentication_datasource.dart';
|
||||||
|
import 'package:tmail_ui_user/main/exceptions/exception_thrower.dart';
|
||||||
|
|
||||||
class AuthenticationDataSourceImpl extends AuthenticationDataSource {
|
class AuthenticationDataSourceImpl extends AuthenticationDataSource {
|
||||||
|
|
||||||
AuthenticationDataSourceImpl();
|
final ExceptionThrower _exceptionThrower;
|
||||||
|
|
||||||
|
AuthenticationDataSourceImpl(this._exceptionThrower);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<UserProfile> authenticationUser(Uri baseUrl, UserName userName, Password password) {
|
Future<UserName> authenticationUser(Uri baseUrl, UserName userName, Password password) async {
|
||||||
return Future.sync(() {
|
return Future.sync(() async {
|
||||||
return UserProfile(userName.value);
|
return userName;
|
||||||
});
|
}).catchError(_exceptionThrower.throwException);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:model/account/password.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/data/datasource/authentication_datasource.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/repository/authentication_repository.dart';
|
import 'package:tmail_ui_user/features/login/domain/repository/authentication_repository.dart';
|
||||||
|
|
||||||
@@ -10,7 +9,7 @@ class AuthenticationRepositoryImpl extends AuthenticationRepository {
|
|||||||
AuthenticationRepositoryImpl(this.loginDataSource);
|
AuthenticationRepositoryImpl(this.loginDataSource);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<UserProfile> authenticationUser(Uri baseUrl, UserName userName, Password password) {
|
Future<UserName> authenticationUser(Uri baseUrl, UserName userName, Password password) {
|
||||||
return loginDataSource.authenticationUser(baseUrl, userName, password);
|
return loginDataSource.authenticationUser(baseUrl, userName, password);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,7 @@
|
|||||||
|
|
||||||
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
import 'package:jmap_dart_client/jmap/core/user_name.dart';
|
||||||
import 'package:model/account/password.dart';
|
import 'package:model/account/password.dart';
|
||||||
import 'package:model/user/user_profile.dart';
|
|
||||||
|
|
||||||
abstract class AuthenticationRepository {
|
abstract class AuthenticationRepository {
|
||||||
Future<UserProfile> authenticationUser(Uri baseUrl, UserName userName, Password password);
|
Future<UserName> authenticationUser(Uri baseUrl, UserName userName, Password password);
|
||||||
}
|
}
|
||||||
@@ -1,16 +1,16 @@
|
|||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.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 AuthenticationUserLoading extends LoadingState {}
|
||||||
|
|
||||||
class AuthenticationUserSuccess extends UIState {
|
class AuthenticationUserSuccess extends UIState {
|
||||||
final UserProfile userProfile;
|
final UserName userName;
|
||||||
|
|
||||||
AuthenticationUserSuccess(this.userProfile);
|
AuthenticationUserSuccess(this.userName);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object> get props => [userProfile];
|
List<Object> get props => [userName];
|
||||||
}
|
}
|
||||||
|
|
||||||
class AuthenticationUserFailure extends FeatureFailure {
|
class AuthenticationUserFailure extends FeatureFailure {
|
||||||
|
|||||||
@@ -29,24 +29,24 @@ class AuthenticationInteractor {
|
|||||||
}) async* {
|
}) async* {
|
||||||
try {
|
try {
|
||||||
yield Right(AuthenticationUserLoading());
|
yield Right(AuthenticationUserLoading());
|
||||||
final user = await authenticationRepository.authenticationUser(baseUrl, userName, password);
|
final username = await authenticationRepository.authenticationUser(baseUrl, userName, password);
|
||||||
await Future.wait([
|
await Future.wait([
|
||||||
credentialRepository.saveBaseUrl(baseUrl),
|
credentialRepository.saveBaseUrl(baseUrl),
|
||||||
credentialRepository.storeAuthenticationInfo(
|
credentialRepository.storeAuthenticationInfo(
|
||||||
AuthenticationInfoCache(
|
AuthenticationInfoCache(
|
||||||
userName.value,
|
username.value,
|
||||||
password.value
|
password.value
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
await _accountRepository.setCurrentAccount(
|
await _accountRepository.setCurrentAccount(
|
||||||
PersonalAccount(
|
PersonalAccount(
|
||||||
userName.value,
|
username.value,
|
||||||
AuthenticationType.basic,
|
AuthenticationType.basic,
|
||||||
isSelected: true
|
isSelected: true
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
yield Right(AuthenticationUserSuccess(user));
|
yield Right(AuthenticationUserSuccess(username));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
yield Left(AuthenticationUserFailure(e));
|
yield Left(AuthenticationUserFailure(e));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -167,7 +167,7 @@ class MailboxView extends BaseMailboxView {
|
|||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
}
|
}
|
||||||
return UserInformationWidget(
|
return UserInformationWidget(
|
||||||
userProfile: controller.mailboxDashBoardController.userProfile.value,
|
userName: controller.mailboxDashBoardController.sessionCurrent?.username,
|
||||||
subtitle: AppLocalizations.of(context).manage_account,
|
subtitle: AppLocalizations.of(context).manage_account,
|
||||||
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
||||||
border: const Border(
|
border: const Border(
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ class MailboxView extends BaseMailboxView {
|
|||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
if (!controller.responsiveUtils.isDesktop(context))
|
if (!controller.responsiveUtils.isDesktop(context))
|
||||||
Obx(() => UserInformationWidget(
|
Obx(() => UserInformationWidget(
|
||||||
userProfile: controller.mailboxDashBoardController.userProfile.value,
|
userName: controller.mailboxDashBoardController.sessionCurrent?.username,
|
||||||
subtitle: AppLocalizations.of(context).manage_account,
|
subtitle: AppLocalizations.of(context).manage_account,
|
||||||
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
onSubtitleClick: controller.mailboxDashBoardController.goToSettings,
|
||||||
border: const Border(
|
border: const Border(
|
||||||
|
|||||||
@@ -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/presentation/views/text/text_overflow_builder.dart';
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/material.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/features/base/widget/material_text_button.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
typedef OnSubtitleClick = void Function();
|
typedef OnSubtitleClick = void Function();
|
||||||
|
|
||||||
class UserInformationWidget extends StatelessWidget {
|
class UserInformationWidget extends StatelessWidget {
|
||||||
final UserProfile? userProfile;
|
final UserName? userName;
|
||||||
final String? subtitle;
|
final String? subtitle;
|
||||||
final EdgeInsetsGeometry? titlePadding;
|
final EdgeInsetsGeometry? titlePadding;
|
||||||
final OnSubtitleClick? onSubtitleClick;
|
final OnSubtitleClick? onSubtitleClick;
|
||||||
@@ -20,7 +23,7 @@ class UserInformationWidget extends StatelessWidget {
|
|||||||
|
|
||||||
const UserInformationWidget({
|
const UserInformationWidget({
|
||||||
Key? key,
|
Key? key,
|
||||||
this.userProfile,
|
this.userName,
|
||||||
this.subtitle,
|
this.subtitle,
|
||||||
this.titlePadding,
|
this.titlePadding,
|
||||||
this.onSubtitleClick,
|
this.onSubtitleClick,
|
||||||
@@ -35,7 +38,7 @@ class UserInformationWidget extends StatelessWidget {
|
|||||||
decoration: BoxDecoration(border: border),
|
decoration: BoxDecoration(border: border),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
(AvatarBuilder()
|
(AvatarBuilder()
|
||||||
..text(userProfile != null ? userProfile!.getAvatarText() : '')
|
..text(userName?.firstCharacter ?? '')
|
||||||
..backgroundColor(Colors.white)
|
..backgroundColor(Colors.white)
|
||||||
..textColor(Colors.black)
|
..textColor(Colors.black)
|
||||||
..addBoxShadows([const BoxShadow(
|
..addBoxShadows([const BoxShadow(
|
||||||
@@ -48,7 +51,7 @@ class UserInformationWidget extends StatelessWidget {
|
|||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
children: [
|
children: [
|
||||||
TextOverflowBuilder(
|
TextOverflowBuilder(
|
||||||
userProfile != null ? '${userProfile?.email}' : '',
|
userName?.value ?? '',
|
||||||
style: const TextStyle(
|
style: const TextStyle(
|
||||||
fontSize: 17,
|
fontSize: 17,
|
||||||
color: AppColor.colorNameEmail,
|
color: AppColor.colorNameEmail,
|
||||||
|
|||||||
@@ -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<Object> get props => [];
|
|
||||||
}
|
|
||||||
|
|
||||||
class GetUserProfileFailure extends FeatureFailure {
|
|
||||||
|
|
||||||
GetUserProfileFailure(dynamic exception) : super(exception: exception);
|
|
||||||
}
|
|
||||||
+2
-6
@@ -199,7 +199,6 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final selectedMailbox = Rxn<PresentationMailbox>();
|
final selectedMailbox = Rxn<PresentationMailbox>();
|
||||||
final selectedEmail = Rxn<PresentationEmail>();
|
final selectedEmail = Rxn<PresentationEmail>();
|
||||||
final accountId = Rxn<AccountId>();
|
final accountId = Rxn<AccountId>();
|
||||||
final userProfile = Rxn<UserProfile>();
|
|
||||||
final dashBoardAction = Rxn<UIAction>();
|
final dashBoardAction = Rxn<UIAction>();
|
||||||
final mailboxUIAction = Rxn<MailboxUIAction>();
|
final mailboxUIAction = Rxn<MailboxUIAction>();
|
||||||
final emailUIAction = Rxn<EmailUIAction>();
|
final emailUIAction = Rxn<EmailUIAction>();
|
||||||
@@ -514,7 +513,6 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
final currentAccountId = session.personalAccount.accountId;
|
final currentAccountId = session.personalAccount.accountId;
|
||||||
sessionCurrent = session;
|
sessionCurrent = session;
|
||||||
accountId.value = currentAccountId;
|
accountId.value = currentAccountId;
|
||||||
userProfile.value = UserProfile(session.username.value);
|
|
||||||
|
|
||||||
injectAutoCompleteBindings(session, currentAccountId);
|
injectAutoCompleteBindings(session, currentAccountId);
|
||||||
injectRuleFilterBindings(session, currentAccountId);
|
injectRuleFilterBindings(session, currentAccountId);
|
||||||
@@ -1447,13 +1445,12 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void selectQuickSearchFilter(QuickSearchFilter filter) {
|
void selectQuickSearchFilter(QuickSearchFilter filter) {
|
||||||
return searchController.selectQuickSearchFilter(filter, userProfile.value!);
|
return searchController.selectQuickSearchFilter(filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectQuickSearchFilterFrom(EmailAddress fromEmailFilter) {
|
void selectQuickSearchFilterFrom(EmailAddress fromEmailFilter) {
|
||||||
return searchController.selectQuickSearchFilter(
|
return searchController.selectQuickSearchFilter(
|
||||||
QuickSearchFilter.fromMe,
|
QuickSearchFilter.fromMe,
|
||||||
userProfile.value!,
|
|
||||||
fromEmailFilter: fromEmailFilter
|
fromEmailFilter: fromEmailFilter
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1463,11 +1460,10 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<List<PresentationEmail>> quickSearchEmails(String query) async {
|
Future<List<PresentationEmail>> quickSearchEmails(String query) async {
|
||||||
if (sessionCurrent != null && accountId.value != null && userProfile.value != null) {
|
if (sessionCurrent != null && accountId.value != null) {
|
||||||
return searchController.quickSearchEmails(
|
return searchController.quickSearchEmails(
|
||||||
session: sessionCurrent!,
|
session: sessionCurrent!,
|
||||||
accountId: accountId.value!,
|
accountId: accountId.value!,
|
||||||
userProfile: userProfile.value!,
|
|
||||||
query: query
|
query: query
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -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/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/sort/comparator.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/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/core/utc_date.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:jmap_dart_client/jmap/mail/email/email_comparator.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/email/presentation_email.dart';
|
||||||
import 'package:model/extensions/email_filter_condition_extension.dart';
|
import 'package:model/extensions/email_filter_condition_extension.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.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/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.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';
|
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(
|
void selectQuickSearchFilter(
|
||||||
QuickSearchFilter quickSearchFilter,
|
QuickSearchFilter quickSearchFilter,
|
||||||
UserProfile userProfile,
|
|
||||||
{EmailAddress? fromEmailFilter}
|
{EmailAddress? fromEmailFilter}
|
||||||
) {
|
) {
|
||||||
final isFilterSelected = quickSearchFilter.isSelected(searchEmailFilter.value, userProfile);
|
final isFilterSelected = quickSearchFilter.isSelected(searchEmailFilter.value);
|
||||||
|
|
||||||
switch (quickSearchFilter) {
|
switch (quickSearchFilter) {
|
||||||
case QuickSearchFilter.hasAttachment:
|
case QuickSearchFilter.hasAttachment:
|
||||||
@@ -110,7 +109,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
required Session session,
|
required Session session,
|
||||||
required AccountId accountId,
|
required AccountId accountId,
|
||||||
required String query,
|
required String query,
|
||||||
required UserProfile userProfile,
|
|
||||||
}) async {
|
}) async {
|
||||||
return await _quickSearchEmailInteractor.execute(
|
return await _quickSearchEmailInteractor.execute(
|
||||||
session,
|
session,
|
||||||
@@ -119,7 +117,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
sort: <Comparator>{}..add(
|
sort: <Comparator>{}..add(
|
||||||
EmailComparator(EmailComparatorProperty.receivedAt)
|
EmailComparator(EmailComparatorProperty.receivedAt)
|
||||||
..setIsAscending(false)),
|
..setIsAscending(false)),
|
||||||
filter: _mappingToFilterOnSuggestionForm(userProfile: userProfile, query: query),
|
filter: _mappingToFilterOnSuggestionForm(userName: session.username, query: query),
|
||||||
properties: ThreadConstants.propertiesQuickSearch
|
properties: ThreadConstants.propertiesQuickSearch
|
||||||
).then((result) => result.fold(
|
).then((result) => result.fold(
|
||||||
(failure) => <PresentationEmail>[],
|
(failure) => <PresentationEmail>[],
|
||||||
@@ -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');
|
log('SearchController::_mappingToFilterOnSuggestionForm():query: $query');
|
||||||
final filterCondition = EmailFilterCondition(
|
final filterCondition = EmailFilterCondition(
|
||||||
text: query.isNotEmpty == true ? query : null,
|
text: query.isNotEmpty == true ? query : null,
|
||||||
@@ -143,7 +141,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
? true
|
? true
|
||||||
: null,
|
: null,
|
||||||
from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)
|
from: listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)
|
||||||
? userProfile.email
|
? userName.value
|
||||||
: null
|
: null
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -152,7 +150,7 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
: null;
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void applyFilterSuggestionToSearchFilter(UserProfile? userProfile) {
|
void applyFilterSuggestionToSearchFilter(UserName? userName) {
|
||||||
final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days)
|
final receiveTime = listFilterOnSuggestionForm.contains(QuickSearchFilter.last7Days)
|
||||||
? EmailReceiveTimeType.last7Days
|
? EmailReceiveTimeType.last7Days
|
||||||
: EmailReceiveTimeType.allTime;
|
: EmailReceiveTimeType.allTime;
|
||||||
@@ -160,11 +158,11 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false;
|
final hasAttachment = listFilterOnSuggestionForm.contains(QuickSearchFilter.hasAttachment) ? true : false;
|
||||||
|
|
||||||
var listFromAddress = searchEmailFilter.value.from;
|
var listFromAddress = searchEmailFilter.value.from;
|
||||||
if (userProfile != null) {
|
if (userName != null) {
|
||||||
if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
|
if (listFilterOnSuggestionForm.contains(QuickSearchFilter.fromMe)) {
|
||||||
listFromAddress.add(userProfile.email);
|
listFromAddress.add(userName.value);
|
||||||
} else {
|
} else {
|
||||||
listFromAddress.remove(userProfile.email);
|
listFromAddress.remove(userName.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:flutter_portal/flutter_portal.dart';
|
import 'package:flutter_portal/flutter_portal.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:model/extensions/username_extension.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.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/base/widget/popup_item_no_icon_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/composer_view_web.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.shrink(),
|
||||||
const SizedBox(width: 24),
|
const SizedBox(width: 24),
|
||||||
Obx(() => (AvatarBuilder()
|
Obx(() => (AvatarBuilder()
|
||||||
..text(controller.userProfile.value?.getAvatarText() ?? '')
|
..text(controller.sessionCurrent?.username.firstCharacter ?? '')
|
||||||
..backgroundColor(Colors.white)
|
..backgroundColor(Colors.white)
|
||||||
..textColor(Colors.black)
|
..textColor(Colors.black)
|
||||||
..context(context)
|
..context(context)
|
||||||
..addOnTapAvatarActionWithPositionClick((position) =>
|
..addOnTapAvatarActionWithPositionClick((position) =>
|
||||||
controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context,
|
controller.openPopupMenuAction(context, position, popupMenuUserSettingActionTile(context,
|
||||||
controller.userProfile.value,
|
controller.sessionCurrent?.username,
|
||||||
onLogoutAction: () {
|
onLogoutAction: () {
|
||||||
popBack();
|
popBack();
|
||||||
controller.logout(controller.sessionCurrent, controller.accountId.value);
|
controller.logout(controller.sessionCurrent, controller.accountId.value);
|
||||||
@@ -598,7 +599,6 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
return Obx(() {
|
return Obx(() {
|
||||||
final isFilterSelected = filter.isSelected(
|
final isFilterSelected = filter.isSelected(
|
||||||
controller.searchController.searchEmailFilter.value,
|
controller.searchController.searchEmailFilter.value,
|
||||||
controller.userProfile.value
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return Padding(
|
return Padding(
|
||||||
@@ -776,7 +776,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
String _getQuickSearchFilterFromTitle(BuildContext context) {
|
String _getQuickSearchFilterFromTitle(BuildContext context) {
|
||||||
final searchEmailFilterFromFiled = controller.searchController.searchEmailFilter.value.from;
|
final searchEmailFilterFromFiled = controller.searchController.searchEmailFilter.value.from;
|
||||||
if (searchEmailFilterFromFiled.length == 1) {
|
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);
|
return QuickSearchFilter.fromMe.getTitle(context);
|
||||||
} else {
|
} else {
|
||||||
return '${AppLocalizations.of(context).from_email_address_prefix} ${searchEmailFilterFromFiled.first}';
|
return '${AppLocalizations.of(context).from_email_address_prefix} ${searchEmailFilterFromFiled.first}';
|
||||||
|
|||||||
+25
-23
@@ -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:flutter/material.dart';
|
||||||
import 'package:get/get.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';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
mixin UserSettingPopupMenuMixin {
|
mixin UserSettingPopupMenuMixin {
|
||||||
@@ -10,18 +12,33 @@ mixin UserSettingPopupMenuMixin {
|
|||||||
|
|
||||||
List<PopupMenuEntry> popupMenuUserSettingActionTile(
|
List<PopupMenuEntry> popupMenuUserSettingActionTile(
|
||||||
BuildContext context,
|
BuildContext context,
|
||||||
UserProfile? userProfile,
|
UserName? userName,
|
||||||
{
|
{
|
||||||
Function? onLogoutAction,
|
Function? onLogoutAction,
|
||||||
Function? onSettingAction
|
Function? onSettingAction
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
return [
|
return [
|
||||||
PopupMenuItem(
|
if (userName != null)
|
||||||
enabled: false,
|
PopupMenuItem(
|
||||||
padding: EdgeInsets.zero,
|
enabled: false,
|
||||||
child: _userInformation(context, userProfile)
|
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)
|
if (onSettingAction != null)
|
||||||
...[
|
...[
|
||||||
const PopupMenuDivider(height: 0.5),
|
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) {
|
Widget _settingAction(BuildContext context, Function? onCallBack) {
|
||||||
return PopupMenuItemWidget(
|
return PopupMenuItemWidget(
|
||||||
_imagePaths.icSetting,
|
_imagePaths.icSetting,
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
import 'package:core/presentation/extensions/color_extension.dart';
|
||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:flutter/cupertino.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_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/email_sort_order_type.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.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<QuickSearchFilter> listFilter) => listFilter.contains(this);
|
bool isApplied(List<QuickSearchFilter> listFilter) => listFilter.contains(this);
|
||||||
|
|
||||||
bool isSelected(SearchEmailFilter filter, UserProfile? userProfile) {
|
bool isSelected(SearchEmailFilter filter) {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case QuickSearchFilter.hasAttachment:
|
case QuickSearchFilter.hasAttachment:
|
||||||
return filter.hasAttachment == true;
|
return filter.hasAttachment == true;
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (query.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
if (query.isNotEmpty || _searchController.listFilterOnSuggestionForm.isNotEmpty) {
|
||||||
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.userProfile.value);
|
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username);
|
||||||
_dashBoardController.searchEmail(context, queryString: query);
|
_dashBoardController.searchEmail(context, queryString: query);
|
||||||
} else {
|
} else {
|
||||||
_dashBoardController.clearSearchEmail();
|
_dashBoardController.clearSearchEmail();
|
||||||
@@ -146,7 +146,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
|
|||||||
_searchController.searchFocus.unfocus();
|
_searchController.searchFocus.unfocus();
|
||||||
_searchController.enableSearch();
|
_searchController.enableSearch();
|
||||||
|
|
||||||
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.userProfile.value);
|
_searchController.applyFilterSuggestionToSearchFilter(_dashBoardController.sessionCurrent?.username);
|
||||||
_dashBoardController.searchEmail(context, queryString: recent.value);
|
_dashBoardController.searchEmail(context, queryString: recent.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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/action/ui_action.dart';
|
||||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.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/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/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/state/update_vacation_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.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;
|
UpdateVacationInteractor? _updateVacationInteractor;
|
||||||
|
|
||||||
final appInformation = Rxn<PackageInfo>();
|
final appInformation = Rxn<PackageInfo>();
|
||||||
final userProfile = Rxn<UserProfile>();
|
|
||||||
final accountId = Rxn<AccountId>();
|
final accountId = Rxn<AccountId>();
|
||||||
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
|
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
|
||||||
final settingsPageLevel = SettingsPageLevel.universal.obs;
|
final settingsPageLevel = SettingsPageLevel.universal.obs;
|
||||||
@@ -74,9 +72,7 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void handleSuccessViewState(Success success) {
|
void handleSuccessViewState(Success success) {
|
||||||
if (success is GetUserProfileSuccess) {
|
if (success is GetAllVacationSuccess) {
|
||||||
userProfile.value = success.userProfile;
|
|
||||||
} else if (success is GetAllVacationSuccess) {
|
|
||||||
if (success.listVacationResponse.isNotEmpty) {
|
if (success.listVacationResponse.isNotEmpty) {
|
||||||
vacationResponse.value = success.listVacationResponse.first;
|
vacationResponse.value = success.listVacationResponse.first;
|
||||||
}
|
}
|
||||||
@@ -92,7 +88,6 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
log('ManageAccountDashBoardController::handleReloaded:');
|
log('ManageAccountDashBoardController::handleReloaded:');
|
||||||
sessionCurrent = session;
|
sessionCurrent = session;
|
||||||
accountId.value = session.personalAccount.accountId;
|
accountId.value = session.personalAccount.accountId;
|
||||||
_getUserProfile();
|
|
||||||
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
|
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
_getParametersRouter();
|
_getParametersRouter();
|
||||||
@@ -104,7 +99,6 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
sessionCurrent = arguments.session;
|
sessionCurrent = arguments.session;
|
||||||
accountId.value = arguments.session?.personalAccount.accountId;
|
accountId.value = arguments.session?.personalAccount.accountId;
|
||||||
previousUri = arguments.previousUri;
|
previousUri = arguments.previousUri;
|
||||||
_getUserProfile();
|
|
||||||
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
|
_bindingInteractorForMenuItemView(sessionCurrent, accountId.value);
|
||||||
_getVacationResponse();
|
_getVacationResponse();
|
||||||
if (arguments.menuSettingCurrent != null) {
|
if (arguments.menuSettingCurrent != null) {
|
||||||
@@ -163,11 +157,6 @@ class ManageAccountDashBoardController extends ReloadableController {
|
|||||||
appInformation.value = info;
|
appInformation.value = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getUserProfile() async {
|
|
||||||
log('ManageAccountDashBoardController::_getUserProfile(): $sessionCurrent');
|
|
||||||
userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _getVacationResponse() {
|
void _getVacationResponse() {
|
||||||
if (accountId.value != null && _getAllVacationInteractor != null) {
|
if (accountId.value != null && _getAllVacationInteractor != null) {
|
||||||
consumeState(_getAllVacationInteractor!.execute(accountId.value!));
|
consumeState(_getAllVacationInteractor!.execute(accountId.value!));
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import 'package:core/presentation/views/text/slogan_builder.dart';
|
|||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.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/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/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';
|
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<ManageAccountDashBoardControl
|
|||||||
const Spacer(),
|
const Spacer(),
|
||||||
const SizedBox(width: 16),
|
const SizedBox(width: 16),
|
||||||
Obx(() => (AvatarBuilder()
|
Obx(() => (AvatarBuilder()
|
||||||
..text(controller.userProfile.value?.getAvatarText() ?? '')
|
..text(controller.sessionCurrent?.username.firstCharacter ?? '')
|
||||||
..backgroundColor(Colors.white)
|
..backgroundColor(Colors.white)
|
||||||
..textColor(Colors.black)
|
..textColor(Colors.black)
|
||||||
..context(context)
|
..context(context)
|
||||||
@@ -149,7 +150,7 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
|||||||
position,
|
position,
|
||||||
popupMenuUserSettingActionTile(
|
popupMenuUserSettingActionTile(
|
||||||
context,
|
context,
|
||||||
controller.userProfile.value,
|
controller.sessionCurrent?.username,
|
||||||
onLogoutAction: () {
|
onLogoutAction: () {
|
||||||
popBack();
|
popBack();
|
||||||
controller.logout(controller.sessionCurrent, controller.accountId.value);
|
controller.logout(controller.sessionCurrent, controller.accountId.value);
|
||||||
|
|||||||
+1
-1
@@ -19,7 +19,7 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
|||||||
controller: PlatformInfo.isMobile ? null : controller.settingScrollController,
|
controller: PlatformInfo.isMobile ? null : controller.settingScrollController,
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
Obx(() => UserInformationWidget(
|
Obx(() => UserInformationWidget(
|
||||||
userProfile: controller.manageAccountDashboardController.userProfile.value,
|
userName: controller.manageAccountDashboardController.sessionCurrent?.username,
|
||||||
padding: SettingsUtils.getPaddingInFirstLevel(context, controller.responsiveUtils),
|
padding: SettingsUtils.getPaddingInFirstLevel(context, controller.responsiveUtils),
|
||||||
titlePadding: const EdgeInsetsDirectional.only(start: 16))),
|
titlePadding: const EdgeInsetsDirectional.only(start: 16))),
|
||||||
Divider(
|
Divider(
|
||||||
|
|||||||
+3
-6
@@ -142,10 +142,9 @@ class IdentitiesController extends BaseController {
|
|||||||
|
|
||||||
void goToCreateNewIdentity(BuildContext context) async {
|
void goToCreateNewIdentity(BuildContext context) async {
|
||||||
final accountId = _accountDashBoardController.accountId.value;
|
final accountId = _accountDashBoardController.accountId.value;
|
||||||
final userProfile = _accountDashBoardController.userProfile.value;
|
|
||||||
final session = _accountDashBoardController.sessionCurrent;
|
final session = _accountDashBoardController.sessionCurrent;
|
||||||
if (accountId != null && session != null && userProfile != null) {
|
if (accountId != null && session != null) {
|
||||||
final arguments = IdentityCreatorArguments(accountId, session, userProfile);
|
final arguments = IdentityCreatorArguments(accountId, session);
|
||||||
|
|
||||||
final newIdentityArguments = PlatformInfo.isWeb
|
final newIdentityArguments = PlatformInfo.isWeb
|
||||||
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
|
? await DialogRouter.pushGeneralDialog(routeName: AppRoutes.identityCreator, arguments: arguments)
|
||||||
@@ -249,13 +248,11 @@ class IdentitiesController extends BaseController {
|
|||||||
|
|
||||||
void goToEditIdentity(BuildContext context, Identity identity) async {
|
void goToEditIdentity(BuildContext context, Identity identity) async {
|
||||||
final accountId = _accountDashBoardController.accountId.value;
|
final accountId = _accountDashBoardController.accountId.value;
|
||||||
final userProfile = _accountDashBoardController.userProfile.value;
|
|
||||||
final session = _accountDashBoardController.sessionCurrent;
|
final session = _accountDashBoardController.sessionCurrent;
|
||||||
if (accountId != null && session != null && userProfile != null) {
|
if (accountId != null && session != null) {
|
||||||
final arguments = IdentityCreatorArguments(
|
final arguments = IdentityCreatorArguments(
|
||||||
accountId,
|
accountId,
|
||||||
session,
|
session,
|
||||||
userProfile,
|
|
||||||
identity: identity,
|
identity: identity,
|
||||||
actionType: IdentityActionType.edit);
|
actionType: IdentityActionType.edit);
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import 'package:model/extensions/presentation_email_extension.dart';
|
|||||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:model/mailbox/select_mode.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/base_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/date_range_picker_mixin.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';
|
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;
|
Session? get session => mailboxDashBoardController.sessionCurrent;
|
||||||
|
|
||||||
UserProfile? get userProfile => mailboxDashBoardController.userProfile.value;
|
|
||||||
|
|
||||||
SearchQuery? get searchQuery => simpleSearchFilter.value.text;
|
SearchQuery? get searchQuery => simpleSearchFilter.value.text;
|
||||||
|
|
||||||
RxList<PresentationEmail> get listResultSearch => mailboxDashBoardController.listResultSearch;
|
RxList<PresentationEmail> get listResultSearch => mailboxDashBoardController.listResultSearch;
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ class CredentialBindings extends InteractorsBindings {
|
|||||||
Get.find<IOSSharingManager>(),
|
Get.find<IOSSharingManager>(),
|
||||||
Get.find<CacheExceptionThrower>())
|
Get.find<CacheExceptionThrower>())
|
||||||
);
|
);
|
||||||
Get.put(AuthenticationDataSourceImpl());
|
Get.put(AuthenticationDataSourceImpl(Get.find<RemoteExceptionThrower>()));
|
||||||
Get.put(AuthenticationOIDCDataSourceImpl(
|
Get.put(AuthenticationOIDCDataSourceImpl(
|
||||||
Get.find<OIDCHttpClient>(),
|
Get.find<OIDCHttpClient>(),
|
||||||
Get.find<AuthenticationClientBase>(),
|
Get.find<AuthenticationClientBase>(),
|
||||||
|
|||||||
@@ -3944,4 +3944,22 @@ class AppLocalizations {
|
|||||||
name: 'loadingPleaseWait',
|
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');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import 'package:model/model.dart';
|
|
||||||
|
|
||||||
extension UserProfileExtension on UserProfile {
|
|
||||||
UserProfileResponse toUserProfileResponse() {
|
|
||||||
return UserProfileResponse(email);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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();
|
||||||
|
}
|
||||||
@@ -57,7 +57,7 @@ export 'extensions/presentation_email_extension.dart';
|
|||||||
export 'extensions/presentation_mailbox_extension.dart';
|
export 'extensions/presentation_mailbox_extension.dart';
|
||||||
export 'extensions/properties_extension.dart';
|
export 'extensions/properties_extension.dart';
|
||||||
export 'extensions/session_extension.dart';
|
export 'extensions/session_extension.dart';
|
||||||
export 'extensions/user_profile_extension.dart';
|
export 'extensions/username_extension.dart';
|
||||||
export 'extensions/utc_date_extension.dart';
|
export 'extensions/utc_date_extension.dart';
|
||||||
// Identity
|
// Identity
|
||||||
export 'identity/identity_request_dto.dart';
|
export 'identity/identity_request_dto.dart';
|
||||||
@@ -80,6 +80,3 @@ export 'oidc/token_oidc.dart';
|
|||||||
// Upload
|
// Upload
|
||||||
export 'upload/file_info.dart';
|
export 'upload/file_info.dart';
|
||||||
export 'upload/upload_response.dart';
|
export 'upload/upload_response.dart';
|
||||||
// User
|
|
||||||
export 'user/user_profile.dart';
|
|
||||||
export 'user/user_profile_response.dart';
|
|
||||||
@@ -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<Object?> get props => [id];
|
|
||||||
}
|
|
||||||
@@ -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<Object> get props => [email];
|
|
||||||
}
|
|
||||||
@@ -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<String, dynamic> json) => _$UserProfileResponseFromJson(json);
|
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => _$UserProfileResponseToJson(this);
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object?> get props => [email];
|
|
||||||
}
|
|
||||||
|
|
||||||
extension UserProfileResponseExtension on UserProfileResponse {
|
|
||||||
UserProfile toUserProfile() {
|
|
||||||
return UserProfile(email);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user