TF-3758 Remove selection mailbox in left menu on mobile

Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
dab246
2025-05-29 20:51:00 +07:00
committed by Dat H. Pham
parent 6b09fb9faf
commit bdaee54050
5 changed files with 47 additions and 196 deletions
@@ -1,70 +1,25 @@
import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/utils/platform_info.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/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/styles/mailbox_icon_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/styles/mailbox_item_widget_styles.dart';
class MailboxIconWidget extends StatelessWidget {
final String icon;
final ImagePaths imagePaths;
final MailboxNode mailboxNode;
final SelectMode selectionMode;
final OnSelectMailboxNodeAction? onSelectMailboxFolderClick;
final EdgeInsetsGeometry? padding;
const MailboxIconWidget({
super.key,
required this.mailboxNode,
required this.imagePaths,
this.selectionMode = SelectMode.INACTIVE,
this.padding,
this.onSelectMailboxFolderClick,
});
const MailboxIconWidget({super.key, required this.icon});
@override
Widget build(BuildContext context) {
Widget? item;
if (_isSelectionActivatedOnMobile) {
item = InkWell(
onTap: () => onSelectMailboxFolderClick?.call(mailboxNode),
child: SvgPicture.asset(
_getSelectionIcon(imagePaths),
width: MailboxIconWidgetStyles.iconSize,
height: MailboxIconWidgetStyles.iconSize,
fit: BoxFit.fill,
)
);
} else if (mailboxNode.item.isPersonal || mailboxNode.item.hasParentId()) {
item = SvgPicture.asset(
mailboxNode.item.getMailboxIcon(imagePaths),
return Padding(
padding: const EdgeInsetsDirectional.only(
end: MailboxItemWidgetStyles.labelIconSpace,
),
child: SvgPicture.asset(
icon,
width: MailboxIconWidgetStyles.iconSize,
height: MailboxIconWidgetStyles.iconSize,
fit: BoxFit.fill,
);
}
if (padding != null) {
return Padding(
padding: padding!,
child: item ?? const SizedBox.shrink(),
);
} else {
return item ?? const SizedBox.shrink();
}
),
);
}
bool get _isSelectionActivatedOnMobile => PlatformInfo.isMobile && selectionMode == SelectMode.ACTIVE;
String _getSelectionIcon(ImagePaths imagePaths) {
return mailboxNode.selectMode == SelectMode.ACTIVE
? imagePaths.icSelected
: imagePaths.icUnSelected;
}
}
}
@@ -9,7 +9,7 @@ import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
import 'package:model/email/presentation_email.dart';
import 'package:model/extensions/presentation_mailbox_extension.dart';
import 'package:model/mailbox/presentation_mailbox.dart';
import 'package:model/mailbox/select_mode.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/extensions/presentation_mailbox_extension.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_displayed.dart';
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
@@ -21,7 +21,6 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_icon
class MailboxItemWidget extends StatefulWidget {
final MailboxNode mailboxNode;
final SelectMode selectionMode;
final MailboxDisplayed mailboxDisplayed;
final PresentationMailbox? mailboxNodeSelected;
final MailboxActions? mailboxActions;
@@ -38,7 +37,6 @@ class MailboxItemWidget extends StatefulWidget {
const MailboxItemWidget({
super.key,
required this.mailboxNode,
this.selectionMode = SelectMode.INACTIVE,
this.mailboxDisplayed = MailboxDisplayed.mailbox,
this.mailboxNodeSelected,
this.mailboxActions,
@@ -90,17 +88,8 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
? CrossAxisAlignment.start
: CrossAxisAlignment.center,
children: [
MailboxIconWidget(
imagePaths: _imagePaths,
mailboxNode: widget.mailboxNode,
selectionMode: widget.selectionMode,
padding: EdgeInsetsDirectional.only(
end: widget.mailboxNode.item.isTeamMailboxes
? MailboxItemWidgetStyles.teamMailboxLabelSpace
: MailboxItemWidgetStyles.labelIconSpace,
),
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
),
if (_isIconDisplayed)
MailboxIconWidget(icon: _iconMailbox),
Expanded(
child: LabelMailboxItemWidget(
itemKey: _key,
@@ -141,17 +130,8 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
: MailboxItemWidgetStyles.height,
child: Row(
children: [
MailboxIconWidget(
imagePaths: _imagePaths,
mailboxNode: widget.mailboxNode,
selectionMode: widget.selectionMode,
padding: EdgeInsetsDirectional.only(
end: widget.mailboxNode.item.isTeamMailboxes
? MailboxItemWidgetStyles.teamMailboxLabelSpace
: MailboxItemWidgetStyles.labelIconSpace,
),
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
),
if (_isIconDisplayed)
MailboxIconWidget(icon: _iconMailbox),
Expanded(
child: LabelMailboxItemWidget(
itemKey: _key,
@@ -175,9 +155,7 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
color: Colors.transparent,
child: InkWell(
onLongPress: () => widget.onLongPressMailboxNodeAction?.call(widget.mailboxNode),
onTap: () => widget.selectionMode == SelectMode.ACTIVE
? widget.onSelectMailboxFolderClick?.call(widget.mailboxNode)
: widget.onOpenMailboxFolderClick?.call(widget.mailboxNode),
onTap: () => widget.onOpenMailboxFolderClick?.call(widget.mailboxNode),
borderRadius: const BorderRadius.all(Radius.circular(MailboxItemWidgetStyles.borderRadius)),
child: Container(
decoration: BoxDecoration(
@@ -192,17 +170,8 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
: MailboxItemWidgetStyles.height,
child: Row(
children: [
MailboxIconWidget(
imagePaths: _imagePaths,
mailboxNode: widget.mailboxNode,
selectionMode: widget.selectionMode,
padding: EdgeInsetsDirectional.only(
end: widget.mailboxNode.item.isTeamMailboxes
? MailboxItemWidgetStyles.teamMailboxLabelSpace
: MailboxItemWidgetStyles.labelIconSpace,
),
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
),
if (_isIconDisplayed)
MailboxIconWidget(icon: _iconMailbox),
Expanded(
child: LabelMailboxItemWidget(
itemKey: _key,
@@ -255,17 +224,8 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
: Colors.transparent,
child: Row(
children: [
MailboxIconWidget(
imagePaths: _imagePaths,
mailboxNode: widget.mailboxNode,
selectionMode: widget.selectionMode,
padding: EdgeInsetsDirectional.only(
end: widget.mailboxNode.item.isTeamMailboxes
? MailboxItemWidgetStyles.teamMailboxLabelSpace
: MailboxItemWidgetStyles.labelIconSpace,
),
onSelectMailboxFolderClick: widget.onSelectMailboxFolderClick,
),
if (_isIconDisplayed)
MailboxIconWidget(icon: _iconMailbox),
Expanded(
child: LabelMailboxItemWidget(
itemKey: _key,
@@ -320,4 +280,11 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
widget.mailboxActions == MailboxActions.create ||
widget.mailboxActions == MailboxActions.moveEmail
);
bool get _isIconDisplayed =>
widget.mailboxNode.item.isPersonal ||
widget.mailboxNode.item.hasParentId();
String get _iconMailbox =>
widget.mailboxNode.item.getMailboxIcon(_imagePaths);
}