TF-1984 Show Empty action for Trash and Spam mailbox
(cherry picked from commit da70fe0678982be8bb4c2f8daa4c3cb76fc058a0)
This commit is contained in:
@@ -202,6 +202,7 @@ extension AppColor on Color {
|
|||||||
static const colorLabelQuotas = Color(0xFF818C99);
|
static const colorLabelQuotas = Color(0xFF818C99);
|
||||||
static const colorLabelCancelButton = Color(0xFFAEB7C2);
|
static const colorLabelCancelButton = Color(0xFFAEB7C2);
|
||||||
static const colorCreateFiltersButton = Color(0xFFF3F3F7);
|
static const colorCreateFiltersButton = Color(0xFFF3F3F7);
|
||||||
|
static const colorTextBody = Color(0xFF818C99);
|
||||||
|
|
||||||
static const mapGradientColor = [
|
static const mapGradientColor = [
|
||||||
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
[Color(0xFF21D4FD), Color(0xFFB721FF)],
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import 'package:model/mailbox/mailbox_state.dart';
|
|||||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||||
import 'package:model/mailbox/select_mode.dart';
|
import 'package:model/mailbox/select_mode.dart';
|
||||||
|
|
||||||
class MailboxNode with EquatableMixin{
|
class MailboxNode with EquatableMixin {
|
||||||
static final PresentationMailbox _root = PresentationMailbox(MailboxId(Id('root')));
|
static final PresentationMailbox _root = PresentationMailbox(MailboxId(Id('root')));
|
||||||
|
|
||||||
PresentationMailbox item;
|
PresentationMailbox item;
|
||||||
|
|||||||
@@ -10,8 +10,17 @@ class LabelMailboxItemWidgetStyles {
|
|||||||
static const Color labelTeamMailboxTextColor = Colors.black;
|
static const Color labelTeamMailboxTextColor = Colors.black;
|
||||||
static const Color labelFolderTextColor = AppColor.colorNameEmail;
|
static const Color labelFolderTextColor = AppColor.colorNameEmail;
|
||||||
static const Color teamMailboxTextColor = AppColor.colorEmailAddressFull;
|
static const Color teamMailboxTextColor = AppColor.colorEmailAddressFull;
|
||||||
|
static const Color emptyButtonBackground = Colors.transparent;
|
||||||
|
|
||||||
static const FontWeight labelTeamMailboxTextFontWeight = FontWeight.bold;
|
static const FontWeight labelTeamMailboxTextFontWeight = FontWeight.bold;
|
||||||
static const FontWeight labelFolderTextFontWeight = FontWeight.normal;
|
static const FontWeight labelFolderTextFontWeight = FontWeight.normal;
|
||||||
static const FontWeight teamMailboxTextFontWeight = FontWeight.w400;
|
static const FontWeight teamMailboxTextFontWeight = FontWeight.w400;
|
||||||
|
|
||||||
|
static const EdgeInsetsGeometry emptyButtonPadding = EdgeInsetsDirectional.symmetric(vertical: 2, horizontal: 5);
|
||||||
|
|
||||||
|
static const TextStyle emptyButtonTextStyle = TextStyle(
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
fontSize: 15,
|
||||||
|
color: AppColor.colorTextBody
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
|
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/cupertino.dart';
|
|
||||||
|
|
||||||
class TrailingMailboxItemWidgetStyles {
|
class TrailingMailboxItemWidgetStyles {
|
||||||
static const double menuIconSize = 20;
|
static const double menuIconSize = 20;
|
||||||
|
|
||||||
static const EdgeInsetsGeometry countEmailsPadding = EdgeInsetsDirectional.only(start: PlatformInfo.isWeb ? 10 : 12);
|
static const Color menuIconBackgroundColor = Colors.transparent;
|
||||||
static const EdgeInsetsGeometry menuIconPadding = EdgeInsetsDirectional.only(start: 8);
|
|
||||||
|
static const EdgeInsetsGeometry countEmailsPadding = EdgeInsetsDirectional.only(start: 5);
|
||||||
|
static const EdgeInsetsGeometry menuIconMargin = EdgeInsetsDirectional.only(start: 5);
|
||||||
|
static const EdgeInsetsGeometry menuIconPadding = EdgeInsetsDirectional.all(2);
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||||
import 'package:core/presentation/views/text/text_overflow_builder.dart';
|
import 'package:core/presentation/views/text/text_overflow_builder.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
@@ -7,6 +8,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.d
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/styles/label_mailbox_item_widget_styles.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/styles/label_mailbox_item_widget_styles.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart';
|
||||||
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
class LabelMailboxItemWidget extends StatelessWidget {
|
class LabelMailboxItemWidget extends StatelessWidget {
|
||||||
|
|
||||||
@@ -41,6 +43,14 @@ class LabelMailboxItemWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
if (mailboxNode.item.allowedHasEmptyAction)
|
||||||
|
TMailButtonWidget.fromText(
|
||||||
|
text: AppLocalizations.of(context).empty,
|
||||||
|
textStyle: LabelMailboxItemWidgetStyles.emptyButtonTextStyle,
|
||||||
|
backgroundColor: LabelMailboxItemWidgetStyles.emptyButtonBackground,
|
||||||
|
padding: LabelMailboxItemWidgetStyles.emptyButtonPadding,
|
||||||
|
onTapActionCallback: () => {},
|
||||||
|
),
|
||||||
TrailingMailboxItemWidget(
|
TrailingMailboxItemWidget(
|
||||||
mailboxNode: mailboxNode,
|
mailboxNode: mailboxNode,
|
||||||
isItemHovered: isItemHovered,
|
isItemHovered: isItemHovered,
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
|
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||||
import 'package:core/utils/platform_info.dart';
|
import 'package:core/utils/platform_info.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
import 'package:model/extensions/presentation_mailbox_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||||
@@ -16,7 +16,9 @@ class TrailingMailboxItemWidget extends StatelessWidget {
|
|||||||
final bool isItemHovered;
|
final bool isItemHovered;
|
||||||
final OnClickOpenMenuMailboxNodeAction? onMenuActionClick;
|
final OnClickOpenMenuMailboxNodeAction? onMenuActionClick;
|
||||||
|
|
||||||
const TrailingMailboxItemWidget({
|
final _imagePaths = Get.find<ImagePaths>();
|
||||||
|
|
||||||
|
TrailingMailboxItemWidget({
|
||||||
super.key,
|
super.key,
|
||||||
required this.mailboxNode,
|
required this.mailboxNode,
|
||||||
this.isItemHovered = false,
|
this.isItemHovered = false,
|
||||||
@@ -25,32 +27,15 @@ class TrailingMailboxItemWidget extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final imagePaths = Get.find<ImagePaths>();
|
|
||||||
|
|
||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
if (isItemHovered) {
|
if (isItemHovered) {
|
||||||
return Padding(
|
return TMailButtonWidget.fromIcon(
|
||||||
|
margin: TrailingMailboxItemWidgetStyles.menuIconMargin,
|
||||||
|
icon: _imagePaths.icComposerMenu,
|
||||||
|
iconSize: TrailingMailboxItemWidgetStyles.menuIconSize,
|
||||||
padding: TrailingMailboxItemWidgetStyles.menuIconPadding,
|
padding: TrailingMailboxItemWidgetStyles.menuIconPadding,
|
||||||
child: InkWell(
|
backgroundColor: TrailingMailboxItemWidgetStyles.menuIconBackgroundColor,
|
||||||
onTapDown: (detail) {
|
onTapActionAtPositionCallback: (position) => onMenuActionClick?.call(position, mailboxNode),
|
||||||
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,
|
|
||||||
);
|
|
||||||
onMenuActionClick?.call(position, mailboxNode);
|
|
||||||
},
|
|
||||||
onTap: () => {},
|
|
||||||
child: SvgPicture.asset(
|
|
||||||
imagePaths.icComposerMenu,
|
|
||||||
width: TrailingMailboxItemWidgetStyles.menuIconSize,
|
|
||||||
height: TrailingMailboxItemWidgetStyles.menuIconSize,
|
|
||||||
fit: BoxFit.fill
|
|
||||||
)
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
} else if (mailboxNode.item.countUnreadEmails > 0 && mailboxNode.item.allowedToDisplayCountOfUnreadEmails) {
|
} else if (mailboxNode.item.countUnreadEmails > 0 && mailboxNode.item.allowedToDisplayCountOfUnreadEmails) {
|
||||||
return Padding(
|
return Padding(
|
||||||
|
|||||||
@@ -3288,4 +3288,11 @@ class AppLocalizations {
|
|||||||
args: [action]
|
args: [action]
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get empty {
|
||||||
|
return Intl.message(
|
||||||
|
'Empty',
|
||||||
|
name: 'empty',
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -47,6 +47,8 @@ extension PresentationMailboxExtension on PresentationMailbox {
|
|||||||
|
|
||||||
bool get allowedToDisplayCountOfTotalEmails => isTrash || isSpam;
|
bool get allowedToDisplayCountOfTotalEmails => isTrash || isSpam;
|
||||||
|
|
||||||
|
bool get allowedHasEmptyAction => (isTrash || isSpam) && countTotalEmails > 0;
|
||||||
|
|
||||||
String get countTotalEmailsAsString {
|
String get countTotalEmailsAsString {
|
||||||
if (countTotalEmails <= 0) return '';
|
if (countTotalEmails <= 0) return '';
|
||||||
return countTotalEmails <= 999 ? '$countTotalEmails' : '999+';
|
return countTotalEmails <= 999 ? '$countTotalEmails' : '999+';
|
||||||
|
|||||||
Reference in New Issue
Block a user