From 41a1efb5de000b66fc14cf9c8d9204175aa53e1c Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 30 Aug 2023 10:24:46 +0700 Subject: [PATCH] TF-1984 Show `Empty` action for Trash and Spam mailbox (cherry picked from commit da70fe0678982be8bb4c2f8daa4c3cb76fc058a0) --- .../extensions/color_extension.dart | 1 + .../presentation/model/mailbox_node.dart | 2 +- .../label_mailbox_item_widget_styles.dart | 9 +++++ .../trailing_mailbox_item_widget_styles.dart | 10 +++--- .../widgets/label_mailbox_item_widget.dart | 10 ++++++ .../widgets/trailing_mailbox_item_widget.dart | 35 ++++++------------- lib/main/localizations/app_localizations.dart | 7 ++++ .../presentation_mailbox_extension.dart | 2 ++ 8 files changed, 46 insertions(+), 30 deletions(-) diff --git a/core/lib/presentation/extensions/color_extension.dart b/core/lib/presentation/extensions/color_extension.dart index 219e84351..0256b50d6 100644 --- a/core/lib/presentation/extensions/color_extension.dart +++ b/core/lib/presentation/extensions/color_extension.dart @@ -202,6 +202,7 @@ extension AppColor on Color { static const colorLabelQuotas = Color(0xFF818C99); static const colorLabelCancelButton = Color(0xFFAEB7C2); static const colorCreateFiltersButton = Color(0xFFF3F3F7); + static const colorTextBody = Color(0xFF818C99); static const mapGradientColor = [ [Color(0xFF21D4FD), Color(0xFFB721FF)], diff --git a/lib/features/mailbox/presentation/model/mailbox_node.dart b/lib/features/mailbox/presentation/model/mailbox_node.dart index 43bcbe14e..59250cf4c 100644 --- a/lib/features/mailbox/presentation/model/mailbox_node.dart +++ b/lib/features/mailbox/presentation/model/mailbox_node.dart @@ -7,7 +7,7 @@ import 'package:model/mailbox/mailbox_state.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/select_mode.dart'; -class MailboxNode with EquatableMixin{ +class MailboxNode with EquatableMixin { static final PresentationMailbox _root = PresentationMailbox(MailboxId(Id('root'))); PresentationMailbox item; diff --git a/lib/features/mailbox/presentation/styles/label_mailbox_item_widget_styles.dart b/lib/features/mailbox/presentation/styles/label_mailbox_item_widget_styles.dart index 6f3741d2c..d8175dbfb 100644 --- a/lib/features/mailbox/presentation/styles/label_mailbox_item_widget_styles.dart +++ b/lib/features/mailbox/presentation/styles/label_mailbox_item_widget_styles.dart @@ -10,8 +10,17 @@ class LabelMailboxItemWidgetStyles { static const Color labelTeamMailboxTextColor = Colors.black; static const Color labelFolderTextColor = AppColor.colorNameEmail; static const Color teamMailboxTextColor = AppColor.colorEmailAddressFull; + static const Color emptyButtonBackground = Colors.transparent; static const FontWeight labelTeamMailboxTextFontWeight = FontWeight.bold; static const FontWeight labelFolderTextFontWeight = FontWeight.normal; 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 + ); } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/styles/trailing_mailbox_item_widget_styles.dart b/lib/features/mailbox/presentation/styles/trailing_mailbox_item_widget_styles.dart index 7059d89e7..8b88daa18 100644 --- a/lib/features/mailbox/presentation/styles/trailing_mailbox_item_widget_styles.dart +++ b/lib/features/mailbox/presentation/styles/trailing_mailbox_item_widget_styles.dart @@ -1,10 +1,12 @@ -import 'package:core/utils/platform_info.dart'; -import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; class TrailingMailboxItemWidgetStyles { static const double menuIconSize = 20; - static const EdgeInsetsGeometry countEmailsPadding = EdgeInsetsDirectional.only(start: PlatformInfo.isWeb ? 10 : 12); - static const EdgeInsetsGeometry menuIconPadding = EdgeInsetsDirectional.only(start: 8); + static const Color menuIconBackgroundColor = Colors.transparent; + + static const EdgeInsetsGeometry countEmailsPadding = EdgeInsetsDirectional.only(start: 5); + static const EdgeInsetsGeometry menuIconMargin = EdgeInsetsDirectional.only(start: 5); + static const EdgeInsetsGeometry menuIconPadding = EdgeInsetsDirectional.all(2); } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart b/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart index 381e0ba24..543758b44 100644 --- a/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart +++ b/lib/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart @@ -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:flutter/material.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/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/main/localizations/app_localizations.dart'; 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( mailboxNode: mailboxNode, isItemHovered: isItemHovered, diff --git a/lib/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart b/lib/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart index 8b8ec635b..9a3f44d62 100644 --- a/lib/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart +++ b/lib/features/mailbox/presentation/widgets/trailing_mailbox_item_widget.dart @@ -1,8 +1,8 @@ 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:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:model/extensions/presentation_mailbox_extension.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 OnClickOpenMenuMailboxNodeAction? onMenuActionClick; - const TrailingMailboxItemWidget({ + final _imagePaths = Get.find(); + + TrailingMailboxItemWidget({ super.key, required this.mailboxNode, this.isItemHovered = false, @@ -25,32 +27,15 @@ class TrailingMailboxItemWidget extends StatelessWidget { @override Widget build(BuildContext context) { - final imagePaths = Get.find(); - if (PlatformInfo.isWeb) { if (isItemHovered) { - return Padding( + return TMailButtonWidget.fromIcon( + margin: TrailingMailboxItemWidgetStyles.menuIconMargin, + icon: _imagePaths.icComposerMenu, + iconSize: TrailingMailboxItemWidgetStyles.menuIconSize, padding: TrailingMailboxItemWidgetStyles.menuIconPadding, - child: InkWell( - onTapDown: (detail) { - 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 - ) - ), + backgroundColor: TrailingMailboxItemWidgetStyles.menuIconBackgroundColor, + onTapActionAtPositionCallback: (position) => onMenuActionClick?.call(position, mailboxNode), ); } else if (mailboxNode.item.countUnreadEmails > 0 && mailboxNode.item.allowedToDisplayCountOfUnreadEmails) { return Padding( diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index f066530b7..b5e3263d7 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -3288,4 +3288,11 @@ class AppLocalizations { args: [action] ); } + + String get empty { + return Intl.message( + 'Empty', + name: 'empty', + ); + } } \ No newline at end of file diff --git a/model/lib/extensions/presentation_mailbox_extension.dart b/model/lib/extensions/presentation_mailbox_extension.dart index 81965fe45..8d3c14ab6 100644 --- a/model/lib/extensions/presentation_mailbox_extension.dart +++ b/model/lib/extensions/presentation_mailbox_extension.dart @@ -47,6 +47,8 @@ extension PresentationMailboxExtension on PresentationMailbox { bool get allowedToDisplayCountOfTotalEmails => isTrash || isSpam; + bool get allowedHasEmptyAction => (isTrash || isSpam) && countTotalEmails > 0; + String get countTotalEmailsAsString { if (countTotalEmails <= 0) return ''; return countTotalEmails <= 999 ? '$countTotalEmails' : '999+';