TF-1427 Create new mailbox search view on web
This commit is contained in:
@@ -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];
|
||||
|
||||
+11
-2
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user