diff --git a/lib/features/destination_picker/presentation/destination_picker_view.dart b/lib/features/destination_picker/presentation/destination_picker_view.dart index cecf7c668..d1adea24a 100644 --- a/lib/features/destination_picker/presentation/destination_picker_view.dart +++ b/lib/features/destination_picker/presentation/destination_picker_view.dart @@ -334,11 +334,12 @@ class DestinationPickerView extends GetWidget Widget _buildUnifiedMailbox(BuildContext context, MailboxActions? actions) { if (actions == MailboxActions.move) { return InkWell( - onTap: () => controller.selectMailboxAction(null), + onTap: () => controller.selectMailboxAction(PresentationMailbox.unifiedMailbox), child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(14)), child: Container( color: Colors.white, + margin: const EdgeInsets.only(left: BuildUtils.isWeb ? 8 : 0), padding: const EdgeInsets.only(left: 16, top: 16), child: Row(children: [ SvgPicture.asset( @@ -374,7 +375,7 @@ class DestinationPickerView extends GetWidget data: const MediaQueryData(padding: EdgeInsets.zero), child: ListTile( contentPadding: EdgeInsets.zero, - onTap: () => controller.selectMailboxAction(null), + onTap: () => controller.selectMailboxAction(PresentationMailbox.unifiedMailbox), leading: Padding( padding: const EdgeInsets.only(left: 16), child: SvgPicture.asset(_imagePaths.icFolderMailbox, diff --git a/lib/features/mailbox/presentation/mailbox_controller.dart b/lib/features/mailbox/presentation/mailbox_controller.dart index 505be1940..49eeab970 100644 --- a/lib/features/mailbox/presentation/mailbox_controller.dart +++ b/lib/features/mailbox/presentation/mailbox_controller.dart @@ -698,14 +698,18 @@ class MailboxController extends BaseMailboxController { MailboxActions.move, mailboxIdSelected: mailboxSelected.id)); - _handleMovingMailbox( - accountId, - MoveAction.moving, - mailboxSelected, - destinationMailbox: destinationMailbox); - } + if (destinationMailbox is PresentationMailbox) { + final mailboxDestination = destinationMailbox == PresentationMailbox.unifiedMailbox + ? null : destinationMailbox; + _handleMovingMailbox( + accountId, + MoveAction.moving, + mailboxSelected, + destinationMailbox: mailboxDestination); - _cancelSelectMailbox(); + _cancelSelectMailbox(); + } + } } void _handleMovingMailbox( diff --git a/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart b/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart index 64f7e1223..556855c54 100644 --- a/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart +++ b/lib/features/mailbox/presentation/widgets/bottom_bar_selection_mailbox_widget.dart @@ -46,7 +46,11 @@ class BottomBarSelectionMailboxWidget { ..paddingIcon(const EdgeInsets.all(8)) ..textStyle(TextStyle(fontSize: 12, color: AppColor.colorTextButton.withOpacity(0.3))) ..iconColor(AppColor.colorTextButton.withOpacity(0.3)) - ..onPressActionClick(() => {}) + ..onPressActionClick(() { + if (_isMoveMailboxValid) { + _onMailboxActionsClick?.call(MailboxActions.move, _listSelectionMailbox); + } + }) ..text(AppLocalizations.of(_context).move, isVertical: true)) .build()), Expanded(child: (ButtonBuilder(_imagePaths.icRenameMailbox) @@ -116,6 +120,9 @@ class BottomBarSelectionMailboxWidget { bool get _isMarkAsReadMailboxValid => _listSelectionMailbox.length == 1 && _listSelectionMailbox.first.getCountUnReadEmails().isNotEmpty; + bool get _isMoveMailboxValid => _listSelectionMailbox.length == 1 + && _isAllFolderMailbox; + bool get _isAllFolderMailbox => _listSelectionMailbox.every((mailbox) => !mailbox.hasRole()); } \ No newline at end of file diff --git a/model/lib/mailbox/presentation_mailbox.dart b/model/lib/mailbox/presentation_mailbox.dart index 851120016..7ba6dae8c 100644 --- a/model/lib/mailbox/presentation_mailbox.dart +++ b/model/lib/mailbox/presentation_mailbox.dart @@ -1,10 +1,13 @@ import 'package:equatable/equatable.dart'; +import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart'; import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox_rights.dart'; import 'package:model/mailbox/select_mode.dart'; class PresentationMailbox with EquatableMixin { + static final PresentationMailbox unifiedMailbox = PresentationMailbox(MailboxId(Id('unified'))); + static final roleInbox = Role('inbox'); static final roleTrash = Role('trash'); static final roleSent = Role('sent');