TF-1427 Create new mailbox search view on web

This commit is contained in:
dab246
2023-02-09 15:08:40 +07:00
committed by Dat Vu
parent e2c0cb52a6
commit 705dd5d28c
18 changed files with 1021 additions and 38 deletions
@@ -125,12 +125,12 @@ class SearchEmailByQueryAction extends DashBoardAction {
@override
List<Object?> get props => [navigationRouter];
}
class OpenSpamMailboxAction extends DashBoardAction {
class OpenMailboxAction extends DashBoardAction {
final BuildContext context;
final PresentationMailbox presentationMailbox;
OpenSpamMailboxAction(this.context, this.presentationMailbox);
OpenMailboxAction(this.context, this.presentationMailbox);
@override
List<Object?> get props => [context, presentationMailbox];
@@ -159,6 +159,7 @@ class MailboxDashBoardController extends ReloadableController {
final vacationResponse = Rxn<VacationResponse>();
final routerParameters = Rxn<Map<String, String?>>();
final _isDraggingMailbox = RxBool(false);
final searchMailboxActivated = RxBool(false);
Session? sessionCurrent;
Map<Role, MailboxId> mapDefaultMailboxIdByRole = {};
Map<MailboxId, PresentationMailbox> mapMailboxById = {};
@@ -512,6 +513,14 @@ class MailboxDashBoardController extends ReloadableController {
scaffoldKey.currentState?.openEndDrawer();
}
void hideMailboxMenuWhenScreenSizeChange(BuildContext context) {
if (isDrawerOpen && _responsiveUtils.isWebDesktop(context)) {
WidgetsBinding.instance.addPostFrameCallback((_) {
closeMailboxMenuDrawer();
});
}
}
bool get isDrawerOpen => scaffoldKey.currentState?.isDrawerOpen == true;
bool isSelectionEnabled() => currentSelectMode.value == SelectMode.ACTIVE;
@@ -1526,8 +1535,8 @@ class MailboxDashBoardController extends ReloadableController {
emailsInCurrentMailbox.value = newEmailList;
}
void openSpamMailboxAction(BuildContext context, PresentationMailbox presentationMailbox){
dispatchAction(OpenSpamMailboxAction(context, presentationMailbox));
void openMailboxAction(BuildContext context, PresentationMailbox presentationMailbox) {
dispatchAction(OpenMailboxAction(context, presentationMailbox));
}
bool get enableSpamReport => spamReportController.enableSpamReport;
@@ -80,7 +80,7 @@ class SpamReportController extends BaseController {
void openMailbox(BuildContext context) {
final _mailboxDashBoardController = Get.find<MailboxDashBoardController>();
dismissSpamReportAction();
_mailboxDashBoardController.openSpamMailboxAction(context, _presentationSpamMailbox.value!);
_mailboxDashBoardController.openMailboxAction(context, _presentationSpamMailbox.value!);
}
void storeSpamReportStateAction(SpamReportState spamReportState) {
@@ -29,6 +29,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/va
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
import 'package:tmail_ui_user/features/quotas/presentation/widget/quotas_warning_banner_widget.dart';
import 'package:tmail_ui_user/features/search/email/presentation/search_email_view.dart';
import 'package:tmail_ui_user/features/search/mailbox/presentation/search_mailbox_view.dart';
import 'package:tmail_ui_user/features/thread/domain/model/filter_message_option.dart';
import 'package:tmail_ui_user/features/thread/presentation/thread_view.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
@@ -48,11 +49,7 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
@override
Widget build(BuildContext context) {
if (controller.isDrawerOpen && responsiveUtils.isDesktop(context)) {
WidgetsBinding.instance.addPostFrameCallback((_) {
controller.closeMailboxMenuDrawer();
});
}
controller.hideMailboxMenuWhenScreenSizeChange(context);
return Portal(
child: Stack(children: [
@@ -108,7 +105,15 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
Column(children: [
_buildComposerButton(context),
Expanded(child: SizedBox(
child: MailboxView(),
child: Obx(() {
if (controller.searchMailboxActivated.isTrue) {
return const SearchMailboxView(
backgroundColor: AppColor.colorBgDesktop
);
} else {
return MailboxView();
}
}),
width: ResponsiveUtils.defaultSizeMenu
))
]),
@@ -183,7 +188,12 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
),
Obx(() => controller.composerOverlayState.value == ComposerOverlayState.active
? ComposerView()
: const SizedBox.shrink()),
: const SizedBox.shrink()
),
Obx(() => controller.searchMailboxActivated.value == true && !responsiveUtils.isWebDesktop(context)
? const SearchMailboxView()
: const SizedBox.shrink()
),
_buildDownloadTaskStateWidget(),
]),
);
@@ -193,11 +203,11 @@ class MailboxDashBoardView extends BaseMailboxDashBoardView {
return Scaffold(
key: controller.scaffoldKey,
drawer: ResponsiveWidget(
responsiveUtils: responsiveUtils,
mobile: SizedBox(child: MailboxView(), width: ResponsiveUtils.defaultSizeDrawer),
tablet: SizedBox(child: MailboxView(), width: ResponsiveUtils.defaultSizeDrawer),
tabletLarge: SizedBox(child: MailboxView(), width: ResponsiveUtils.defaultSizeLeftMenuMobile),
desktop: const SizedBox.shrink()),
responsiveUtils: responsiveUtils,
mobile: SizedBox(child: MailboxView(), width: ResponsiveUtils.defaultSizeDrawer),
tabletLarge: SizedBox(child: MailboxView(), width: ResponsiveUtils.defaultSizeLeftMenuMobile),
desktop: const SizedBox.shrink()
),
body: body,
);
}
@@ -85,12 +85,14 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
color: Colors.black,
fontSize: 16.0)
),
leftButton: buildIconWeb(
leftButton: Padding(
padding: const EdgeInsets.only(left: 8),
child: buildIconWeb(
minSize: 40,
iconPadding: EdgeInsets.zero,
icon: SvgPicture.asset(
imagePaths.icSearchBar,
width: 16,
height: 16,
fit: BoxFit.fill),
imagePaths.icSearchBar,
fit: BoxFit.fill),
onTap: () {
final keyword = controller.searchInputController.text.trim();
if (keyword.isNotEmpty) {
@@ -99,7 +101,9 @@ class SearchInputFormWidget extends StatelessWidget with AppLoaderMixin {
} else {
dashBoardController.clearSearchEmail();
}
}),
}
)
),
clearTextButton: buildIconWeb(
icon: SvgPicture.asset(
imagePaths.icClearTextSearch,