TF-933 Handle selection email search result on desktop
This commit is contained in:
@@ -424,6 +424,7 @@ class ThreadController extends BaseController {
|
||||
final limit = emailList.isNotEmpty
|
||||
? UnsignedInt(emailList.length)
|
||||
: ThreadConstants.defaultLimit;
|
||||
searchController.searchEmailFilter.value = _searchEmailFilter.toSearchEmailFilter(newBefore: null);
|
||||
_searchEmail(limit: limit);
|
||||
}
|
||||
} else {
|
||||
@@ -513,9 +514,7 @@ class ThreadController extends BaseController {
|
||||
mailboxDashBoardController.listEmailSelected.value = listEmailSelected;
|
||||
}
|
||||
|
||||
List<PresentationEmail> get listEmailSelected {
|
||||
return emailList.where((email) => email.selectMode == SelectMode.ACTIVE).toList();
|
||||
}
|
||||
List<PresentationEmail> get listEmailSelected => emailList.listEmailSelected;
|
||||
|
||||
bool _isUnSelectedAll() {
|
||||
return emailList.every((email) => email.selectMode == SelectMode.INACTIVE);
|
||||
@@ -527,13 +526,16 @@ class ThreadController extends BaseController {
|
||||
mailboxDashBoardController.listEmailSelected.clear();
|
||||
}
|
||||
|
||||
void markAsReadSelectedMultipleEmail(List<PresentationEmail> listPresentationEmail) {
|
||||
final listEmail = listPresentationEmail.map((presentationEmail) => presentationEmail.toEmail()).toList();
|
||||
final readAction = listPresentationEmail.isAllEmailRead ? ReadActions.markAsUnread : ReadActions.markAsRead;
|
||||
final mailboxCurrent = mailboxDashBoardController.selectedMailbox.value;
|
||||
if (_accountId != null && mailboxCurrent != null) {
|
||||
void markAsReadSelectedMultipleEmail(
|
||||
List<PresentationEmail> listPresentationEmail,
|
||||
ReadActions readActions
|
||||
) {
|
||||
if (_accountId != null) {
|
||||
cancelSelectEmail();
|
||||
consumeState(_markAsMultipleEmailReadInteractor.execute(_accountId!, listEmail, readAction));
|
||||
consumeState(_markAsMultipleEmailReadInteractor.execute(
|
||||
_accountId!,
|
||||
listPresentationEmail.listEmail,
|
||||
readActions));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -611,9 +613,11 @@ class ThreadController extends BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToMailbox(List<PresentationEmail> listEmail) async {
|
||||
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
|
||||
if (currentMailbox != null && _accountId != null) {
|
||||
void moveSelectedMultipleEmailToMailbox(
|
||||
List<PresentationEmail> listEmail,
|
||||
PresentationMailbox currentMailbox
|
||||
) async {
|
||||
if (_accountId != null) {
|
||||
final listEmailIds = listEmail.map((email) => email.id).toList();
|
||||
final destinationMailbox = await push(
|
||||
AppRoutes.DESTINATION_PICKER,
|
||||
@@ -707,11 +711,13 @@ class ThreadController extends BaseController {
|
||||
_refreshEmailChanges(currentEmailState: currentEmailState);
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToTrash(List<PresentationEmail> listEmail) async {
|
||||
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
|
||||
void moveSelectedMultipleEmailToTrash(
|
||||
List<PresentationEmail> listEmail,
|
||||
PresentationMailbox currentMailbox
|
||||
) {
|
||||
final trashMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleTrash);
|
||||
|
||||
if (currentMailbox != null && _accountId != null && trashMailboxId != null) {
|
||||
if (_accountId != null && trashMailboxId != null) {
|
||||
final listEmailIds = listEmail.map((email) => email.id).toList();
|
||||
_moveSelectedEmailMultipleToTrashAction(_accountId!, MoveToMailboxRequest(
|
||||
listEmailIds,
|
||||
@@ -728,11 +734,13 @@ class ThreadController extends BaseController {
|
||||
consumeState(_moveMultipleEmailToMailboxInteractor.execute(accountId, moveRequest));
|
||||
}
|
||||
|
||||
void moveSelectedMultipleEmailToSpam(List<PresentationEmail> listEmail) async {
|
||||
final currentMailbox = mailboxDashBoardController.selectedMailbox.value;
|
||||
void moveSelectedMultipleEmailToSpam(
|
||||
List<PresentationEmail> listEmail,
|
||||
PresentationMailbox currentMailbox
|
||||
) {
|
||||
final spamMailboxId = mailboxDashBoardController.getMailboxIdByRole(PresentationMailbox.roleSpam);
|
||||
|
||||
if (currentMailbox != null && _accountId != null && spamMailboxId != null) {
|
||||
if (_accountId != null && spamMailboxId != null) {
|
||||
final listEmailIds = listEmail.map((email) => email.id).toList();
|
||||
_moveSelectedEmailMultipleToSpamAction(_accountId!, MoveToMailboxRequest(
|
||||
listEmailIds,
|
||||
@@ -791,12 +799,16 @@ class ThreadController extends BaseController {
|
||||
_refreshEmailChanges(currentEmailState: success.currentEmailState);
|
||||
}
|
||||
|
||||
void markAsStarSelectedMultipleEmail(List<PresentationEmail> listPresentationEmail) {
|
||||
final listEmail = listPresentationEmail.map((presentationEmail) => presentationEmail.toEmail()).toList();
|
||||
final starAction = listPresentationEmail.isAllEmailStarred ? MarkStarAction.unMarkStar : MarkStarAction.markStar;
|
||||
void markAsStarSelectedMultipleEmail(
|
||||
List<PresentationEmail> listPresentationEmail,
|
||||
MarkStarAction markStarAction
|
||||
) {
|
||||
if (_accountId != null) {
|
||||
cancelSelectEmail();
|
||||
consumeState(_markAsStarMultipleEmailInteractor.execute(_accountId!, listEmail, starAction));
|
||||
consumeState(_markAsStarMultipleEmailInteractor.execute(
|
||||
_accountId!,
|
||||
listPresentationEmail.listEmail,
|
||||
markStarAction));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -924,28 +936,52 @@ class ThreadController extends BaseController {
|
||||
void pressEmailSelectionAction(BuildContext context, EmailActionType actionType, List<PresentationEmail> selectionEmail) {
|
||||
switch(actionType) {
|
||||
case EmailActionType.markAsRead:
|
||||
markAsReadSelectedMultipleEmail(selectionEmail, ReadActions.markAsRead);
|
||||
break;
|
||||
case EmailActionType.markAsUnread:
|
||||
markAsReadSelectedMultipleEmail(selectionEmail);
|
||||
markAsReadSelectedMultipleEmail(selectionEmail, ReadActions.markAsUnread);
|
||||
break;
|
||||
case EmailActionType.markAsStarred:
|
||||
markAsStarSelectedMultipleEmail(selectionEmail, MarkStarAction.markStar);
|
||||
break;
|
||||
case EmailActionType.unMarkAsStarred:
|
||||
markAsStarSelectedMultipleEmail(selectionEmail);
|
||||
markAsStarSelectedMultipleEmail(selectionEmail, MarkStarAction.unMarkStar);
|
||||
break;
|
||||
case EmailActionType.moveToMailbox:
|
||||
moveSelectedMultipleEmailToMailbox(selectionEmail);
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailbox)
|
||||
: currentMailbox;
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToMailbox(selectionEmail, mailboxContainCurrent);
|
||||
}
|
||||
break;
|
||||
case EmailActionType.moveToTrash:
|
||||
moveSelectedMultipleEmailToTrash(selectionEmail);
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailbox)
|
||||
: currentMailbox;
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToTrash(selectionEmail, mailboxContainCurrent);
|
||||
}
|
||||
break;
|
||||
case EmailActionType.deletePermanently:
|
||||
deleteSelectionEmailsPermanently(
|
||||
context,
|
||||
DeleteActionType.multiple,
|
||||
selectedEmails: selectionEmail,
|
||||
presentationMailbox: currentMailbox);
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailbox)
|
||||
: currentMailbox;
|
||||
if (mailboxContainCurrent != null) {
|
||||
deleteSelectionEmailsPermanently(
|
||||
context,
|
||||
DeleteActionType.multiple,
|
||||
selectedEmails: selectionEmail,
|
||||
presentationMailbox: mailboxContainCurrent);
|
||||
}
|
||||
break;
|
||||
case EmailActionType.moveToSpam:
|
||||
moveSelectedMultipleEmailToSpam(selectionEmail);
|
||||
final mailboxContainCurrent = searchController.isSearchEmailRunning
|
||||
? selectionEmail.getCurrentMailboxContain(mailboxDashBoardController.mapMailbox)
|
||||
: currentMailbox;
|
||||
if (mailboxContainCurrent != null) {
|
||||
moveSelectedMultipleEmailToSpam(selectionEmail, mailboxContainCurrent);
|
||||
}
|
||||
break;
|
||||
case EmailActionType.unSpam:
|
||||
unSpamSelectedMultipleEmail(selectionEmail);
|
||||
|
||||
@@ -134,7 +134,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
||||
return Obx(() {
|
||||
if ((!BuildUtils.isWeb || (BuildUtils.isWeb && controller.isSelectionEnabled()
|
||||
&& controller.isSearchActive() && !_responsiveUtils.isDesktop(context)))
|
||||
&& controller.listEmailSelected.isNotEmpty) {
|
||||
&& controller.emailList.listEmailSelected.isNotEmpty) {
|
||||
return Column(children: [
|
||||
const Divider(color: AppColor.lineItemListColor, height: 1, thickness: 0.2),
|
||||
Padding(
|
||||
@@ -143,7 +143,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
||||
context,
|
||||
_imagePaths,
|
||||
_responsiveUtils,
|
||||
controller.listEmailSelected,
|
||||
controller.emailList.listEmailSelected,
|
||||
controller.mailboxDashBoardController.selectedMailbox.value)
|
||||
..addOnPressEmailSelectionActionClick((actionType, selectionEmail) =>
|
||||
controller.pressEmailSelectionAction(context, actionType, selectionEmail)))
|
||||
@@ -379,7 +379,7 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
||||
return (AppBarThreadWidgetBuilder(
|
||||
context,
|
||||
controller.currentMailbox,
|
||||
controller.listEmailSelected,
|
||||
controller.emailList.listEmailSelected,
|
||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
||||
controller.mailboxDashBoardController.filterMessageOption.value)
|
||||
..addOpenMailboxMenuActionClick(() => controller.openMailboxLeftMenu())
|
||||
@@ -568,10 +568,13 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
||||
itemBuilder: (context, index) => Obx(() => (EmailTileBuilder(
|
||||
context,
|
||||
listPresentationEmail[index],
|
||||
controller.currentMailbox?.role,
|
||||
controller.mailboxDashBoardController.currentSelectMode.value,
|
||||
controller.searchController.searchState.value.searchStatus,
|
||||
controller.searchQuery,
|
||||
mailboxCurrent: controller.searchController.isSearchEmailRunning
|
||||
? listPresentationEmail[index].findMailboxContain(
|
||||
controller.mailboxDashBoardController.mapMailbox)
|
||||
: controller.currentMailbox,
|
||||
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue)
|
||||
..addOnPressEmailActionClick((action, email) =>
|
||||
controller.pressEmailAction(
|
||||
|
||||
@@ -2,7 +2,6 @@ import 'package:core/core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
||||
@@ -17,7 +16,7 @@ class EmailTileBuilder {
|
||||
final PresentationEmail _presentationEmail;
|
||||
final BuildContext _context;
|
||||
final SelectMode _selectModeAll;
|
||||
final Role? _mailboxRole;
|
||||
final PresentationMailbox? mailboxCurrent;
|
||||
final SearchStatus _searchStatus;
|
||||
final SearchQuery? _searchQuery;
|
||||
final bool advancedSearchActivated;
|
||||
@@ -27,12 +26,12 @@ class EmailTileBuilder {
|
||||
EmailTileBuilder(
|
||||
this._context,
|
||||
this._presentationEmail,
|
||||
this._mailboxRole,
|
||||
this._selectModeAll,
|
||||
this._searchStatus,
|
||||
this._searchQuery,
|
||||
{
|
||||
this.advancedSearchActivated = false
|
||||
this.mailboxCurrent,
|
||||
this.advancedSearchActivated = false,
|
||||
}
|
||||
);
|
||||
|
||||
@@ -280,9 +279,9 @@ class EmailTileBuilder {
|
||||
}
|
||||
|
||||
String _getInformationSender() {
|
||||
if (_mailboxRole == PresentationMailbox.roleSent
|
||||
|| _mailboxRole == PresentationMailbox.roleDrafts
|
||||
|| _mailboxRole == PresentationMailbox.roleOutbox) {
|
||||
if (mailboxCurrent?.isSent == true
|
||||
|| mailboxCurrent?.isDrafts == true
|
||||
|| mailboxCurrent?.isOutbox == true) {
|
||||
return _presentationEmail.recipientsName();
|
||||
}
|
||||
return _presentationEmail.getSenderName();
|
||||
|
||||
@@ -3,7 +3,6 @@ import 'package:core/core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/model/search_query.dart';
|
||||
import 'package:tmail_ui_user/features/thread/presentation/model/search_status.dart';
|
||||
@@ -20,7 +19,7 @@ class EmailTileBuilder {
|
||||
final PresentationEmail _presentationEmail;
|
||||
final BuildContext _context;
|
||||
final SelectMode _selectModeAll;
|
||||
final Role? _mailboxRole;
|
||||
final PresentationMailbox? mailboxCurrent;
|
||||
final SearchStatus _searchStatus;
|
||||
final SearchQuery? _searchQuery;
|
||||
final bool advancedSearchActivated;
|
||||
@@ -34,11 +33,11 @@ class EmailTileBuilder {
|
||||
EmailTileBuilder(
|
||||
this._context,
|
||||
this._presentationEmail,
|
||||
this._mailboxRole,
|
||||
this._selectModeAll,
|
||||
this._searchStatus,
|
||||
this._searchQuery,
|
||||
{
|
||||
this.mailboxCurrent,
|
||||
this.advancedSearchActivated = false
|
||||
}
|
||||
);
|
||||
@@ -577,7 +576,7 @@ class EmailTileBuilder {
|
||||
: EmailActionType.markAsRead,
|
||||
_presentationEmail)),
|
||||
const SizedBox(width: 5),
|
||||
if (_mailboxRole != PresentationMailbox.roleDrafts)
|
||||
if (mailboxCurrent?.isDrafts == false)
|
||||
... [
|
||||
buildIconWeb(
|
||||
minSize: 18,
|
||||
@@ -616,7 +615,7 @@ class EmailTileBuilder {
|
||||
: EmailActionType.moveToTrash,
|
||||
_presentationEmail)),
|
||||
const SizedBox(width: 5),
|
||||
if (_mailboxRole != PresentationMailbox.roleDrafts)
|
||||
if (mailboxCurrent?.isDrafts == false)
|
||||
buildIconWebHasPosition(
|
||||
_context,
|
||||
icon: SvgPicture.asset(
|
||||
@@ -641,8 +640,7 @@ class EmailTileBuilder {
|
||||
}
|
||||
|
||||
bool get canDeletePermanently {
|
||||
return _mailboxRole == PresentationMailbox.roleTrash ||
|
||||
_mailboxRole == PresentationMailbox.roleDrafts;
|
||||
return mailboxCurrent?.isTrash == true || mailboxCurrent?.isDrafts == true;
|
||||
}
|
||||
|
||||
Widget _buildDateTimeForDesktopScreen() {
|
||||
@@ -834,9 +832,9 @@ class EmailTileBuilder {
|
||||
}
|
||||
|
||||
String _getInformationSender() {
|
||||
if (_mailboxRole == PresentationMailbox.roleSent
|
||||
|| _mailboxRole == PresentationMailbox.roleDrafts
|
||||
|| _mailboxRole == PresentationMailbox.roleOutbox) {
|
||||
if (mailboxCurrent?.isSent == true
|
||||
|| mailboxCurrent?.isDrafts == true
|
||||
|| mailboxCurrent?.isOutbox == true) {
|
||||
return _presentationEmail.recipientsName();
|
||||
}
|
||||
return _presentationEmail.getSenderName();
|
||||
|
||||
Reference in New Issue
Block a user