TF-933 Update correct mailbox contain for each email result search
This commit is contained in:
@@ -40,8 +40,11 @@ class EmailView extends GetWidget<EmailController> with NetworkConnectionMixin {
|
|||||||
? AppColor.colorBgDesktop
|
? AppColor.colorBgDesktop
|
||||||
: Colors.white,
|
: Colors.white,
|
||||||
body: Row(children: [
|
body: Row(children: [
|
||||||
if (responsiveUtils.isMailboxDashboardSplitView(context))
|
if (_supportVerticalDivider(context))
|
||||||
const VerticalDivider(color: AppColor.lineItemListColor, width: 1, thickness: 0.2),
|
const VerticalDivider(
|
||||||
|
color: AppColor.lineItemListColor,
|
||||||
|
width: 1,
|
||||||
|
thickness: 0.2),
|
||||||
Expanded(child: SafeArea(
|
Expanded(child: SafeArea(
|
||||||
right: responsiveUtils.isLandscapeMobile(context),
|
right: responsiveUtils.isLandscapeMobile(context),
|
||||||
left: responsiveUtils.isLandscapeMobile(context),
|
left: responsiveUtils.isLandscapeMobile(context),
|
||||||
@@ -60,24 +63,7 @@ class EmailView extends GetWidget<EmailController> with NetworkConnectionMixin {
|
|||||||
: EdgeInsets.zero,
|
: EdgeInsets.zero,
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
_buildAppBar(context),
|
_buildAppBar(context),
|
||||||
Obx(() {
|
_buildVacationNotificationMessage(context),
|
||||||
if (controller.mailboxDashBoardController.vacationResponse.value?.vacationResponderIsValid == true &&
|
|
||||||
(responsiveUtils.isMobile(context) ||
|
|
||||||
responsiveUtils.isTablet(context) ||
|
|
||||||
responsiveUtils.isLandscapeMobile(context))) {
|
|
||||||
return Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 5),
|
|
||||||
child: VacationNotificationMessageWidget(
|
|
||||||
radius: 0,
|
|
||||||
margin: EdgeInsets.zero,
|
|
||||||
vacationResponse: controller.mailboxDashBoardController.vacationResponse.value!,
|
|
||||||
actionGotoVacationSetting: () => controller.mailboxDashBoardController.goToVacationSetting(),
|
|
||||||
actionEndNow: () => controller.mailboxDashBoardController.disableVacationResponder()),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
if (responsiveUtils.isWebDesktop(context))
|
if (responsiveUtils.isWebDesktop(context))
|
||||||
const SizedBox(height: 5),
|
const SizedBox(height: 5),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
@@ -100,18 +86,51 @@ class EmailView extends GetWidget<EmailController> with NetworkConnectionMixin {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _supportVerticalDivider(BuildContext context) {
|
||||||
|
if (BuildUtils.isWeb) {
|
||||||
|
return responsiveUtils.isTabletLarge(context);
|
||||||
|
} else {
|
||||||
|
return responsiveUtils.isLandscapeTablet(context) || responsiveUtils.isDesktop(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildDivider({EdgeInsets? edgeInsets}){
|
Widget _buildDivider({EdgeInsets? edgeInsets}){
|
||||||
return Padding(
|
return Padding(
|
||||||
padding: edgeInsets ?? const EdgeInsets.symmetric(horizontal: 16),
|
padding: edgeInsets ?? const EdgeInsets.symmetric(horizontal: 16),
|
||||||
child: const Divider(color: AppColor.colorDividerEmailView, height: 0.5));
|
child: const Divider(color: AppColor.colorDividerEmailView, height: 0.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Widget _buildVacationNotificationMessage(BuildContext context) {
|
||||||
|
return Obx(() {
|
||||||
|
final vacation = controller.mailboxDashBoardController.vacationResponse.value;
|
||||||
|
if (vacation?.vacationResponderIsValid == true &&
|
||||||
|
(responsiveUtils.isMobile(context) ||
|
||||||
|
responsiveUtils.isTablet(context) ||
|
||||||
|
responsiveUtils.isLandscapeMobile(context))) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 5),
|
||||||
|
child: VacationNotificationMessageWidget(
|
||||||
|
radius: 0,
|
||||||
|
margin: EdgeInsets.zero,
|
||||||
|
vacationResponse: vacation!,
|
||||||
|
actionGotoVacationSetting: () => controller.mailboxDashBoardController.goToVacationSetting(),
|
||||||
|
actionEndNow: () => controller.mailboxDashBoardController.disableVacationResponder()),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildAppBar(BuildContext context) {
|
Widget _buildAppBar(BuildContext context) {
|
||||||
return Obx(() => Padding(
|
return Obx(() => Padding(
|
||||||
padding: const EdgeInsets.only(top: 6),
|
padding: const EdgeInsets.only(top: 6),
|
||||||
child: AppBarMailWidgetBuilder(
|
child: AppBarMailWidgetBuilder(
|
||||||
controller.currentEmail,
|
controller.currentEmail,
|
||||||
controller.currentMailbox,
|
currentMailbox: controller.mailboxDashBoardController.searchController.isSearchEmailRunning
|
||||||
|
? controller.currentEmail?.findMailboxContain(controller.mailboxDashBoardController.mapMailbox)
|
||||||
|
: controller.currentMailbox,
|
||||||
|
isSearchIsRunning: controller.mailboxDashBoardController.searchController.isSearchEmailRunning,
|
||||||
onBackActionClick: () => controller.closeEmailView(context),
|
onBackActionClick: () => controller.closeEmailView(context),
|
||||||
onEmailActionClick: (email, action) =>
|
onEmailActionClick: (email, action) =>
|
||||||
controller.handleEmailAction(context, email, action),
|
controller.handleEmailAction(context, email, action),
|
||||||
|
|||||||
@@ -15,19 +15,21 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
|
|||||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||||
|
|
||||||
final PresentationEmail? _presentationEmail;
|
final PresentationEmail? _presentationEmail;
|
||||||
final PresentationMailbox? _currentMailbox;
|
final PresentationMailbox? currentMailbox;
|
||||||
|
final bool isSearchIsRunning;
|
||||||
final OnBackActionClick? onBackActionClick;
|
final OnBackActionClick? onBackActionClick;
|
||||||
final OnEmailActionClick? onEmailActionClick;
|
final OnEmailActionClick? onEmailActionClick;
|
||||||
final OnMoreActionClick? onMoreActionClick;
|
final OnMoreActionClick? onMoreActionClick;
|
||||||
|
|
||||||
AppBarMailWidgetBuilder(
|
AppBarMailWidgetBuilder(
|
||||||
this._presentationEmail,
|
this._presentationEmail,
|
||||||
this._currentMailbox,
|
|
||||||
{
|
{
|
||||||
Key? key,
|
Key? key,
|
||||||
|
this.currentMailbox,
|
||||||
this.onBackActionClick,
|
this.onBackActionClick,
|
||||||
this.onEmailActionClick,
|
this.onEmailActionClick,
|
||||||
this.onMoreActionClick
|
this.onMoreActionClick,
|
||||||
|
this.isSearchIsRunning = false,
|
||||||
}
|
}
|
||||||
) : super(key: key);
|
) : super(key: key);
|
||||||
|
|
||||||
@@ -39,7 +41,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
|
|||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
padding: const EdgeInsets.only(left: 8),
|
padding: const EdgeInsets.only(left: 8),
|
||||||
child: Row(children: [
|
child: Row(children: [
|
||||||
if (_responsiveUtils.mailboxDashboardHasMailboxAndEmailView(context))
|
if (_supportDisplayMailboxNameTitle(context))
|
||||||
Material(
|
Material(
|
||||||
color: Colors.transparent,
|
color: Colors.transparent,
|
||||||
child: InkWell(
|
child: InkWell(
|
||||||
@@ -63,7 +65,7 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
|
|||||||
constraints: BoxConstraints(
|
constraints: BoxConstraints(
|
||||||
maxWidth: _responsiveUtils.getSizeScreenWidth(context) - 250),
|
maxWidth: _responsiveUtils.getSizeScreenWidth(context) - 250),
|
||||||
child: Text(
|
child: Text(
|
||||||
_currentMailbox?.name?.name.capitalizeFirstEach ?? '',
|
currentMailbox?.name?.name.capitalizeFirstEach ?? '',
|
||||||
maxLines: 1,
|
maxLines: 1,
|
||||||
overflow: CommonTextStyle.defaultTextOverFlow,
|
overflow: CommonTextStyle.defaultTextOverFlow,
|
||||||
softWrap: CommonTextStyle.defaultSoftWrap,
|
softWrap: CommonTextStyle.defaultSoftWrap,
|
||||||
@@ -80,6 +82,20 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool _supportDisplayMailboxNameTitle(BuildContext context) {
|
||||||
|
if (BuildUtils.isWeb) {
|
||||||
|
return _responsiveUtils.isDesktop(context) ||
|
||||||
|
_responsiveUtils.isMobile(context) ||
|
||||||
|
_responsiveUtils.isTablet(context) ||
|
||||||
|
isSearchIsRunning;
|
||||||
|
} else {
|
||||||
|
return _responsiveUtils.isPortraitMobile(context) ||
|
||||||
|
_responsiveUtils.isLandscapeMobile(context) ||
|
||||||
|
_responsiveUtils.isTablet(context) ||
|
||||||
|
isSearchIsRunning;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Widget _buildListOptionButton(BuildContext context) {
|
Widget _buildListOptionButton(BuildContext context) {
|
||||||
return Row(
|
return Row(
|
||||||
children: [
|
children: [
|
||||||
@@ -104,18 +120,18 @@ class AppBarMailWidgetBuilder extends StatelessWidget {
|
|||||||
: EmailActionType.markAsStarred)),
|
: EmailActionType.markAsStarred)),
|
||||||
buildIconWeb(
|
buildIconWeb(
|
||||||
icon: SvgPicture.asset(
|
icon: SvgPicture.asset(
|
||||||
_currentMailbox?.role == PresentationMailbox.roleTrash
|
currentMailbox?.role == PresentationMailbox.roleTrash
|
||||||
? _imagePaths.icDeleteComposer
|
? _imagePaths.icDeleteComposer
|
||||||
: _imagePaths.icDelete,
|
: _imagePaths.icDelete,
|
||||||
color: AppColor.colorDefaultButton,
|
color: AppColor.colorDefaultButton,
|
||||||
width: 24,
|
width: 24,
|
||||||
height: 24,
|
height: 24,
|
||||||
fit: BoxFit.fill),
|
fit: BoxFit.fill),
|
||||||
tooltip: _currentMailbox?.role != PresentationMailbox.roleTrash
|
tooltip: currentMailbox?.role != PresentationMailbox.roleTrash
|
||||||
? AppLocalizations.of(context).move_to_trash
|
? AppLocalizations.of(context).move_to_trash
|
||||||
: AppLocalizations.of(context).delete_permanently,
|
: AppLocalizations.of(context).delete_permanently,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
if (_currentMailbox?.role != PresentationMailbox.roleTrash) {
|
if (currentMailbox?.role != PresentationMailbox.roleTrash) {
|
||||||
onEmailActionClick?.call(
|
onEmailActionClick?.call(
|
||||||
_presentationEmail!,
|
_presentationEmail!,
|
||||||
EmailActionType.moveToTrash);
|
EmailActionType.moveToTrash);
|
||||||
|
|||||||
@@ -165,6 +165,8 @@ class SearchController extends BaseController {
|
|||||||
|
|
||||||
bool isAdvanceSearchActive() => isAdvancedSearchHasApply.isTrue;
|
bool isAdvanceSearchActive() => isAdvancedSearchHasApply.isTrue;
|
||||||
|
|
||||||
|
bool get isSearchEmailRunning => isSearchActive() || isAdvanceSearchActive();
|
||||||
|
|
||||||
void enableSearch() {
|
void enableSearch() {
|
||||||
searchState.value = searchState.value.enableSearchState();
|
searchState.value = searchState.value.enableSearchState();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -955,10 +955,15 @@ class ThreadController extends BaseController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void pressEmailAction(BuildContext context, EmailActionType actionType, PresentationEmail selectedEmail) {
|
void pressEmailAction(
|
||||||
|
BuildContext context,
|
||||||
|
EmailActionType actionType,
|
||||||
|
PresentationEmail selectedEmail,
|
||||||
|
{PresentationMailbox? mailboxContain}
|
||||||
|
) {
|
||||||
switch(actionType) {
|
switch(actionType) {
|
||||||
case EmailActionType.preview:
|
case EmailActionType.preview:
|
||||||
if (mailboxDashBoardController.selectedMailbox.value?.role == PresentationMailbox.roleDrafts) {
|
if (mailboxContain?.isDrafts == true) {
|
||||||
editEmail(selectedEmail);
|
editEmail(selectedEmail);
|
||||||
} else {
|
} else {
|
||||||
previewEmail(context, selectedEmail);
|
previewEmail(context, selectedEmail);
|
||||||
|
|||||||
@@ -573,7 +573,14 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
controller.searchController.searchState.value.searchStatus,
|
controller.searchController.searchState.value.searchStatus,
|
||||||
controller.searchQuery,
|
controller.searchQuery,
|
||||||
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue)
|
advancedSearchActivated: controller.searchController.isAdvancedSearchHasApply.isTrue)
|
||||||
..addOnPressEmailActionClick((action, email) => controller.pressEmailAction(context, action, email))
|
..addOnPressEmailActionClick((action, email) =>
|
||||||
|
controller.pressEmailAction(
|
||||||
|
context,
|
||||||
|
action,
|
||||||
|
email,
|
||||||
|
mailboxContain: controller.searchController.isSearchEmailRunning
|
||||||
|
? email.findMailboxContain(controller.mailboxDashBoardController.mapMailbox)
|
||||||
|
: controller.currentMailbox))
|
||||||
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
..addOnMoreActionClick((email, position) => _responsiveUtils.isMobile(context)
|
||||||
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
|
? controller.openContextMenuAction(context, _contextMenuActionTile(context, email))
|
||||||
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
|
: controller.openPopupMenuAction(context, position, _popupMenuActionTile(context, email))))
|
||||||
@@ -672,12 +679,18 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _markAsEmailSpamOrUnSpamAction(BuildContext context, PresentationEmail email) {
|
Widget _markAsEmailSpamOrUnSpamAction(BuildContext context, PresentationEmail email) {
|
||||||
|
final mailboxContain = controller.searchController.isSearchEmailRunning
|
||||||
|
? email.findMailboxContain(controller.mailboxDashBoardController.mapMailbox)
|
||||||
|
: controller.currentMailbox;
|
||||||
return (EmailActionCupertinoActionSheetActionBuilder(
|
return (EmailActionCupertinoActionSheetActionBuilder(
|
||||||
const Key('mark_as_spam_or_un_spam_action'),
|
const Key('mark_as_spam_or_un_spam_action'),
|
||||||
SvgPicture.asset(
|
SvgPicture.asset(
|
||||||
controller.currentMailbox?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
|
mailboxContain?.isSpam == true ? _imagePaths.icNotSpam : _imagePaths.icSpam,
|
||||||
width: 28, height: 28, fit: BoxFit.fill, color: AppColor.colorTextButton),
|
width: 28,
|
||||||
controller.currentMailbox?.isSpam == true
|
height: 28,
|
||||||
|
fit: BoxFit.fill,
|
||||||
|
color: AppColor.colorTextButton),
|
||||||
|
mailboxContain?.isSpam == true
|
||||||
? AppLocalizations.of(context).remove_from_spam
|
? AppLocalizations.of(context).remove_from_spam
|
||||||
: AppLocalizations.of(context).mark_as_spam,
|
: AppLocalizations.of(context).mark_as_spam,
|
||||||
email,
|
email,
|
||||||
@@ -688,10 +701,11 @@ class ThreadView extends GetWidget<ThreadController> with AppLoaderMixin,
|
|||||||
? const EdgeInsets.only(right: 12)
|
? const EdgeInsets.only(right: 12)
|
||||||
: EdgeInsets.zero)
|
: EdgeInsets.zero)
|
||||||
..onActionClick((email) => controller.pressEmailAction(context,
|
..onActionClick((email) => controller.pressEmailAction(context,
|
||||||
controller.currentMailbox?.isSpam == true
|
mailboxContain?.isSpam == true
|
||||||
? EmailActionType.unSpam
|
? EmailActionType.unSpam
|
||||||
: EmailActionType.moveToSpam,
|
: EmailActionType.moveToSpam,
|
||||||
email)))
|
email,
|
||||||
|
mailboxContain: mailboxContain)))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -147,4 +147,17 @@ extension PresentationEmailExtension on PresentationEmail {
|
|||||||
selectMode: selectMode,
|
selectMode: selectMode,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PresentationMailbox? findMailboxContain(Map<MailboxId, PresentationMailbox> mapMailbox) {
|
||||||
|
final newMailboxIds = mailboxIds;
|
||||||
|
newMailboxIds?.removeWhere((key, value) => !value);
|
||||||
|
|
||||||
|
if (newMailboxIds?.isNotEmpty == true) {
|
||||||
|
final firstMailboxId = newMailboxIds!.keys.first;
|
||||||
|
if (mapMailbox.containsKey(firstMailboxId)) {
|
||||||
|
return mapMailbox[firstMailboxId];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user