TF-2667 Use Username replace UserProfile

This commit is contained in:
dab246
2024-03-05 10:02:08 +07:00
committed by Dat H. Pham
parent de4849f551
commit c9fed1fa41
36 changed files with 148 additions and 245 deletions
@@ -199,7 +199,6 @@ class MailboxDashBoardController extends ReloadableController {
final selectedMailbox = Rxn<PresentationMailbox>();
final selectedEmail = Rxn<PresentationEmail>();
final accountId = Rxn<AccountId>();
final userProfile = Rxn<UserProfile>();
final dashBoardAction = Rxn<UIAction>();
final mailboxUIAction = Rxn<MailboxUIAction>();
final emailUIAction = Rxn<EmailUIAction>();
@@ -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<List<PresentationEmail>> 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 {
@@ -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: <Comparator>{}..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) => <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');
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);
}
}
@@ -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}';
@@ -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<PopupMenuEntry> 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,
@@ -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<QuickSearchFilter> listFilter) => listFilter.contains(this);
bool isSelected(SearchEmailFilter filter, UserProfile? userProfile) {
bool isSelected(SearchEmailFilter filter) {
switch (this) {
case QuickSearchFilter.hasAttachment:
return filter.hasAttachment == true;
@@ -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);
}