TF-933 Update new position all button QuickSearchFilter on Web Desktop
This commit is contained in:
@@ -79,3 +79,11 @@ class DisableSearchEmailAction extends DashBoardAction {
|
|||||||
@override
|
@override
|
||||||
List<Object?> get props => [];
|
List<Object?> get props => [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class StartSearchEmailAction extends DashBoardAction {
|
||||||
|
|
||||||
|
StartSearchEmailAction();
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Object?> get props => [];
|
||||||
|
}
|
||||||
+23
-2
@@ -43,6 +43,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/download/download_task_state.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/quick_search_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
|
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
|
||||||
@@ -54,7 +55,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
|
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.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/features/thread/domain/state/search_email_state.dart';
|
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
@@ -366,7 +366,7 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
|
|
||||||
void searchEmail(BuildContext context, String value) {
|
void searchEmail(BuildContext context, String value) {
|
||||||
searchController.updateFilterEmail(text: SearchQuery(value));
|
searchController.updateFilterEmail(text: SearchQuery(value));
|
||||||
dispatchState(Right(SearchEmailNewQuery(searchController.searchEmailFilter.value.text ?? SearchQuery.initial())));
|
dispatchAction(StartSearchEmailAction());
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
if (_searchInsideEmailDetailedViewIsActive(context)) {
|
if (_searchInsideEmailDetailedViewIsActive(context)) {
|
||||||
_closeEmailDetailedView();
|
_closeEmailDetailedView();
|
||||||
@@ -659,6 +659,27 @@ class MailboxDashBoardController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void selectQuickSearchFilterAction(QuickSearchFilter filter) {
|
||||||
|
selectQuickSearchFilter(quickSearchFilter: filter);
|
||||||
|
dispatchAction(StartSearchEmailAction());
|
||||||
|
}
|
||||||
|
|
||||||
|
void selectReceiveTimeQuickSearchFilter(EmailReceiveTimeType? emailReceiveTimeType) {
|
||||||
|
popBack();
|
||||||
|
|
||||||
|
if (emailReceiveTimeType != null) {
|
||||||
|
searchController.updateFilterEmail(emailReceiveTimeType: emailReceiveTimeType);
|
||||||
|
} else {
|
||||||
|
searchController.updateFilterEmail(emailReceiveTimeType: EmailReceiveTimeType.allTime);
|
||||||
|
}
|
||||||
|
searchController.setEmailReceiveTimeType(emailReceiveTimeType);
|
||||||
|
searchController.updateFilterEmail();
|
||||||
|
if (searchController.searchQuery == null){
|
||||||
|
searchController.updateFilterEmail(text: SearchQuery.initial());
|
||||||
|
}
|
||||||
|
dispatchAction(StartSearchEmailAction());
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
_emailReceiveManager.closeEmailReceiveManagerStream();
|
_emailReceiveManager.closeEmailReceiveManagerStream();
|
||||||
|
|||||||
@@ -42,8 +42,11 @@ class SearchController extends BaseController {
|
|||||||
final mailboxFilterSelectedFormAdvancedSearch = Rxn<PresentationMailbox>();
|
final mailboxFilterSelectedFormAdvancedSearch = Rxn<PresentationMailbox>();
|
||||||
final hasAttachment = false.obs;
|
final hasAttachment = false.obs;
|
||||||
final emailReceiveTimeType = Rxn<EmailReceiveTimeType>();
|
final emailReceiveTimeType = Rxn<EmailReceiveTimeType>();
|
||||||
|
final searchIsActive = RxBool(false);
|
||||||
|
|
||||||
get searchEmailFilterValue => searchEmailFilter.value;
|
SearchEmailFilter get searchEmailFilterValue => searchEmailFilter.value;
|
||||||
|
|
||||||
|
SearchQuery? get searchQuery => searchEmailFilter.value.text;
|
||||||
|
|
||||||
FocusNode searchFocus = FocusNode();
|
FocusNode searchFocus = FocusNode();
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/action/das
|
|||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/base_mailbox_dashboard_view.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/search_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/composer_overlay_state.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/quick_search_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
|
||||||
@@ -95,17 +96,8 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
children: [
|
children: [
|
||||||
SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeMenu),
|
SizedBox(child: MailboxView(), width: responsiveUtils.defaultSizeMenu),
|
||||||
Expanded(child: Column(children: [
|
Expanded(child: Column(children: [
|
||||||
Obx(() {
|
_buildVacationNotificationMessage(context),
|
||||||
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
_buildListButtonQuickSearchFilter(context),
|
||||||
return VacationNotificationMessageWidget(
|
|
||||||
margin: const EdgeInsets.only(top: 16, right: 16),
|
|
||||||
vacationResponse: controller.vacationResponse.value!,
|
|
||||||
actionGotoVacationSetting: () => controller.goToVacationSetting(),
|
|
||||||
actionEndNow: () => controller.disableVacationResponder());
|
|
||||||
} else {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
_buildMarkAsMailboxReadLoading(context),
|
_buildMarkAsMailboxReadLoading(context),
|
||||||
Expanded(child: Obx(() {
|
Expanded(child: Obx(() {
|
||||||
switch(controller.routePath.value) {
|
switch(controller.routePath.value) {
|
||||||
@@ -681,4 +673,164 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildVacationNotificationMessage(BuildContext context) {
|
||||||
|
return Obx(() {
|
||||||
|
if (controller.vacationResponse.value?.vacationResponderIsValid == true) {
|
||||||
|
return VacationNotificationMessageWidget(
|
||||||
|
margin: const EdgeInsets.only(top: 16, right: 16),
|
||||||
|
vacationResponse: controller.vacationResponse.value!,
|
||||||
|
actionGotoVacationSetting: () => controller.goToVacationSetting(),
|
||||||
|
actionEndNow: () => controller.disableVacationResponder());
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
bool supportListButtonQuickSearchFilter(BuildContext context) {
|
||||||
|
return controller.searchController.isSearchActive()
|
||||||
|
&& controller.searchController.searchIsActive.isTrue
|
||||||
|
&& responsiveUtils.isWebDesktop(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildListButtonQuickSearchFilter(BuildContext context) {
|
||||||
|
return Obx(() {
|
||||||
|
if (supportListButtonQuickSearchFilter(context)) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 16, top: 16),
|
||||||
|
child: Row(
|
||||||
|
children: QuickSearchFilter.values
|
||||||
|
.map((filter) => _buildQuickSearchFilterButton(context, filter))
|
||||||
|
.toList()),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _buildQuickSearchFilterButton(
|
||||||
|
BuildContext context,
|
||||||
|
QuickSearchFilter filter
|
||||||
|
) {
|
||||||
|
return Obx(() {
|
||||||
|
final quickSearchFilterSelected = controller.checkQuickSearchFilterSelected(
|
||||||
|
quickSearchFilter: filter,
|
||||||
|
);
|
||||||
|
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(right: 8),
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
if (filter != QuickSearchFilter.last7Days) {
|
||||||
|
controller.selectQuickSearchFilterAction(filter);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
onTapDown: (detail) {
|
||||||
|
if (filter == QuickSearchFilter.last7Days) {
|
||||||
|
final screenSize = MediaQuery.of(context).size;
|
||||||
|
final offset = detail.globalPosition;
|
||||||
|
final position = RelativeRect.fromLTRB(
|
||||||
|
offset.dx,
|
||||||
|
offset.dy,
|
||||||
|
screenSize.width - offset.dx,
|
||||||
|
screenSize.height - offset.dy,
|
||||||
|
);
|
||||||
|
controller.openPopupMenuAction(context, position,
|
||||||
|
popupMenuEmailReceiveTimeType(context,
|
||||||
|
controller.searchController.emailReceiveTimeType.value,
|
||||||
|
(receiveTime) => controller.selectReceiveTimeQuickSearchFilter(receiveTime)));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
color: filter.getBackgroundColor(quickSearchFilterSelected: quickSearchFilterSelected)),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
||||||
|
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
||||||
|
SvgPicture.asset(
|
||||||
|
filter.getIcon(
|
||||||
|
imagePaths,
|
||||||
|
quickSearchFilterSelected: quickSearchFilterSelected),
|
||||||
|
width: 16,
|
||||||
|
height: 16,
|
||||||
|
fit: BoxFit.fill),
|
||||||
|
const SizedBox(width: 4),
|
||||||
|
Text(
|
||||||
|
filter.getTitle(
|
||||||
|
context,
|
||||||
|
receiveTimeType: controller.searchController.emailReceiveTimeType.value),
|
||||||
|
maxLines: 1,
|
||||||
|
overflow: TextOverflow.ellipsis,
|
||||||
|
style: filter.getTextStyle(
|
||||||
|
quickSearchFilterSelected: quickSearchFilterSelected),
|
||||||
|
),
|
||||||
|
if (filter == QuickSearchFilter.last7Days)
|
||||||
|
... [
|
||||||
|
const SizedBox(width: 4),
|
||||||
|
SvgPicture.asset(
|
||||||
|
imagePaths.icChevronDown,
|
||||||
|
width: 16,
|
||||||
|
height: 16,
|
||||||
|
fit: BoxFit.fill),
|
||||||
|
]
|
||||||
|
])),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
List<PopupMenuEntry> popupMenuEmailReceiveTimeType(
|
||||||
|
BuildContext context,
|
||||||
|
EmailReceiveTimeType? receiveTimeSelected,
|
||||||
|
Function(EmailReceiveTimeType?)? onCallBack
|
||||||
|
) {
|
||||||
|
return EmailReceiveTimeType.values
|
||||||
|
.map((timeType) => PopupMenuItem(
|
||||||
|
padding: EdgeInsets.zero,
|
||||||
|
child: _receiveTimeTileAction(
|
||||||
|
context,
|
||||||
|
receiveTimeSelected,
|
||||||
|
timeType,
|
||||||
|
onCallBack)))
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget _receiveTimeTileAction(
|
||||||
|
BuildContext context,
|
||||||
|
EmailReceiveTimeType? receiveTimeSelected,
|
||||||
|
EmailReceiveTimeType receiveTimeType,
|
||||||
|
Function(EmailReceiveTimeType?)? onCallBack
|
||||||
|
) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: () => onCallBack?.call(receiveTimeType == receiveTimeSelected
|
||||||
|
? null
|
||||||
|
: receiveTimeType),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
||||||
|
child: SizedBox(
|
||||||
|
width: 320,
|
||||||
|
child: Row(children: [
|
||||||
|
Expanded(child: Text(
|
||||||
|
receiveTimeType.getTitle(context),
|
||||||
|
style: const TextStyle(
|
||||||
|
fontSize: 17,
|
||||||
|
color: Colors.black,
|
||||||
|
fontWeight: FontWeight.normal))),
|
||||||
|
if (receiveTimeType == receiveTimeSelected)
|
||||||
|
...[
|
||||||
|
const SizedBox(width: 12),
|
||||||
|
SvgPicture.asset(
|
||||||
|
imagePaths.icFilterSelected,
|
||||||
|
width: 24,
|
||||||
|
height: 24,
|
||||||
|
fit: BoxFit.fill),
|
||||||
|
]
|
||||||
|
])
|
||||||
|
),
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:model/email/presentation_email.dart';
|
import 'package:model/email/presentation_email.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
|
||||||
|
|
||||||
class SearchingState extends UIState {
|
class SearchingState extends UIState {
|
||||||
|
|
||||||
@@ -11,15 +10,6 @@ class SearchingState extends UIState {
|
|||||||
List<Object> get props => [];
|
List<Object> get props => [];
|
||||||
}
|
}
|
||||||
|
|
||||||
class SearchEmailNewQuery extends UIState {
|
|
||||||
final SearchQuery searchQuery;
|
|
||||||
|
|
||||||
SearchEmailNewQuery(this.searchQuery);
|
|
||||||
|
|
||||||
@override
|
|
||||||
List<Object> get props => [searchQuery];
|
|
||||||
}
|
|
||||||
|
|
||||||
class SearchEmailSuccess extends UIState {
|
class SearchEmailSuccess extends UIState {
|
||||||
final List<PresentationEmail> emailList;
|
final List<PresentationEmail> emailList;
|
||||||
|
|
||||||
|
|||||||
@@ -94,7 +94,6 @@ class ThreadController extends BaseController {
|
|||||||
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
final MoveToMailboxInteractor _moveToMailboxInteractor;
|
||||||
|
|
||||||
final emailList = <PresentationEmail>[].obs;
|
final emailList = <PresentationEmail>[].obs;
|
||||||
final searchIsActive = RxBool(false);
|
|
||||||
|
|
||||||
bool canLoadMore = true;
|
bool canLoadMore = true;
|
||||||
bool canSearchMore = true;
|
bool canSearchMore = true;
|
||||||
@@ -279,6 +278,9 @@ class ThreadController extends BaseController {
|
|||||||
} else if (action is DisableSearchEmailAction) {
|
} else if (action is DisableSearchEmailAction) {
|
||||||
closeSearchEmailAction();
|
closeSearchEmailAction();
|
||||||
mailboxDashBoardController.clearDashBoardAction();
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
|
} else if (action is StartSearchEmailAction) {
|
||||||
|
_searchEmail();
|
||||||
|
mailboxDashBoardController.clearDashBoardAction();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -286,10 +288,7 @@ class ThreadController extends BaseController {
|
|||||||
viewStateWorker = ever(mailboxDashBoardController.viewState, (viewState) {
|
viewStateWorker = ever(mailboxDashBoardController.viewState, (viewState) {
|
||||||
if (viewState is Either) {
|
if (viewState is Either) {
|
||||||
viewState.map((success) {
|
viewState.map((success) {
|
||||||
if (success is SearchEmailNewQuery){
|
if (success is MarkAsEmailReadSuccess) {
|
||||||
mailboxDashBoardController.clearState();
|
|
||||||
_searchEmail();
|
|
||||||
} else if (success is MarkAsEmailReadSuccess) {
|
|
||||||
_refreshEmailChanges(currentEmailState: success.currentEmailState);
|
_refreshEmailChanges(currentEmailState: success.currentEmailState);
|
||||||
} else if (success is MoveToMailboxSuccess) {
|
} else if (success is MoveToMailboxSuccess) {
|
||||||
_refreshEmailChanges(currentEmailState: success.currentEmailState);
|
_refreshEmailChanges(currentEmailState: success.currentEmailState);
|
||||||
@@ -842,7 +841,7 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void disableSearch() {
|
void disableSearch() {
|
||||||
searchIsActive.value = false;
|
searchController.searchIsActive.value = false;
|
||||||
searchController.disableSearch();
|
searchController.disableSearch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -858,7 +857,7 @@ class ThreadController extends BaseController {
|
|||||||
|
|
||||||
void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterMessageOption}) {
|
void _searchEmail({UnsignedInt? limit, EmailFilterCondition? filterMessageOption}) {
|
||||||
if (_accountId != null && searchQuery != null) {
|
if (_accountId != null && searchQuery != null) {
|
||||||
searchIsActive.value = true;
|
searchController.searchIsActive.value = true;
|
||||||
|
|
||||||
if(searchController.isAdvancedSearchHasApply.isFalse){
|
if(searchController.isAdvancedSearchHasApply.isFalse){
|
||||||
searchController.updateFilterEmail(mailbox: currentMailbox);
|
searchController.updateFilterEmail(mailbox: currentMailbox);
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/email_action_c
|
|||||||
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
|
import 'package:tmail_ui_user/features/mailbox/domain/state/mark_as_mailbox_read_state.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/model/recent_search.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/filter_email_popup_menu_mixin.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/quick_search_filter.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/advanced_search_filter_overlay.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/widgets/advanced_search/icon_open_advanced_search_widget.dart';
|
||||||
@@ -66,7 +65,6 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
_buildVacationNotificationMessage(context),
|
_buildVacationNotificationMessage(context),
|
||||||
],
|
],
|
||||||
_buildEmptyTrashButton(context),
|
_buildEmptyTrashButton(context),
|
||||||
_buildListButtonQuickSearchFilter(context),
|
|
||||||
if (!_responsiveUtils.isDesktop(context))
|
if (!_responsiveUtils.isDesktop(context))
|
||||||
_buildMarkAsMailboxReadLoading(context),
|
_buildMarkAsMailboxReadLoading(context),
|
||||||
_buildLoadingView(),
|
_buildLoadingView(),
|
||||||
@@ -701,134 +699,6 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
bool supportListButtonQuickSearchFilter(BuildContext context) {
|
|
||||||
return controller.isSearchActive()
|
|
||||||
&& controller.searchIsActive.isTrue
|
|
||||||
&& _responsiveUtils.isWebDesktop(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildListButtonQuickSearchFilter(BuildContext context) {
|
|
||||||
return Obx(() {
|
|
||||||
if (supportListButtonQuickSearchFilter(context)) {
|
|
||||||
return Padding(
|
|
||||||
padding: EdgeInsets.only(
|
|
||||||
left: _responsiveUtils.isWebDesktop(context) ? 32 : 16,
|
|
||||||
right: _responsiveUtils.isWebDesktop(context) ? 20 : 16,
|
|
||||||
bottom: _responsiveUtils.isWebDesktop(context) ? 0 : 16,
|
|
||||||
top: _responsiveUtils.isWebDesktop(context) ? 16 : 0),
|
|
||||||
child: Row(
|
|
||||||
children: QuickSearchFilter.values
|
|
||||||
.map((filter) => _buildQuickSearchFilterButton(context, filter))
|
|
||||||
.toList()),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildQuickSearchFilterButton(
|
|
||||||
BuildContext context, QuickSearchFilter filter) {
|
|
||||||
return Obx(() {
|
|
||||||
final quickSearchFilterSelected = controller.mailboxDashBoardController.checkQuickSearchFilterSelected(
|
|
||||||
quickSearchFilter: filter,
|
|
||||||
);
|
|
||||||
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.only(right: 8),
|
|
||||||
child: InkWell(
|
|
||||||
onTap: () {
|
|
||||||
if (filter != QuickSearchFilter.last7Days) {
|
|
||||||
controller.selectQuickSearchFilter(filter);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onTapDown: (detail) {
|
|
||||||
if (filter == QuickSearchFilter.last7Days) {
|
|
||||||
final screenSize = MediaQuery.of(context).size;
|
|
||||||
final offset = detail.globalPosition;
|
|
||||||
final position = RelativeRect.fromLTRB(
|
|
||||||
offset.dx,
|
|
||||||
offset.dy,
|
|
||||||
screenSize.width - offset.dx,
|
|
||||||
screenSize.height - offset.dy,
|
|
||||||
);
|
|
||||||
controller.openPopupReceiveTimeQuickSearchFilter(context, position,
|
|
||||||
popupMenuEmailReceiveTimeType(context,
|
|
||||||
controller.searchController.emailReceiveTimeType.value,
|
|
||||||
(receiveTime) => controller.selectReceiveTimeQuickSearchFilter(receiveTime)));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
borderRadius: const BorderRadius.all(Radius.circular(10)),
|
|
||||||
child: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
borderRadius: BorderRadius.circular(10),
|
|
||||||
color: filter.getBackgroundColor(quickSearchFilterSelected: quickSearchFilterSelected)),
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
|
|
||||||
child: Row(mainAxisAlignment: MainAxisAlignment.center, children: [
|
|
||||||
SvgPicture.asset(
|
|
||||||
filter.getIcon(_imagePaths, quickSearchFilterSelected: quickSearchFilterSelected),
|
|
||||||
width: 16,
|
|
||||||
height: 16,
|
|
||||||
fit: BoxFit.fill),
|
|
||||||
const SizedBox(width: 4),
|
|
||||||
Text(
|
|
||||||
filter.getTitle(context, receiveTimeType: controller.searchController.emailReceiveTimeType.value),
|
|
||||||
maxLines: 1,
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
style: filter.getTextStyle(quickSearchFilterSelected: quickSearchFilterSelected),
|
|
||||||
),
|
|
||||||
if (filter == QuickSearchFilter.last7Days)
|
|
||||||
... [
|
|
||||||
const SizedBox(width: 4),
|
|
||||||
SvgPicture.asset(
|
|
||||||
_imagePaths.icChevronDown,
|
|
||||||
width: 16,
|
|
||||||
height: 16,
|
|
||||||
fit: BoxFit.fill),
|
|
||||||
]
|
|
||||||
])),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
List<PopupMenuEntry> popupMenuEmailReceiveTimeType(BuildContext context,
|
|
||||||
EmailReceiveTimeType? receiveTimeSelected, Function(EmailReceiveTimeType?)? onCallBack) {
|
|
||||||
return EmailReceiveTimeType.values
|
|
||||||
.map((timeType) => PopupMenuItem(
|
|
||||||
padding: EdgeInsets.zero,
|
|
||||||
child: _receiveTimeTileAction(context, receiveTimeSelected, timeType, onCallBack)))
|
|
||||||
.toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _receiveTimeTileAction(
|
|
||||||
BuildContext context,
|
|
||||||
EmailReceiveTimeType? receiveTimeSelected,
|
|
||||||
EmailReceiveTimeType receiveTimeType,
|
|
||||||
Function(EmailReceiveTimeType?)? onCallBack
|
|
||||||
) {
|
|
||||||
return InkWell(
|
|
||||||
onTap: () => onCallBack?.call(receiveTimeType == receiveTimeSelected
|
|
||||||
? null
|
|
||||||
: receiveTimeType),
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
|
|
||||||
child: SizedBox(
|
|
||||||
width: 320,
|
|
||||||
child: Row(children: [
|
|
||||||
Expanded(child: Text(
|
|
||||||
receiveTimeType.getTitle(context),
|
|
||||||
style: const TextStyle(fontSize: 17, color: Colors.black, fontWeight: FontWeight.normal))),
|
|
||||||
if (receiveTimeType == receiveTimeSelected)
|
|
||||||
const SizedBox(width: 12),
|
|
||||||
if (receiveTimeType == receiveTimeSelected)
|
|
||||||
SvgPicture.asset(_imagePaths.icFilterSelected, width: 24, height: 24, fit: BoxFit.fill),
|
|
||||||
])
|
|
||||||
),
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildQuickSearchFilterButtonSuggestionBox(
|
Widget _buildQuickSearchFilterButtonSuggestionBox(
|
||||||
BuildContext context, QuickSearchFilter filter) {
|
BuildContext context, QuickSearchFilter filter) {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
|
|||||||
Reference in New Issue
Block a user