TF-933 Implement search contact when select contact filter in search view

This commit is contained in:
dab246
2022-09-20 13:45:48 +07:00
committed by Dat H. Pham
parent 09fa15289d
commit 7fe899daf5
14 changed files with 587 additions and 23 deletions
@@ -138,12 +138,12 @@ extension SearchEmailFilterExtension on SimpleSearchFilter {
}
}
String getNameContactApplied(PrefixEmailAddress prefixEmailAddress) {
String getNameContactApplied(BuildContext context, PrefixEmailAddress prefixEmailAddress) {
switch(prefixEmailAddress) {
case PrefixEmailAddress.from:
return from.first;
return '${AppLocalizations.of(context).from_email_address_prefix} ${from.first}';
case PrefixEmailAddress.to:
return to.first;
return '${AppLocalizations.of(context).to_email_address_prefix} ${to.first}';
default:
return '';
}
@@ -7,13 +7,16 @@ import 'package:debounce_throttle/debounce_throttle.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
import 'package:jmap_dart_client/jmap/core/sort/comparator.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_property.dart';
import 'package:model/model.dart';
import 'package:tmail_ui_user/features/base/base_controller.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/email/domain/state/delete_email_permanently_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/delete_multiple_emails_permanently_state.dart';
@@ -81,6 +84,8 @@ class SearchEmailController extends BaseController
AccountId? get accountId => mailboxDashBoardController.accountId.value;
Session? get session => mailboxDashBoardController.sessionCurrent;
UserProfile? get userProfile => mailboxDashBoardController.userProfile.value;
SearchQuery? get searchQuery => simpleSearchFilter.value.text;
@@ -355,9 +360,6 @@ class SearchEmailController extends BaseController
}
bool checkQuickSearchFilterSelected(QuickSearchFilter filter) {
log('SearchEmailController::checkQuickSearchFilterSelected(): filter: $filter');
log('SearchEmailController::checkQuickSearchFilterSelected(): simpleSearchFilter: ${simpleSearchFilter.value.from}');
log('SearchEmailController::checkQuickSearchFilterSelected(): userProfile: ${userProfile!.email}');
switch (filter) {
case QuickSearchFilter.hasAttachment:
return simpleSearchFilter.value.hasAttachment == true;
@@ -366,16 +368,13 @@ class SearchEmailController extends BaseController
return true;
}
return simpleSearchFilter.value.emailReceiveTimeType == EmailReceiveTimeType.last7Days;
case QuickSearchFilter.fromMe:
return userProfile != null &&
simpleSearchFilter.value.from.contains(userProfile!.email) &&
simpleSearchFilter.value.from.length == 1;
default:
return false;
}
}
void _selectQuickSearchFilter(QuickSearchFilter filter) {
final filterSelected = checkQuickSearchFilterSelected(filter);
log('SearchEmailController::_selectQuickSearchFilter(): filterSelected: $filterSelected');
switch (filter) {
case QuickSearchFilter.hasAttachment:
_updateSimpleSearchFilter(hasAttachment: !filterSelected);
@@ -389,14 +388,7 @@ class SearchEmailController extends BaseController
_updateSimpleSearchFilter(emailReceiveTimeType: EmailReceiveTimeType.last7Days);
}
break;
case QuickSearchFilter.fromMe:
if (userProfile != null) {
filterSelected
? simpleSearchFilter.value.from.removeWhere((e) => e == userProfile!.email)
: simpleSearchFilter.value.from.add(userProfile!.email);
log('SearchEmailController::_selectQuickSearchFilter(): from: ${simpleSearchFilter.value.from}');
_updateSimpleSearchFilter(from: simpleSearchFilter.value.from);
}
default:
break;
}
}
@@ -445,11 +437,60 @@ class SearchEmailController extends BaseController
BuildContext context,
PrefixEmailAddress prefixEmailAddress
) async {
if (accountId != null && session != null) {
final listContactSelected = simpleSearchFilter.value.getContactApplied(prefixEmailAddress);
final newContact = await push(
AppRoutes.CONTACT,
arguments: ContactArguments(accountId!, session!, listContactSelected));
if (newContact is EmailAddress) {
if (listContactSelected.isNotEmpty) {
switch(prefixEmailAddress) {
case PrefixEmailAddress.from:
listContactSelected.first == newContact.email
? simpleSearchFilter.value.from.removeWhere((e) => e == newContact.email!)
: simpleSearchFilter.value.from.add(newContact.email!);
break;
case PrefixEmailAddress.to:
listContactSelected.first == newContact.email
? simpleSearchFilter.value.to.removeWhere((e) => e == newContact.email!)
: simpleSearchFilter.value.to.add(newContact.email!);
break;
default:
break;
}
} else {
switch(prefixEmailAddress) {
case PrefixEmailAddress.from:
simpleSearchFilter.value.from.add(newContact.email!);
break;
case PrefixEmailAddress.to:
simpleSearchFilter.value.to.add(newContact.email!);
break;
default:
break;
}
}
switch(prefixEmailAddress) {
case PrefixEmailAddress.from:
_updateSimpleSearchFilter(from: simpleSearchFilter.value.from);
break;
case PrefixEmailAddress.to:
_updateSimpleSearchFilter(to: simpleSearchFilter.value.to);
break;
default:
break;
}
_searchEmailAction(context);
}
}
}
void _updateSimpleSearchFilter({
Set<String>? from,
Set<String>? to,
SearchQuery? text,
PresentationMailbox? mailbox,
EmailReceiveTimeType? emailReceiveTimeType,
@@ -458,6 +499,7 @@ class SearchEmailController extends BaseController
}) {
simpleSearchFilter.value = simpleSearchFilter.value.copyWith(
from: from,
to: to,
text: text,
mailbox: mailbox,
emailReceiveTimeType: emailReceiveTimeType,
@@ -42,6 +42,12 @@ class SearchEmailView extends GetWidget<SearchEmailController>
@override
Widget build(BuildContext context) {
if (_responsiveUtils.isWebDesktop(context)) {
WidgetsBinding.instance.addPostFrameCallback((_) {
controller.closeSearchView(context);
});
}
return Scaffold(
body: GestureDetector(
onTap: () => FocusScope.of(context).unfocus(),
@@ -129,7 +135,6 @@ class SearchEmailView extends GetWidget<SearchEmailController>
..textDecoration(InputDecoration(
contentPadding: const EdgeInsets.all(12),
hintText: AppLocalizations.of(context).search_emails,
fillColor: Colors.redAccent,
hintStyle: const TextStyle(
color: AppColor.loginTextFieldHintColor,
fontSize: 16),
@@ -590,7 +595,7 @@ class SearchEmailView extends GetWidget<SearchEmailController>
const SizedBox(width: 4),
Text(
filterSelected
? controller.simpleSearchFilter.value.getNameContactApplied(prefixEmailAddress)
? controller.simpleSearchFilter.value.getNameContactApplied(context, prefixEmailAddress)
: controller.simpleSearchFilter.value.getNameContactDefault(context, prefixEmailAddress),
maxLines: 1,
overflow: CommonTextStyle.defaultTextOverFlow,