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:
@@ -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 {}
|
||||
|
||||
+12
-6
@@ -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();
|
||||
|
||||
+1
-1
@@ -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()
|
||||
|
||||
+2
-2
@@ -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 ?? '',
|
||||
|
||||
+32
-30
@@ -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),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
+2
-6
@@ -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()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user