TF-2323 Implement from criterion with selection and follow search recommendation
(cherry picked from commit 23817c87d602c370fc9a0ea5fc86e660d61b7f07)
This commit is contained in:
@@ -18,11 +18,9 @@ import 'package:tmail_ui_user/features/composer/domain/state/get_device_contact_
|
|||||||
import 'package:tmail_ui_user/features/composer/domain/usecases/get_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_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_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/composer/presentation/model/suggestion_email_address.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';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
class ContactController extends BaseController {
|
class ContactController extends BaseController {
|
||||||
@@ -176,11 +174,6 @@ class ContactController extends BaseController {
|
|||||||
popBack(result: emailAddress);
|
popBack(result: emailAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
SuggestionEmailAddress getFromMeSuggestion(BuildContext context) {
|
|
||||||
final userEmailAddress = EmailAddress(AppLocalizations.of(context).me, userProfile.value?.email);
|
|
||||||
return SuggestionEmailAddress(userEmailAddress, state: SuggestionEmailState.valid);
|
|
||||||
}
|
|
||||||
|
|
||||||
void closeContactView(BuildContext context) {
|
void closeContactView(BuildContext context) {
|
||||||
clearAllTextInputSearchForm();
|
clearAllTextInputSearchForm();
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
|
|||||||
@@ -78,25 +78,34 @@ class ContactView extends GetWidget<ContactController> {
|
|||||||
onTextChangeSearchAction: controller.onTextSearchChange,
|
onTextChangeSearchAction: controller.onTextSearchChange,
|
||||||
onSearchTextAction: controller.onSearchTextAction,
|
onSearchTextAction: controller.onSearchTextAction,
|
||||||
),
|
),
|
||||||
if (PlatformInfo.isWeb && !controller.responsiveUtils.isMobile(context))
|
if (PlatformInfo.isWeb)
|
||||||
Padding(
|
Obx(() {
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 4),
|
final userEmail = controller.userProfile.value?.email;
|
||||||
child: Column(
|
if (userEmail != null && userEmail.isNotEmpty) {
|
||||||
children: [
|
final userEmailAddress = EmailAddress(AppLocalizations.of(context).me, controller.userProfile.value?.email);
|
||||||
Obx(() => ContactSuggestionBoxItem(
|
final fromMeSuggestionEmailAddress = SuggestionEmailAddress(userEmailAddress, state: SuggestionEmailState.valid);
|
||||||
controller.getFromMeSuggestion(context),
|
return Padding(
|
||||||
padding: ContactUtils.getPaddingSearchResultList(context, controller.responsiveUtils),
|
padding: const EdgeInsets.symmetric(horizontal: 4),
|
||||||
selectedContactCallbackAction: (contact) {
|
child: Column(
|
||||||
controller.selectContact(context, contact);
|
children: [
|
||||||
},
|
ContactSuggestionBoxItem(
|
||||||
)),
|
fromMeSuggestionEmailAddress,
|
||||||
Padding(
|
padding: ContactUtils.getPaddingSearchResultList(context, controller.responsiveUtils),
|
||||||
padding: ContactUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils),
|
selectedContactCallbackAction: (contact) {
|
||||||
child: const Divider(height: 1, color: AppColor.colorDivider),
|
controller.selectContact(context, contact);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Padding(
|
||||||
|
padding: ContactUtils.getPaddingDividerSearchResultList(context, controller.responsiveUtils),
|
||||||
|
child: const Divider(height: 1, color: AppColor.colorDivider),
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
],
|
);
|
||||||
),
|
} else {
|
||||||
),
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
}),
|
||||||
Expanded(child: Obx(() {
|
Expanded(child: Obx(() {
|
||||||
if (controller.listContactSearched.isNotEmpty) {
|
if (controller.listContactSearched.isNotEmpty) {
|
||||||
if (PlatformInfo.isMobile) {
|
if (PlatformInfo.isMobile) {
|
||||||
|
|||||||
+25
-2
@@ -40,6 +40,7 @@ import 'package:tmail_ui_user/features/composer/presentation/composer_bindings.d
|
|||||||
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/compose_action_mode.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/compose_action_mode.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_arguments.dart';
|
import 'package:tmail_ui_user/features/composer/presentation/model/save_to_draft_arguments.dart';
|
||||||
|
import 'package:tmail_ui_user/features/contact/presentation/model/contact_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
import 'package:tmail_ui_user/features/destination_picker/presentation/model/destination_picker_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/mark_read_action.dart';
|
||||||
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
import 'package:tmail_ui_user/features/email/domain/model/move_action.dart';
|
||||||
@@ -1438,6 +1439,14 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
return searchController.selectQuickSearchFilter(filter, userProfile.value!);
|
return searchController.selectQuickSearchFilter(filter, userProfile.value!);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void selectQuickSearchFilterFrom(EmailAddress fromEmailFilter) {
|
||||||
|
return searchController.selectQuickSearchFilter(
|
||||||
|
QuickSearchFilter.fromMe,
|
||||||
|
userProfile.value!,
|
||||||
|
fromEmailFilter: fromEmailFilter
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
void addFilterToSuggestionForm(QuickSearchFilter filter) {
|
void addFilterToSuggestionForm(QuickSearchFilter filter) {
|
||||||
searchController.addFilterToSuggestionForm(filter);
|
searchController.addFilterToSuggestionForm(filter);
|
||||||
}
|
}
|
||||||
@@ -1518,9 +1527,23 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectQuickSearchFilterAction(QuickSearchFilter filter) {
|
void selectQuickSearchFilterAction(QuickSearchFilter filter) async {
|
||||||
log('MailboxDashBoardController::selectQuickSearchFilterAction(): filter: $filter');
|
log('MailboxDashBoardController::selectQuickSearchFilterAction(): filter: $filter');
|
||||||
selectQuickSearchFilter(filter);
|
if (filter == QuickSearchFilter.fromMe &&
|
||||||
|
accountId.value != null &&
|
||||||
|
sessionCurrent != null
|
||||||
|
) {
|
||||||
|
final listContactSelected = searchController.searchEmailFilter.value.from;
|
||||||
|
final arguments = ContactArguments(accountId.value!, sessionCurrent!, listContactSelected);
|
||||||
|
|
||||||
|
final newContact = await DialogRouter.pushGeneralDialog(routeName: AppRoutes.contact, arguments: arguments);
|
||||||
|
|
||||||
|
if (newContact is EmailAddress) {
|
||||||
|
selectQuickSearchFilterFrom(newContact);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
selectQuickSearchFilter(filter);
|
||||||
|
}
|
||||||
dispatchAction(StartSearchEmailAction(filter: filter));
|
dispatchAction(StartSearchEmailAction(filter: filter));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ 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/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_comparator.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_comparator.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_comparator_property.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
import 'package:jmap_dart_client/jmap/mail/email/email_filter_condition.dart';
|
||||||
@@ -70,7 +71,11 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
searchEmailFilter.value = SearchEmailFilter.initial();
|
searchEmailFilter.value = SearchEmailFilter.initial();
|
||||||
}
|
}
|
||||||
|
|
||||||
void selectQuickSearchFilter(QuickSearchFilter quickSearchFilter, UserProfile userProfile) {
|
void selectQuickSearchFilter(
|
||||||
|
QuickSearchFilter quickSearchFilter,
|
||||||
|
UserProfile userProfile,
|
||||||
|
{EmailAddress? fromEmailFilter}
|
||||||
|
) {
|
||||||
final isFilterSelected = quickSearchFilter.isSelected(searchEmailFilter.value, userProfile);
|
final isFilterSelected = quickSearchFilter.isSelected(searchEmailFilter.value, userProfile);
|
||||||
|
|
||||||
switch (quickSearchFilter) {
|
switch (quickSearchFilter) {
|
||||||
@@ -81,8 +86,12 @@ class SearchController extends BaseController with DateRangePickerMixin {
|
|||||||
updateFilterEmail(emailReceiveTimeType: EmailReceiveTimeType.allTime);
|
updateFilterEmail(emailReceiveTimeType: EmailReceiveTimeType.allTime);
|
||||||
return;
|
return;
|
||||||
case QuickSearchFilter.fromMe:
|
case QuickSearchFilter.fromMe:
|
||||||
final newListEmailAddress = isFilterSelected ? <String>{} : <String>{userProfile.email};
|
if (fromEmailFilter != null) {
|
||||||
updateFilterEmail(fromOption: Some(newListEmailAddress));
|
final newListEmailAddress = (fromEmailFilter.email != null && fromEmailFilter.email!.isNotEmpty)
|
||||||
|
? <String>{fromEmailFilter.email!}
|
||||||
|
: <String>{};
|
||||||
|
updateFilterEmail(fromOption: Some(newListEmailAddress));
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case QuickSearchFilter.sortBy:
|
case QuickSearchFilter.sortBy:
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user