Skip to content

Commit f33b954

Browse files
committed
TF-2646 Handle move all selection emails when drag and drop to mailbox
1 parent 0922b53 commit f33b954

29 files changed

+632
-383
lines changed
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
class AssetsPaths {
22
static const images = 'assets/images/';
3-
static const icons = 'assets/icons/';
43
static const configurationImages = 'configurations/icons/';
54
}
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
@@ -612,6 +612,12 @@ class MailboxController extends BaseMailboxController
612612
log('MailboxController::_handleOpenMailbox():MAILBOX_ID = ${presentationMailboxSelected.id.asString} | MAILBOX_NAME: ${presentationMailboxSelected.name?.name}');
613613
KeyboardUtils.hideKeyboard(context);
614614
mailboxDashBoardController.clearSelectedEmail();
615+
if (mailboxDashBoardController.isSelectAllEmailsEnabled.isTrue) {
616+
mailboxDashBoardController.isSelectAllEmailsEnabled.value = false;
617+
}
618+
if (mailboxDashBoardController.isSelectAllPageEnabled.isTrue) {
619+
mailboxDashBoardController.isSelectAllPageEnabled.value = false;
620+
}
615621
if (presentationMailboxSelected.id != mailboxDashBoardController.selectedMailbox.value?.id) {
616622
mailboxDashBoardController.clearFilterMessageOption();
617623
}

lib/features/mailbox/presentation/mailbox_view_web.dart

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_load
1414
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart';
1515
import 'package:tmail_ui_user/features/quotas/presentation/quotas_view.dart';
1616
import 'package:tmail_ui_user/features/quotas/presentation/styles/quotas_view_styles.dart';
17+
import 'package:tmail_ui_user/features/thread/presentation/model/draggable_email_data.dart';
1718
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
1819
import 'package:tmail_ui_user/main/utils/app_config.dart';
1920

@@ -393,15 +394,29 @@ class MailboxView extends BaseMailboxView {
393394
}).toList() ?? <Widget>[];
394395
}
395396

396-
void _handleDragItemAccepted(List<PresentationEmail> listEmails, PresentationMailbox presentationMailbox) {
397+
void _handleDragItemAccepted(
398+
DraggableEmailData draggableEmailData,
399+
PresentationMailbox presentationMailbox,
400+
) {
397401
final mailboxPath = controller.findNodePath(presentationMailbox.id)
398402
?? presentationMailbox.name?.name;
399403
log('MailboxView::_handleDragItemAccepted(): mailboxPath: $mailboxPath');
400404
if (mailboxPath != null) {
401-
final newMailbox = presentationMailbox.toPresentationMailboxWithMailboxPath(mailboxPath);
402-
controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction(listEmails, newMailbox);
405+
presentationMailbox = presentationMailbox
406+
.toPresentationMailboxWithMailboxPath(mailboxPath);
407+
}
408+
409+
if (draggableEmailData.isSelectAllEmailsEnabled) {
410+
controller
411+
.mailboxDashBoardController
412+
.dragAllSelectedEmailToMailboxAction(presentationMailbox);
403413
} else {
404-
controller.mailboxDashBoardController.dragSelectedMultipleEmailToMailboxAction(listEmails, presentationMailbox);
414+
controller
415+
.mailboxDashBoardController
416+
.dragSelectedMultipleEmailToMailboxAction(
417+
draggableEmailData.listEmails!,
418+
presentationMailbox,
419+
);
405420
}
406421
}
407422
}

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)