Skip to content

Commit 0f3e5b2

Browse files
committed
TF-2646 Handle move all selection emails when drag and drop to mailbox
Signed-off-by: dab246 <[email protected]>
1 parent 52876bf commit 0f3e5b2

26 files changed

+586
-368
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
import 'dart:ui';
3+
4+
import 'package:core/presentation/extensions/color_extension.dart';
5+
import 'package:core/presentation/resources/image_paths.dart';
6+
import 'package:flutter_svg/flutter_svg.dart';
7+
import 'package:tmail_ui_user/features/base/mixin/message_dialog_action_mixin.dart';
8+
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
9+
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
10+
11+
mixin EmailActionHandlerMixin implements MessageDialogActionMixin {
12+
Future<void> showConfirmDialogWhenMakeToActionForSelectionAllEmails({
13+
required ImagePaths imagePaths,
14+
required int totalEmails,
15+
required String folderName,
16+
required VoidCallback onConfirmAction,
17+
}) async {
18+
if (currentContext == null) return;
19+
20+
final appLocalizations = AppLocalizations.of(currentContext!);
21+
22+
await showConfirmDialogAction(
23+
currentContext!,
24+
appLocalizations.messageConfirmationDialogWhenMakeToActionForSelectionAllEmailsInMailbox(
25+
totalEmails,
26+
folderName,
27+
),
28+
appLocalizations.ok,
29+
title: appLocalizations.confirmBulkAction,
30+
icon: SvgPicture.asset(
31+
imagePaths.icQuotasWarning,
32+
colorFilter: AppColor.colorBackgroundQuotasWarning.asFilter(),
33+
),
34+
onConfirmAction: onConfirmAction,
35+
);
36+
}
37+
}

lib/features/mailbox/presentation/mailbox_controller.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,12 @@ class MailboxController extends BaseMailboxController
816816
log('MailboxController::_handleOpenMailbox():MAILBOX_ID = ${presentationMailboxSelected.id.asString} | MAILBOX_NAME: ${presentationMailboxSelected.name?.name}');
817817
KeyboardUtils.hideKeyboard(context);
818818
mailboxDashBoardController.clearSelectedEmail();
819+
if (mailboxDashBoardController.isSelectAllEmailsEnabled.isTrue) {
820+
mailboxDashBoardController.isSelectAllEmailsEnabled.value = false;
821+
}
822+
if (mailboxDashBoardController.isSelectAllPageEnabled.isTrue) {
823+
mailboxDashBoardController.isSelectAllPageEnabled.value = false;
824+
}
819825
if (presentationMailboxSelected.id != mailboxDashBoardController.selectedMailbox.value?.id) {
820826
mailboxDashBoardController.clearFilterMessageOption();
821827
}

lib/features/mailbox/presentation/mailbox_view_web.dart

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_load
1616
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart';
1717
import 'package:tmail_ui_user/features/quotas/presentation/quotas_view.dart';
1818
import 'package:tmail_ui_user/features/quotas/presentation/styles/quotas_view_styles.dart';
19+
import 'package:tmail_ui_user/features/thread/presentation/model/draggable_email_data.dart';
1920
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
2021

2122
class MailboxView extends BaseMailboxView {
@@ -402,15 +403,29 @@ class MailboxView extends BaseMailboxView {
402403
}).toList() ?? <Widget>[];
403404
}
404405

405-
void _handleDragItemAccepted(List<PresentationEmail> listEmails, PresentationMailbox presentationMailbox) {
406+
void _handleDragItemAccepted(
407+
DraggableEmailData draggableEmailData,
408+
PresentationMailbox presentationMailbox,
409+
) {
406410
final mailboxPath = controller.findNodePath(presentationMailbox.id)
407411
?? presentationMailbox.name?.name;
408412
log('MailboxView::_handleDragItemAccepted(): mailboxPath: $mailboxPath');
409413
if (mailboxPath != null) {
410-
final newMailbox = presentationMailbox.toPresentationMailboxWithMailboxPath(mailboxPath);
411-
controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction(listEmails, newMailbox);
414+
presentationMailbox = presentationMailbox
415+
.toPresentationMailboxWithMailboxPath(mailboxPath);
416+
}
417+
418+
if (draggableEmailData.isSelectAllEmailsEnabled) {
419+
controller
420+
.mailboxDashBoardController
421+
.dragAllSelectedEmailToMailboxAction(presentationMailbox);
412422
} else {
413-
controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction(listEmails, presentationMailbox);
423+
controller
424+
.mailboxDashBoardController
425+
.dragSelectedMultipleEmailToMailboxAction(
426+
draggableEmailData.listEmails!,
427+
presentationMailbox,
428+
);
414429
}
415430
}
416431
}

lib/features/mailbox/presentation/utils/mailbox_method_action_define.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11

22
import 'package:flutter/material.dart';
3-
import 'package:model/email/presentation_email.dart';
43
import 'package:model/mailbox/presentation_mailbox.dart';
54
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
5+
import 'package:tmail_ui_user/features/thread/presentation/model/draggable_email_data.dart';
66

77
typedef OnClickOpenMailboxAction = void Function(PresentationMailbox);
88
typedef OnClickOpenMenuMailboxAction = void Function(RelativeRect, PresentationMailbox);
99
typedef OnSelectMailboxAction = void Function(PresentationMailbox);
10-
typedef OnDragEmailToMailboxAccepted = void Function(List<PresentationEmail>, PresentationMailbox);
10+
typedef OnDragEmailToMailboxAccepted = void Function(DraggableEmailData, PresentationMailbox);
1111
typedef OnLongPressMailboxAction = void Function(PresentationMailbox);
1212

1313
typedef OnClickExpandMailboxNodeAction = void Function(MailboxNode);

lib/features/mailbox/presentation/widgets/mailbox_item_widget.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:flutter/material.dart';
66
import 'package:flutter_svg/flutter_svg.dart';
77
import 'package:get/get.dart';
88
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
9-
import 'package:model/email/presentation_email.dart';
109
import 'package:model/mailbox/presentation_mailbox.dart';
1110
import 'package:model/mailbox/select_mode.dart';
1211
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
@@ -16,6 +15,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_item_
1615
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
1716
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/label_mailbox_item_widget.dart';
1817
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/leading_mailbox_item_widget.dart';
18+
import 'package:tmail_ui_user/features/thread/presentation/model/draggable_email_data.dart';
1919

2020
class MailboxItemWidget extends StatefulWidget {
2121

@@ -65,8 +65,8 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
6565
@override
6666
Widget build(BuildContext context) {
6767
if (_responsiveUtils.isWebDesktop(context) && widget.mailboxDisplayed == MailboxDisplayed.mailbox) {
68-
return DragTarget<List<PresentationEmail>>(
69-
builder: (context, candidateEmails, rejectedEmails) {
68+
return DragTarget<DraggableEmailData>(
69+
builder: (context, _, __) {
7070
return InkWell(
7171
onTap: () => widget.onOpenMailboxFolderClick?.call(widget.mailboxNode),
7272
onHover: (value) => setState(() => _isItemHovered = value),
@@ -103,7 +103,8 @@ class _MailboxItemWidgetState extends State<MailboxItemWidget> {
103103
),
104104
);
105105
},
106-
onAcceptWithDetails: (emails) => widget.onDragItemAccepted?.call(emails.data, widget.mailboxNode.item),
106+
onAcceptWithDetails: (details) =>
107+
widget.onDragItemAccepted?.call(details.data, widget.mailboxNode.item),
107108
);
108109
} else {
109110
if (widget.mailboxDisplayed == MailboxDisplayed.mailbox) {

0 commit comments

Comments
 (0)