TF-3941 Thread Detail Thread level mark read/star, archive and spam
This commit is contained in:
@@ -4,16 +4,15 @@ import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:model/email/email_action_type.dart';
|
||||
import 'package:model/email/presentation_email.dart';
|
||||
import 'package:model/extensions/presentation_email_extension.dart';
|
||||
import 'package:model/mailbox/presentation_mailbox.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/styles/email_view_app_bar_widget_styles.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_app_bar_widget.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_view_back_button.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/utils/app_utils.dart';
|
||||
|
||||
typedef OnThreadActionClick = void Function(EmailActionType);
|
||||
typedef OnThreadMoreActionClick = void Function(RelativeRect?);
|
||||
|
||||
class ThreadDetailAppBar extends StatelessWidget {
|
||||
const ThreadDetailAppBar({
|
||||
super.key,
|
||||
@@ -21,33 +20,29 @@ class ThreadDetailAppBar extends StatelessWidget {
|
||||
required this.imagePaths,
|
||||
required this.isSearchRunning,
|
||||
required this.closeThreadDetailAction,
|
||||
required this.lastEmailOfThread,
|
||||
required this.ownUserName,
|
||||
required this.threadActionReady,
|
||||
required this.threadDetailIsStarred,
|
||||
required this.isThreadDetailEnabled,
|
||||
this.mailboxContain,
|
||||
this.optionWidgets = const [],
|
||||
this.onEmailActionClick,
|
||||
this.onMoreActionClick,
|
||||
this.onThreadActionClick,
|
||||
this.onThreadMoreActionClick,
|
||||
});
|
||||
|
||||
final ResponsiveUtils responsiveUtils;
|
||||
final ImagePaths imagePaths;
|
||||
final bool isSearchRunning;
|
||||
final void Function(BuildContext context) closeThreadDetailAction;
|
||||
final PresentationEmail? lastEmailOfThread;
|
||||
final String ownUserName;
|
||||
final bool threadActionReady;
|
||||
final bool threadDetailIsStarred;
|
||||
final bool isThreadDetailEnabled;
|
||||
final PresentationMailbox? mailboxContain;
|
||||
final List<Widget> optionWidgets;
|
||||
final OnEmailActionClick? onEmailActionClick;
|
||||
final OnMoreActionClick? onMoreActionClick;
|
||||
final OnThreadActionClick? onThreadActionClick;
|
||||
final OnThreadMoreActionClick? onThreadMoreActionClick;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final isReplyToListEnabled = EmailUtils.isReplyToListEnabled(
|
||||
lastEmailOfThread?.listPost ?? '',
|
||||
);
|
||||
|
||||
final child = LayoutBuilder(
|
||||
builder: (context, constraints) {
|
||||
Widget backButton = EmailViewBackButton(
|
||||
@@ -86,61 +81,31 @@ class ThreadDetailAppBar extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
if (_supportDisplayMailboxNameTitle(context)) backButton,
|
||||
if (lastEmailOfThread != null && isThreadDetailEnabled) ...[
|
||||
if (isThreadDetailEnabled && threadActionReady)
|
||||
_ThreadDetailAppBarButton(
|
||||
icon: imagePaths.icReply,
|
||||
tooltipMessage: AppLocalizations.of(context).reply,
|
||||
icon: threadDetailIsStarred
|
||||
? imagePaths.icStar
|
||||
: imagePaths.icUnStar,
|
||||
tooltipMessage: threadDetailIsStarred
|
||||
? AppLocalizations.of(context).not_starred
|
||||
: AppLocalizations.of(context).mark_as_starred,
|
||||
responsiveUtils: responsiveUtils,
|
||||
onTapActionCallback: (_) => onEmailActionClick?.call(
|
||||
lastEmailOfThread!,
|
||||
EmailActionType.reply,
|
||||
),
|
||||
iconColor: null,
|
||||
onTapActionCallback: threadDetailIsStarred
|
||||
? (_) => onThreadActionClick?.call(EmailActionType.unMarkAsStarred)
|
||||
: (_) => onThreadActionClick?.call(EmailActionType.markAsStarred),
|
||||
),
|
||||
if (!responsiveUtils.isMobile(context)) ...[
|
||||
if (lastEmailOfThread!.getCountMailAddressWithoutMe(ownUserName) > 1)
|
||||
_ThreadDetailAppBarButton(
|
||||
icon: imagePaths.icReplyAll,
|
||||
tooltipMessage: AppLocalizations.of(context).reply_all,
|
||||
responsiveUtils: responsiveUtils,
|
||||
onTapActionCallback: (_) => onEmailActionClick?.call(
|
||||
lastEmailOfThread!,
|
||||
EmailActionType.replyAll,
|
||||
),
|
||||
),
|
||||
if (isReplyToListEnabled)
|
||||
_ThreadDetailAppBarButton(
|
||||
icon: imagePaths.icReply,
|
||||
tooltipMessage: AppLocalizations.of(context).replyToList,
|
||||
responsiveUtils: responsiveUtils,
|
||||
onTapActionCallback: (_) => onEmailActionClick?.call(
|
||||
lastEmailOfThread!,
|
||||
EmailActionType.replyToList,
|
||||
),
|
||||
),
|
||||
_ThreadDetailAppBarButton(
|
||||
icon: imagePaths.icForward,
|
||||
tooltipMessage: AppLocalizations.of(context).forward,
|
||||
responsiveUtils: responsiveUtils,
|
||||
onTapActionCallback: (_) => onEmailActionClick?.call(
|
||||
lastEmailOfThread!,
|
||||
EmailActionType.forward,
|
||||
),
|
||||
),
|
||||
],
|
||||
if (!responsiveUtils.isMobile(context)) const Spacer(),
|
||||
] else const Spacer(),
|
||||
if (!responsiveUtils.isMobile(context)) const Spacer(),
|
||||
if (AppUtils.getCurrentDirection(context) == TextDirection.rtl)
|
||||
...optionWidgets.reversed
|
||||
else
|
||||
...optionWidgets,
|
||||
if (lastEmailOfThread != null)
|
||||
if (isThreadDetailEnabled && threadActionReady)
|
||||
_ThreadDetailAppBarButton(
|
||||
icon: imagePaths.icMoreVertical,
|
||||
tooltipMessage: AppLocalizations.of(context).more,
|
||||
responsiveUtils: responsiveUtils,
|
||||
onTapActionCallback: lastEmailOfThread != null
|
||||
? (position) => onMoreActionClick?.call(lastEmailOfThread!, position)
|
||||
: null,
|
||||
onTapActionCallback: onThreadMoreActionClick,
|
||||
),
|
||||
],
|
||||
),
|
||||
@@ -175,22 +140,25 @@ class _ThreadDetailAppBarButton extends StatelessWidget {
|
||||
required this.tooltipMessage,
|
||||
required this.onTapActionCallback,
|
||||
required this.responsiveUtils,
|
||||
this.iconColor = EmailViewAppBarWidgetStyles.iconColor,
|
||||
});
|
||||
|
||||
final String icon;
|
||||
final String tooltipMessage;
|
||||
final void Function(RelativeRect? position)? onTapActionCallback;
|
||||
final ResponsiveUtils responsiveUtils;
|
||||
final Color? iconColor;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final smallScreen = responsiveUtils.isScreenWithShortestSide(context);
|
||||
|
||||
return TMailButtonWidget.fromIcon(
|
||||
icon: icon,
|
||||
iconSize: EmailViewAppBarWidgetStyles.buttonIconSize,
|
||||
iconColor: EmailViewAppBarWidgetStyles.iconColor,
|
||||
iconColor: iconColor,
|
||||
backgroundColor: Colors.transparent,
|
||||
tooltipMessage: AppLocalizations.of(context).more,
|
||||
tooltipMessage: tooltipMessage,
|
||||
onTapActionCallback:
|
||||
smallScreen ? () => onTapActionCallback?.call(null) : null,
|
||||
onTapActionAtPositionCallback: !smallScreen
|
||||
@@ -198,4 +166,4 @@ class _ThreadDetailAppBarButton extends StatelessWidget {
|
||||
: null,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ class ThreadDetailCollapsedEmail extends StatelessWidget {
|
||||
this.mailboxContain,
|
||||
this.emailLoaded,
|
||||
this.onEmailActionClick,
|
||||
this.onMoreActionClick,
|
||||
this.onToggleThreadDetailCollapseExpand,
|
||||
});
|
||||
|
||||
@@ -35,7 +34,6 @@ class ThreadDetailCollapsedEmail extends StatelessWidget {
|
||||
final PresentationMailbox? mailboxContain;
|
||||
final EmailLoaded? emailLoaded;
|
||||
final OnEmailActionClick? onEmailActionClick;
|
||||
final OnMoreActionClick? onMoreActionClick;
|
||||
final VoidCallback? onToggleThreadDetailCollapseExpand;
|
||||
|
||||
String get preview => presentationEmail.getPartialContent();
|
||||
@@ -69,7 +67,6 @@ class ThreadDetailCollapsedEmail extends StatelessWidget {
|
||||
emailLoaded: emailLoaded,
|
||||
isInsideThreadDetailView: true,
|
||||
onEmailActionClick: onEmailActionClick,
|
||||
onMoreActionClick: onMoreActionClick,
|
||||
openEmailAddressDetailAction: openEmailAddressDetailAction,
|
||||
showRecipients: false,
|
||||
onTapAvatarActionClick: onToggleThreadDetailCollapseExpand,
|
||||
|
||||
Reference in New Issue
Block a user