TF-153 Combine moveToMailbox and moveToTrash to moveToMailbox using EmailActionType object

This commit is contained in:
dab246
2022-04-15 15:51:37 +07:00
committed by Dat H. Pham
parent 60aabfb6d1
commit 16c5aed64e
45 changed files with 268 additions and 722 deletions
@@ -1,153 +0,0 @@
import 'package:core/core.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:model/email/presentation_email.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef OnCloseActionClick = void Function();
typedef OnMarkAsEmailReadActionClick = void Function(List<PresentationEmail> listEmail);
typedef OnRemoveEmailActionClick = void Function(List<PresentationEmail> listEmail);
typedef OnOpenContextMenuActionClick = void Function(List<PresentationEmail> listEmail);
typedef OnOpenPopupMenuActionClick = void Function(List<PresentationEmail> listEmail, RelativeRect position);
class AppBarThreadSelectModeActiveBuilder {
OnCloseActionClick? _onCloseActionClick;
OnMarkAsEmailReadActionClick? _onMarkAsEmailReadActionClick;
// OnRemoveEmailActionClick? _onRemoveEmailActionClick;
OnOpenContextMenuActionClick? _onOpenContextMenuActionClick;
OnOpenPopupMenuActionClick? _onOpenPopupMenuActionClick;
final BuildContext _context;
final ImagePaths _imagePaths;
final List<PresentationEmail> _listEmail;
final ResponsiveUtils _responsiveUtils;
AppBarThreadSelectModeActiveBuilder(this._context, this._imagePaths, this._listEmail, this._responsiveUtils);
void addCloseActionClick(OnCloseActionClick onCloseActionClick) {
_onCloseActionClick = onCloseActionClick;
}
void addOnMarkAsEmailReadActionClick(OnMarkAsEmailReadActionClick onMarkAsEmailReadActionClick) {
_onMarkAsEmailReadActionClick = onMarkAsEmailReadActionClick;
}
// void addRemoveEmailActionClick(OnRemoveEmailActionClick onRemoveEmailActionClick) {
// _onRemoveEmailActionClick = onRemoveEmailActionClick;
// }
void addOpenContextMenuActionClick(OnOpenContextMenuActionClick onOpenContextMenuActionClick) {
_onOpenContextMenuActionClick = onOpenContextMenuActionClick;
}
void addOnOpenPopupMenuActionClick(OnOpenPopupMenuActionClick onOpenPopupMenuActionClick) {
_onOpenPopupMenuActionClick = onOpenPopupMenuActionClick;
}
Widget build() {
return Container(
key: Key('app_bar_thread_select_mode_active'),
alignment: Alignment.topCenter,
color: Colors.white,
margin: EdgeInsets.zero,
padding: EdgeInsets.only(left: 10, right: 16, top: 10, bottom: 10),
child: MediaQuery(
data: MediaQueryData(padding: EdgeInsets.zero),
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
children: [
_buildBackButton(),
Expanded(child: _buildCountItemSelected()),
_buildListOptionButton(),
]
)
)
);
}
Widget _buildCountItemSelected() {
return Padding(
padding: EdgeInsets.only(left: 12),
child: Text(
AppLocalizations.of(_context).count_email_selected(_listEmail.length),
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 18, color: AppColor.nameUserColor, fontWeight: FontWeight.w500)));
}
Widget _buildBackButton() {
return Material(
borderRadius: BorderRadius.circular(12),
color: Colors.transparent,
child: IconButton(
color: AppColor.baseTextColor,
icon: SvgPicture.asset(_imagePaths.icComposerClose, color: AppColor.baseTextColor, fit: BoxFit.fill),
onPressed: () => {
if (_onCloseActionClick != null) {
_onCloseActionClick!()
}
}
));
}
Widget _buildListOptionButton() {
return Row(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
// IconButton(
// key: Key('button_remove_email_selected'),
// color: AppColor.baseTextColor,
// icon: SvgPicture.asset(_imagePaths.icTrash, color: AppColor.baseTextColor, fit: BoxFit.fill),
// onPressed: () => {
// if (_onRemoveEmailActionClick != null) {
// _onRemoveEmailActionClick!(_listEmail)
// }
// }),
Material(
borderRadius: BorderRadius.circular(12),
color: Colors.transparent,
child: IconButton(
key: Key('button_unread_email_selected'),
color: AppColor.baseTextColor,
icon: SvgPicture.asset(_imagePaths.icEyeDisable, color: AppColor.baseTextColor, fit: BoxFit.fill),
onPressed: () => {
if (_onMarkAsEmailReadActionClick != null) {
_onMarkAsEmailReadActionClick!(_listEmail)
}
})),
GestureDetector(
key: Key('button_menu_select_email'),
onTap: () => {
if (_onOpenContextMenuActionClick != null && _responsiveUtils.isMobile(_context)) {
_onOpenContextMenuActionClick!(_listEmail)
}
},
child: Padding(
padding: EdgeInsets.all(8),
child: SvgPicture.asset(
_imagePaths.icComposerMenu,
color: AppColor.baseTextColor,
width: 24,
height: 24,
fit: BoxFit.fill),
),
onTapDown: (detail) {
if (_onOpenPopupMenuActionClick != null && !_responsiveUtils.isMobile(_context)) {
final screenSize = MediaQuery.of(_context).size;
final offset = detail.globalPosition;
final position = RelativeRect.fromLTRB(
offset.dx,
offset.dy,
screenSize.width - offset.dx,
screenSize.height - offset.dy,
);
_onOpenPopupMenuActionClick!(_listEmail, position);
}
})
]
);
}
}
@@ -107,12 +107,12 @@ class AppBarThreadWidgetBuilder {
icon: SvgPicture.asset(_listSelectionEmail.isAllEmailStarred ? _imagePaths.icUnStar : _imagePaths.icStar, fit: BoxFit.fill),
tooltip: _listSelectionEmail.isAllEmailStarred ? AppLocalizations.of(_context).not_starred : AppLocalizations.of(_context).starred,
onTap: () => _onEmailSelectionAction?.call(
_listSelectionEmail.isAllEmailStarred ? EmailActionType.markAsUnStar : EmailActionType.markAsStar,
_listSelectionEmail.isAllEmailStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred,
_listSelectionEmail)),
buildIconWeb(
icon: SvgPicture.asset(_imagePaths.icMove, fit: BoxFit.fill),
tooltip: AppLocalizations.of(_context).move,
onTap: () => _onEmailSelectionAction?.call(EmailActionType.move, _listSelectionEmail)),
onTap: () => _onEmailSelectionAction?.call(EmailActionType.moveToMailbox, _listSelectionEmail)),
buildIconWeb(
icon: SvgPicture.asset(_imagePaths.icDelete, fit: BoxFit.fill),
tooltip: _presentationMailbox?.role != PresentationMailbox.roleTrash
@@ -65,10 +65,10 @@ class BottomBarThreadSelectionWidget {
..onPressActionClick(() {
if (_onPressEmailSelectionActionClick != null) {
_onPressEmailSelectionActionClick!(
_listSelectionEmail.isAllEmailStarred ? EmailActionType.markAsUnStar : EmailActionType.markAsStar,
_listSelectionEmail.isAllEmailStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred,
_listSelectionEmail);
}})
..text(_listSelectionEmail.isAllEmailStarred ? AppLocalizations.of(_context).mark_as_unstar : AppLocalizations.of(_context).mark_as_star,
..text(_listSelectionEmail.isAllEmailStarred ? AppLocalizations.of(_context).not_starred : AppLocalizations.of(_context).starred,
isVertical: _responsiveUtils.isMobile(_context)))
.build()),
Expanded(child: (ButtonBuilder(_imagePaths.icMove)
@@ -77,7 +77,7 @@ class BottomBarThreadSelectionWidget {
..textStyle(TextStyle(fontSize: 12, color: AppColor.colorTextButton))
..onPressActionClick(() {
if (_onPressEmailSelectionActionClick != null) {
_onPressEmailSelectionActionClick!(EmailActionType.move, _listSelectionEmail);
_onPressEmailSelectionActionClick!(EmailActionType.moveToMailbox, _listSelectionEmail);
}})
..text(AppLocalizations.of(_context).move, isVertical: _responsiveUtils.isMobile(_context)))
.build()),
@@ -80,7 +80,7 @@ class EmailTileBuilder {
),
title: Row(
children: [
if (_presentationEmail.isUnReadEmail())
if (!_presentationEmail.hasRead)
Padding(
padding: EdgeInsets.only(right: 5),
child: SvgPicture.asset(_imagePaths.icUnreadStatus, width: 9, height: 9, fit: BoxFit.fill)),
@@ -155,7 +155,7 @@ class EmailTileBuilder {
style: TextStyle(fontSize: 10, color: AppColor.mailboxTextColor, fontWeight: FontWeight.bold),
)
),
if (_presentationEmail.isFlaggedEmail() )
if (_presentationEmail.hasStarred)
(ButtonBuilder(_imagePaths.icStar)
..paddingIcon(EdgeInsets.zero)
..size(15))
@@ -199,18 +199,18 @@ class EmailTileBuilder {
Container(
padding: EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center,
child: _presentationEmail.isUnReadEmail()
child: !_presentationEmail.hasRead
? SvgPicture.asset(_imagePaths.icUnreadStatus, width: 9, height: 9, fit: BoxFit.fill)
: SizedBox(width: 9)),
buildIconWeb(
icon: SvgPicture.asset(
_presentationEmail.isFlaggedEmail() ? _imagePaths.icStar : _imagePaths.icUnStar,
_presentationEmail.hasStarred ? _imagePaths.icStar : _imagePaths.icUnStar,
width: 20,
height: 20,
fit: BoxFit.fill),
tooltip: _presentationEmail.isFlaggedEmail() ? AppLocalizations.of(_context).starred : AppLocalizations.of(_context).not_starred,
tooltip: _presentationEmail.hasStarred ? AppLocalizations.of(_context).starred : AppLocalizations.of(_context).not_starred,
onTap: () => _emailActionClick?.call(
_presentationEmail.isFlaggedEmail() ? EmailActionType.markAsUnStar : EmailActionType.markAsStar,
_presentationEmail.hasStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred,
_presentationEmail)),
if (_selectModeAll == SelectMode.INACTIVE) SizedBox(width: 8),
GestureDetector(
@@ -108,7 +108,7 @@ class EmailTileBuilder {
child: _buildAvatarIcon(),
),
title: Row(children: [
if (_presentationEmail.isUnReadEmail())
if (!_presentationEmail.hasRead)
Padding(
padding: EdgeInsets.only(right: 5),
child: SvgPicture.asset(_imagePaths.icUnreadStatus, width: 9, height: 9, fit: BoxFit.fill)),
@@ -178,7 +178,7 @@ class EmailTileBuilder {
style: TextStyle(fontSize: 10, color: AppColor.mailboxTextColor, fontWeight: FontWeight.bold),
)
),
if (_presentationEmail.isFlaggedEmail() )
if (_presentationEmail.hasStarred)
(ButtonBuilder(_imagePaths.icStar)
..paddingIcon(EdgeInsets.zero)
..size(15))
@@ -230,7 +230,7 @@ class EmailTileBuilder {
Transform(
transform: Matrix4.translationValues(0.0, isHoverItem ? -10.0 : 0.0, 0.0),
child: Row(children: [
if (_presentationEmail.isUnReadEmail())
if (!_presentationEmail.hasRead)
Padding(
padding: EdgeInsets.only(right: 5),
child: SvgPicture.asset(_imagePaths.icUnreadStatus, width: 9, height: 9, fit: BoxFit.fill)),
@@ -287,7 +287,7 @@ class EmailTileBuilder {
style: TextStyle(fontSize: 10, color: AppColor.mailboxTextColor, fontWeight: FontWeight.bold),
)
),
if (_presentationEmail.isFlaggedEmail() )
if (_presentationEmail.hasStarred)
(ButtonBuilder(_imagePaths.icStar)
..paddingIcon(EdgeInsets.zero)
..size(15))
@@ -335,18 +335,18 @@ class EmailTileBuilder {
Container(
padding: EdgeInsets.only(left: 16, right: 16),
alignment: Alignment.center,
child: _presentationEmail.isUnReadEmail()
child: !_presentationEmail.hasRead
? SvgPicture.asset(_imagePaths.icUnreadStatus, width: 9, height: 9, fit: BoxFit.fill)
: SizedBox(width: 9)),
buildIconWeb(
icon: SvgPicture.asset(
_presentationEmail.isFlaggedEmail() ? _imagePaths.icStar : _imagePaths.icUnStar,
_presentationEmail.hasStarred ? _imagePaths.icStar : _imagePaths.icUnStar,
width: 20,
height: 20,
fit: BoxFit.fill),
tooltip: _presentationEmail.isFlaggedEmail() ? AppLocalizations.of(_context).starred : AppLocalizations.of(_context).not_starred,
tooltip: _presentationEmail.hasStarred ? AppLocalizations.of(_context).starred : AppLocalizations.of(_context).not_starred,
onTap: () => _emailActionClick?.call(
_presentationEmail.isFlaggedEmail() ? EmailActionType.markAsUnStar : EmailActionType.markAsStar,
_presentationEmail.hasStarred ? EmailActionType.unMarkAsStarred : EmailActionType.markAsStarred,
_presentationEmail)),
if (_selectModeAll == SelectMode.INACTIVE) SizedBox(width: 8),
GestureDetector(
@@ -396,15 +396,15 @@ class EmailTileBuilder {
return Row(children: [
buildIconWeb(
icon: SvgPicture.asset(
_presentationEmail.isReadEmail() ? _imagePaths.icRead : _imagePaths.icUnread,
_presentationEmail.hasRead ? _imagePaths.icRead : _imagePaths.icUnread,
color: AppColor.colorActionButtonHover,
width: _responsiveUtils.isDesktop(_context) ? 16 : 14,
height: _responsiveUtils.isDesktop(_context) ? 16 : 14,
fit: BoxFit.fill),
splashRadius: _responsiveUtils.isDesktop(_context) ? 15 : 10,
tooltip: _presentationEmail.isReadEmail() ? AppLocalizations.of(_context).mark_as_unread : AppLocalizations.of(_context).mark_as_read,
tooltip: _presentationEmail.hasRead ? AppLocalizations.of(_context).mark_as_unread : AppLocalizations.of(_context).mark_as_read,
onTap: () => _emailActionClick?.call(
_presentationEmail.isReadEmail() ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
_presentationEmail.hasRead ? EmailActionType.markAsUnread : EmailActionType.markAsRead,
_presentationEmail)),
buildIconWeb(
icon: SvgPicture.asset(
@@ -415,7 +415,7 @@ class EmailTileBuilder {
fit: BoxFit.fill),
splashRadius: _responsiveUtils.isDesktop(_context) ? 15 : 10,
tooltip: AppLocalizations.of(_context).move,
onTap: () => _emailActionClick?.call(EmailActionType.move, _presentationEmail)),
onTap: () => _emailActionClick?.call(EmailActionType.moveToMailbox, _presentationEmail)),
buildIconWeb(
icon: SvgPicture.asset(
_imagePaths.icDelete,