TF-934 Implement search by query when open new tab

This commit is contained in:
dab246
2022-11-11 00:11:48 +07:00
committed by Dat H. Pham
parent 6050ee5386
commit 71abe0cf37
22 changed files with 224 additions and 120 deletions
@@ -20,6 +20,7 @@ class EmailSupervisorController extends BaseController {
int currentIndexPageView = -1;
final canGetNewerEmail = true.obs;
final canGetOlderEmail = true.obs;
final supportedPageView = RxBool(true);
Rxn<PresentationEmail> get selectedEmail => mailboxDashBoardController.selectedEmail;
Session? get sessionCurrent => mailboxDashBoardController.sessionCurrent;
@@ -33,8 +34,6 @@ class EmailSupervisorController extends BaseController {
}
}
bool get supportedPageView => listEmail.isNotEmpty;
@override
void onClose() {
pageController?.dispose();
@@ -181,10 +181,12 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
if (presentationEmail is PresentationEmail) {
if (_currentEmailId != presentationEmail.id) {
_currentEmailId = presentationEmail.id;
if (emailSupervisorController.supportedPageView) {
if (emailSupervisorController.listEmail.isNotEmpty) {
emailSupervisorController.supportedPageView.value = true;
emailSupervisorController.setCurrentPositionEmailInListEmail(_currentEmailId);
_getEmailDeBouncer.value = emailSupervisorController.currentIndexPageView;
} else {
emailSupervisorController.supportedPageView.value = false;
_getEmailContentAction(presentationEmail.id);
}
_resetToOriginalValue();
@@ -364,9 +366,13 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
PresentationMailbox? getMailboxContain(PresentationEmail email) {
return mailboxDashBoardController.searchController.isSearchEmailRunning
if (mailboxDashBoardController.selectedMailbox.value == null) {
return email.findMailboxContain(mailboxDashBoardController.mapMailboxById);
} else {
return mailboxDashBoardController.searchController.isSearchEmailRunning
? email.findMailboxContain(mailboxDashBoardController.mapMailboxById)
: mailboxDashBoardController.selectedMailbox.value;
}
}
void markAsEmailRead(PresentationEmail presentationEmail, ReadActions readActions) async {
@@ -378,6 +384,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
void _markAsEmailReadSuccess(Success success) {
log('SingleEmailController::_markAsEmailReadSuccess(): $success');
mailboxDashBoardController.dispatchState(Right(success));
if (success is MarkAsEmailReadSuccess
@@ -744,7 +751,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void _markAsEmailStarSuccess(Success success) {
if (success is MarkAsStarEmailSuccess) {
mailboxDashBoardController.setSelectedEmail(success.updatedEmail.toPresentationEmail(selectMode: SelectMode.ACTIVE));
final selectedEmail = mailboxDashBoardController.selectedEmail.value;
mailboxDashBoardController.setSelectedEmail(selectedEmail?.updateKeywords(success.updatedEmail.keywords));
}
mailboxDashBoardController.dispatchState(Right(success));
}
@@ -992,7 +1000,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
void closeEmailView(BuildContext context) {
log('SingleEmailController::closeEmailView(): ');
if (emailSupervisorController.supportedPageView) {
if (emailSupervisorController.supportedPageView.isTrue) {
emailSupervisorController.presentationEmailsLoaded.removeWhere((e) => e.emailCurrent?.id == currentEmail?.id);
emailSupervisorController.currentIndexPageView = -1;
_getEmailDeBouncer.value = null;
@@ -1015,10 +1023,11 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
}
bool get isOpenEmailNotMailboxFromRoute => !emailSupervisorController.supportedPageView
bool get isOpenEmailNotMailboxFromRoute => emailSupervisorController.supportedPageView.isFalse
&& mailboxDashBoardController.selectedMailbox.value == null;
void _updateRouteOnBrowser() {
log('SingleEmailController::_updateRouteOnBrowser(): isSearchEmailRunning: ${mailboxDashBoardController.searchController.isSearchEmailRunning}');
if (BuildUtils.isWeb) {
final selectedMailboxId = mailboxDashBoardController.selectedMailbox.value?.id;
final route = RouteUtils.generateRouteBrowser(
@@ -88,9 +88,11 @@ class EmailView extends GetWidget<SingleEmailController> {
_buildAppBar(context, email),
_buildVacationNotificationMessage(context),
const Divider(color: AppColor.colorDividerHorizontal, height: 1),
Expanded(child: controller.emailSupervisorController.supportedPageView
? _buildMultipleEmailView(controller.emailSupervisorController.listEmail)
: _buildSingleEmailView(context, email),
Expanded(child: Obx(() {
return controller.emailSupervisorController.supportedPageView.isTrue
? _buildMultipleEmailView(controller.emailSupervisorController.listEmail)
: _buildSingleEmailView(context, email);
}),
),
const Divider(color: AppColor.colorDividerHorizontal, height: 1),
_buildBottomBar(context, email),
@@ -98,6 +100,7 @@ class EmailView extends GetWidget<SingleEmailController> {
}
Widget _buildMultipleEmailView(List<PresentationEmail> listEmails) {
log('EmailView::_buildMultipleEmailView(): ');
return PageView.builder(
physics: BuildUtils.isWeb ? const NeverScrollableScrollPhysics() : null,
itemCount: listEmails.length,
@@ -108,6 +111,7 @@ class EmailView extends GetWidget<SingleEmailController> {
}
Widget _buildSingleEmailView(BuildContext context, PresentationEmail email) {
log('EmailView::_buildSingleEmailView(): ');
return _buildEmailBody(context, email);
}
@@ -144,7 +148,7 @@ class EmailView extends GetWidget<SingleEmailController> {
Widget _buildAppBar(BuildContext context, PresentationEmail presentationEmail) {
return Obx(() => AppBarMailWidgetBuilder(
presentationEmail,
currentMailbox: controller.mailboxDashBoardController.selectedMailbox.value,
mailboxContain: _getMailboxContain(presentationEmail),
isSearchIsRunning: controller.mailboxDashBoardController.searchController.isSearchEmailRunning,
onBackActionClick: () => controller.closeEmailView(context),
onEmailActionClick: (email, action) =>
@@ -161,12 +165,16 @@ class EmailView extends GetWidget<SingleEmailController> {
_popupMenuEmailActionTile(context, email));
}
},
optionsWidget: BuildUtils.isWeb && controller.emailSupervisorController.supportedPageView
optionsWidget: BuildUtils.isWeb && controller.emailSupervisorController.supportedPageView.isTrue
? _buildNavigatorPageViewWidgets(context)
: null,
));
}
PresentationMailbox? _getMailboxContain(PresentationEmail currentEmail) {
return currentEmail.findMailboxContain(controller.mailboxDashBoardController.mapMailboxById);
}
List<Widget> _buildNavigatorPageViewWidgets(BuildContext context) {
return [
buildIconWeb(
@@ -16,7 +16,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
final PresentationEmail _presentationEmail;
final List<Widget>? optionsWidget;
final PresentationMailbox? currentMailbox;
final PresentationMailbox? mailboxContain;
final bool isSearchIsRunning;
final OnBackActionClick? onBackActionClick;
final OnEmailActionClick? onEmailActionClick;
@@ -26,7 +26,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
this._presentationEmail,
{
Key? key,
this.currentMailbox,
this.mailboxContain,
this.onBackActionClick,
this.onEmailActionClick,
this.onMoreActionClick,
@@ -70,7 +70,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
constraints: BoxConstraints(
maxWidth: _responsiveUtils.getSizeScreenWidth(context) - 250),
child: Text(
currentMailbox?.name?.name.capitalizeFirstEach ?? '',
mailboxContain?.name?.name.capitalizeFirstEach ?? '',
maxLines: 1,
overflow: CommonTextStyle.defaultTextOverFlow,
softWrap: CommonTextStyle.defaultSoftWrap,
@@ -134,17 +134,17 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icDeleteComposer,
color: currentMailbox?.role != PresentationMailbox.roleTrash
color: mailboxContain?.isTrash == false
? AppColor.colorTextButton
: AppColor.colorDeletePermanentlyButton,
width: BuildUtils.isWeb ? 18 : 20,
height: BuildUtils.isWeb ? 18 : 20,
fit: BoxFit.fill),
tooltip: currentMailbox?.role != PresentationMailbox.roleTrash
tooltip: mailboxContain?.isTrash == false
? AppLocalizations.of(context).move_to_trash
: AppLocalizations.of(context).delete_permanently,
onTap: () {
if (currentMailbox?.role != PresentationMailbox.roleTrash) {
if (mailboxContain?.isTrash == false) {
onEmailActionClick?.call(
_presentationEmail,
EmailActionType.moveToTrash);