TF-1155 Update value From field when click quick search action

Signed-off-by: dab246 <tdvu@linagora.com>
(cherry picked from commit eeb16993c41325bc1a617b533c4eaf94f5f32103)
This commit is contained in:
dab246
2023-11-08 16:51:37 +07:00
committed by Dat Vu
parent c94dfc5f00
commit f13bc5de61
11 changed files with 79 additions and 82 deletions
@@ -50,7 +50,7 @@ class RecipientSuggestionItemWidget extends StatelessWidget {
textOrigin: emailAddress.asString(),
wordSearched: suggestionValid ?? ''
),
subtitle: emailAddress.emailAddress.isNotEmpty
subtitle: emailAddress.displayName.isNotEmpty
? RichTextWidget(
textOrigin: emailAddress.emailAddress,
wordSearched: suggestionValid ?? '',
@@ -79,7 +79,7 @@ class RecipientSuggestionItemWidget extends StatelessWidget {
textOrigin: emailAddress.asString(),
wordSearched: suggestionValid ?? ''
),
subtitle: emailAddress.emailAddress.isNotEmpty
subtitle: emailAddress.displayName.isNotEmpty
? RichTextWidget(
textOrigin: emailAddress.emailAddress,
wordSearched: suggestionValid ?? '',
@@ -268,13 +268,12 @@ class EmailView extends GetWidget<SingleEmailController> {
);
}
EdgeInsets _getMarginEmailView(BuildContext context) {
EdgeInsetsGeometry _getMarginEmailView(BuildContext context) {
if (PlatformInfo.isWeb) {
if (responsiveUtils.isDesktop(context)) {
return EdgeInsets.only(
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
top: 16,
return const EdgeInsetsDirectional.only(
end: 16,
top: 8,
bottom: 16
);
} else {
@@ -4,6 +4,7 @@ import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.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/quick_search_filter.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
@@ -30,7 +31,7 @@ class FilterMessageAction extends DashBoardAction {
FilterMessageAction(this.context, this.option);
@override
List<Object?> get props => [option];
List<Object?> get props => [context, option];
}
class HandleEmailActionTypeAction extends DashBoardAction {
@@ -42,7 +43,7 @@ class HandleEmailActionTypeAction extends DashBoardAction {
HandleEmailActionTypeAction(this.context, this.listEmailSelected, this.emailAction);
@override
List<Object> get props => [listEmailSelected, emailAction];
List<Object> get props => [context, listEmailSelected, emailAction];
}
class OpenEmailDetailedFromSuggestionQuickSearchAction extends DashBoardAction {
@@ -53,10 +54,17 @@ class OpenEmailDetailedFromSuggestionQuickSearchAction extends DashBoardAction {
OpenEmailDetailedFromSuggestionQuickSearchAction(this.context, this.presentationEmail);
@override
List<Object?> get props => [presentationEmail];
List<Object?> get props => [context, presentationEmail];
}
class StartSearchEmailAction extends DashBoardAction {}
class StartSearchEmailAction extends DashBoardAction {
final QuickSearchFilter? filter;
StartSearchEmailAction({this.filter});
@override
List<Object?> get props => [filter];
}
class EmptyTrashAction extends DashBoardAction {
@@ -65,7 +73,7 @@ class EmptyTrashAction extends DashBoardAction {
EmptyTrashAction(this.context);
@override
List<Object?> get props => [];
List<Object?> get props => [context];
}
class ClearSearchEmailAction extends DashBoardAction {}
@@ -23,6 +23,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart' as search;
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/advanced_search_filter.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/quick_search_filter.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/search/search_email_filter.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
@@ -342,18 +343,14 @@ class AdvancedFilterController extends BaseController {
}
void showFullEmailAddress(AdvancedSearchFilterField field) {
FocusManager.instance.primaryFocus?.unfocus();
switch(field) {
case AdvancedSearchFilterField.from:
fromAddressExpandMode.value = ExpandMode.EXPAND;
toAddressExpandMode.value = ExpandMode.COLLAPSE;
focusManager.fromFieldFocusNode.requestFocus();
focusManager.toFieldFocusNode.unfocus();
break;
case AdvancedSearchFilterField.to:
fromAddressExpandMode.value = ExpandMode.COLLAPSE;
toAddressExpandMode.value = ExpandMode.EXPAND;
focusManager.toFieldFocusNode.requestFocus();
focusManager.fromFieldFocusNode.unfocus();
break;
default:
break;
@@ -446,6 +443,10 @@ class AdvancedFilterController extends BaseController {
);
} else if (action is ClearDateRangeToAdvancedSearch) {
_updateDateRangeTime(action.receiveTime);
} else if (action is StartSearchEmailAction) {
if (action.filter == QuickSearchFilter.fromMe) {
_updateFromField();
}
}
}
);
@@ -470,6 +471,11 @@ class AdvancedFilterController extends BaseController {
_clearAllTextFieldInput();
}
void _updateFromField() {
final listEmailAddress = searchEmailFilter.from.map((address) => EmailAddress(null, address)).toList();
listFromEmailAddress = List.from(listEmailAddress);
}
@override
void onClose() {
_removeFocusListener();
@@ -1505,7 +1505,7 @@ class MailboxDashBoardController extends ReloadableController {
void selectQuickSearchFilterAction(QuickSearchFilter filter) {
log('MailboxDashBoardController::selectQuickSearchFilterAction(): filter: $filter');
selectQuickSearchFilter(filter);
dispatchAction(StartSearchEmailAction());
dispatchAction(StartSearchEmailAction(filter: filter));
}
void selectReceiveTimeQuickSearchFilter(BuildContext context, EmailReceiveTimeType receiveTime) {
@@ -1,6 +1,5 @@
import 'dart:async';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
@@ -29,7 +28,6 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/save_re
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/quick_search_filter.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/widgets/advanced_search/advanced_search_filter_bottom_sheet.dart';
import 'package:tmail_ui_user/features/thread/domain/constants/thread_constants.dart';
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
import 'package:tmail_ui_user/features/thread/presentation/model/search_state.dart';
@@ -40,8 +38,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
final SaveRecentSearchInteractor _saveRecentSearchInteractor;
final GetAllRecentSearchLatestInteractor _getAllRecentSearchLatestInteractor;
final ResponsiveUtils _responsiveUtils = Get.find<ResponsiveUtils>();
final searchInputController = TextEditingController();
final searchEmailFilter = SearchEmailFilter.initial().obs;
final searchState = SearchState.initial().obs;
@@ -60,8 +56,12 @@ class SearchController extends BaseController with DateRangePickerMixin {
this._getAllRecentSearchLatestInteractor,
);
void selectOpenAdvanceSearch() {
isAdvancedSearchViewOpen.toggle();
void openAdvanceSearch() {
isAdvancedSearchViewOpen.value = true;
}
void closeAdvanceSearch() {
isAdvancedSearchViewOpen.value = false;
}
void clearSearchFilter() {
@@ -79,10 +79,8 @@ class SearchController extends BaseController with DateRangePickerMixin {
updateFilterEmail(emailReceiveTimeType: EmailReceiveTimeType.allTime);
return;
case QuickSearchFilter.fromMe:
isFilterSelected
? searchEmailFilter.value.from.removeWhere((e) => e == userProfile.email)
: searchEmailFilter.value.from.add(userProfile.email);
updateFilterEmail(fromOption: Some(searchEmailFilter.value.from));
final newListEmailAddress = isFilterSelected ? <String>{} : <String>{userProfile.email};
updateFilterEmail(fromOption: Some(newListEmailAddress));
return;
}
}
@@ -244,14 +242,6 @@ class SearchController extends BaseController with DateRangePickerMixin {
: <RecentSearch>[]));
}
void showAdvancedFilterView(BuildContext context) async {
selectOpenAdvanceSearch();
if (_responsiveUtils.isMobile(context)) {
await showAdvancedSearchFilterBottomSheet(context);
selectOpenAdvanceSearch();
}
}
void activateSimpleSearch() {
simpleSearchIsActivated.value = true;
}
@@ -535,11 +535,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return Obx(() {
if (supportListButtonQuickSearchFilter(context)) {
return Padding(
padding: EdgeInsets.only(
right: AppUtils.isDirectionRTL(context) ? 0 : 16,
left: AppUtils.isDirectionRTL(context) ? 16 : 0,
top: 16
),
padding: const EdgeInsetsDirectional.only(end: 16, top: 8),
child: Row(children: QuickSearchFilter.values
.map((filter) => _buildQuickSearchFilterButton(context, filter))
.toList()
@@ -45,7 +45,7 @@ class AutoCompleteSuggestionItemWidgetWeb extends StatelessWidget {
textOrigin: emailAddress.asString(),
wordSearched: suggestionValid ?? ''
),
subtitle: emailAddress.emailAddress.isNotEmpty
subtitle: emailAddress.displayName.isNotEmpty
? RichTextWidget(
textOrigin: emailAddress.emailAddress,
wordSearched: suggestionValid ?? '',
@@ -74,7 +74,7 @@ class AutoCompleteSuggestionItemWidgetWeb extends StatelessWidget {
textOrigin: emailAddress.asString(),
wordSearched: suggestionValid ?? ''
),
subtitle: emailAddress.emailAddress.isNotEmpty
subtitle: emailAddress.displayName.isNotEmpty
? RichTextWidget(
textOrigin: emailAddress.emailAddress,
wordSearched: suggestionValid ?? '',
@@ -48,37 +48,39 @@ class AutoCompleteTagItemWidgetWeb extends StatelessWidget {
top: AutoCompleteTagItemWebStyle.paddingTop,
end: isCollapsed ? AutoCompleteTagItemWebStyle.paddingEnd : 0,
),
child: InkWell(
onTap: () => isCollapsed
? null
: onShowFullAction?.call(field),
child: MouseRegion(
cursor: SystemMouseCursors.grab,
child: Chip(
labelPadding: EdgeInsetsDirectional.symmetric(
horizontal: AutoCompleteTagItemWebStyle.labelPaddingHorizontal,
vertical: DirectionUtils.isDirectionRTLByHasAnyRtl(currentEmailAddress.asString()) ? 0 : 2
child: TextFieldTapRegion(
child: InkWell(
onTap: () => isCollapsed
? onShowFullAction?.call(field)
: null,
child: MouseRegion(
cursor: SystemMouseCursors.grab,
child: Chip(
labelPadding: EdgeInsetsDirectional.symmetric(
horizontal: AutoCompleteTagItemWebStyle.labelPaddingHorizontal,
vertical: DirectionUtils.isDirectionRTLByHasAnyRtl(currentEmailAddress.asString()) ? 0 : 2
),
label: Text(
currentEmailAddress.asString(),
maxLines: 1,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
),
deleteIcon: SvgPicture.asset(
_imagePaths.icClose,
fit: BoxFit.fill,
),
labelStyle: AutoCompleteTagItemWebStyle.labelTextStyle,
backgroundColor: _getTagBackgroundColor(),
shape: RoundedRectangleBorder(
borderRadius: AutoCompleteTagItemWebStyle.shapeBorderRadius,
side: _getTagBorderSide(),
),
avatar: currentEmailAddress.emailAddress.isNotEmpty
? AvatarTagItemWidget(tagName: currentEmailAddress.emailAddress)
: null,
onDeleted: () => onDeleteTagAction?.call(currentEmailAddress),
),
label: Text(
currentEmailAddress.asString(),
maxLines: 1,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
),
deleteIcon: SvgPicture.asset(
_imagePaths.icClose,
fit: BoxFit.fill,
),
labelStyle: AutoCompleteTagItemWebStyle.labelTextStyle,
backgroundColor: _getTagBackgroundColor(),
shape: RoundedRectangleBorder(
borderRadius: AutoCompleteTagItemWebStyle.shapeBorderRadius,
side: _getTagBorderSide(),
),
avatar: currentEmailAddress.emailAddress.isNotEmpty
? AvatarTagItemWidget(tagName: currentEmailAddress.emailAddress)
: null,
onDeleted: () => onDeleteTagAction?.call(currentEmailAddress),
),
),
),
@@ -10,15 +10,11 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
import 'package:tmail_ui_user/main/utils/app_utils.dart';
class IconOpenAdvancedSearchWidget extends StatelessWidget {
IconOpenAdvancedSearchWidget(
this._parentContext, {
Key? key,
}) : super(key: key);
IconOpenAdvancedSearchWidget({Key? key}) : super(key: key);
final _imagePaths = Get.find<ImagePaths>();
final search.SearchController searchController = Get.find<search.SearchController>();
final AdvancedFilterController advancedFilterController = Get.find<AdvancedFilterController>();
final BuildContext _parentContext;
@override
Widget build(BuildContext context) {
@@ -44,7 +40,7 @@ class IconOpenAdvancedSearchWidget extends StatelessWidget {
onTap: () {
log('IconOpenAdvancedSearchWidget::build(): clicked');
advancedFilterController.initSearchFilterField(context);
searchController.showAdvancedFilterView(_parentContext);
searchController.openAdvanceSearch();
}),
),
);
@@ -39,7 +39,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
portalFollower: PointerInterceptor(
child: GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () => _searchController.selectOpenAdvanceSearch()
onTap: _searchController.closeAdvanceSearch
),
),
child: PortalTarget(
@@ -210,7 +210,7 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
),
onTap: _searchController.clearTextSearch
),
rightButton: IconOpenAdvancedSearchWidget(context)
rightButton: IconOpenAdvancedSearchWidget()
);
}