TF-4301 Add "Create a new label" button in Label As menus and wire up tagging in email view
This commit is contained in:
@@ -952,9 +952,15 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
||||
pressEmailAction(actionType, presentationEmail);
|
||||
break;
|
||||
case EmailActionType.labelAs:
|
||||
if (!isLabelAvailable) return;
|
||||
mailboxDashBoardController
|
||||
.openAddLabelToEmailDialogModal(presentationEmail);
|
||||
mailboxDashBoardController.openAddLabelToEmailDialogModal(
|
||||
email: presentationEmail,
|
||||
onCreateANewLabelAction: () {
|
||||
mailboxDashBoardController.labelController.onCreateALabelAction(
|
||||
accountId: accountId,
|
||||
shouldPop: true,
|
||||
);
|
||||
},
|
||||
);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -110,9 +110,14 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
openPopupMenu: controller.mailboxDashBoardController.openPopupMenuActionGroup,
|
||||
onSelectLabelAction: (label, isSelected) =>
|
||||
controller.onToggleLabelAction(
|
||||
emailId: presentationEmail.id,
|
||||
label: label,
|
||||
isSelected: isSelected,
|
||||
),
|
||||
onCreateANewLabelAction: () =>
|
||||
controller.createNewLabelToEmail(
|
||||
context,
|
||||
presentationEmail.id,
|
||||
label,
|
||||
isSelected,
|
||||
),
|
||||
);
|
||||
},
|
||||
@@ -276,9 +281,9 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
isMobileResponsive: isMobileResponsive,
|
||||
labels: emailLabels,
|
||||
onDeleteLabelAction: (label) => controller.onToggleLabelAction(
|
||||
presentationEmail.id,
|
||||
label,
|
||||
false,
|
||||
emailId: presentationEmail.id,
|
||||
label: label,
|
||||
isSelected: false,
|
||||
),
|
||||
);
|
||||
}),
|
||||
@@ -321,9 +326,14 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
openPopupMenu: controller.mailboxDashBoardController.openPopupMenuActionGroup,
|
||||
onSelectLabelAction: (label, isSelected) =>
|
||||
controller.onToggleLabelAction(
|
||||
emailId: presentationEmail.id,
|
||||
label: label,
|
||||
isSelected: isSelected,
|
||||
),
|
||||
onCreateANewLabelAction: () =>
|
||||
controller.createNewLabelToEmail(
|
||||
context,
|
||||
presentationEmail.id,
|
||||
label,
|
||||
isSelected,
|
||||
),
|
||||
),
|
||||
onToggleThreadDetailCollapseExpand: onToggleThreadDetailCollapseExpand,
|
||||
@@ -601,7 +611,6 @@ class EmailView extends GetWidget<SingleEmailController> {
|
||||
MessageDialogActionManager().isDialogOpened ||
|
||||
EmailActionReactor.isDialogOpened ||
|
||||
ColorDialogPicker().isOpened.isTrue ||
|
||||
dialogRouter.isRuleFilterDialogOpened.isTrue ||
|
||||
dialogRouter.isDialogOpened;
|
||||
|
||||
if (isOverlayEnabled) {
|
||||
|
||||
@@ -1,10 +1,13 @@
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:core/utils/platform_info.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
|
||||
import 'package:labels/model/label.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/controller/single_email_controller.dart';
|
||||
import 'package:tmail_ui_user/features/email/presentation/extensions/email_loaded_extension.dart';
|
||||
import 'package:tmail_ui_user/features/labels/presentation/extensions/handle_label_action_type_extension.dart';
|
||||
import 'package:tmail_ui_user/features/labels/presentation/models/label_action_type.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/extensions/labels/handle_logic_label_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/data/extensions/map_keywords_extension.dart';
|
||||
import 'package:tmail_ui_user/features/thread/domain/extensions/presentation_email_map_extension.dart';
|
||||
@@ -15,7 +18,11 @@ extension HandleLabelForEmailExtension on SingleEmailController {
|
||||
return mailboxDashBoardController.isLabelAvailable;
|
||||
}
|
||||
|
||||
void onToggleLabelAction(EmailId? emailId, Label label, bool isSelected) {
|
||||
void onToggleLabelAction({
|
||||
required EmailId? emailId,
|
||||
required Label label,
|
||||
required bool isSelected,
|
||||
}) {
|
||||
if (emailId == null) {
|
||||
logWarning('HandleLabelForEmailExtension::onToggleLabelAction: Email id is null');
|
||||
return;
|
||||
@@ -125,4 +132,22 @@ extension HandleLabelForEmailExtension on SingleEmailController {
|
||||
remove: remove,
|
||||
);
|
||||
}
|
||||
|
||||
void createNewLabelToEmail(BuildContext context, EmailId? emailId) {
|
||||
if (emailId == null) {
|
||||
logWarning('HandleLabelForEmailExtension::createNewLabelToEmail: Email id is null');
|
||||
return;
|
||||
}
|
||||
|
||||
mailboxDashBoardController.labelController.handleLabelActionType(
|
||||
actionType: LabelActionType.create,
|
||||
accountId: accountId,
|
||||
onLabelActionCallback: (label) =>
|
||||
onToggleLabelAction(
|
||||
emailId: emailId,
|
||||
label: label,
|
||||
isSelected: true,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
+8
-2
@@ -54,6 +54,7 @@ import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_
|
||||
import 'package:tmail_ui_user/features/email/presentation/widgets/email_address_dialog_builder.dart';
|
||||
import 'package:tmail_ui_user/features/labels/presentation/mixin/label_sub_menu_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/labels/presentation/widgets/label_item_context_menu.dart';
|
||||
import 'package:tmail_ui_user/features/labels/presentation/widgets/label_list_context_menu.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_email_rule_filter_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/create_new_email_rule_filter_interactor.dart';
|
||||
@@ -486,6 +487,7 @@ class EmailActionReactor with LabelSubMenuMixin {
|
||||
required bool isLabelAvailable,
|
||||
required OpenBottomSheetContextMenuAction openBottomSheetContextMenu,
|
||||
required OpenPopupMenuActionGroup openPopupMenu,
|
||||
required OnCreateANewLabelAction onCreateANewLabelAction,
|
||||
List<Label>? labels,
|
||||
OnSelectLabelAction? onSelectLabelAction,
|
||||
}) {
|
||||
@@ -508,8 +510,7 @@ class EmailActionReactor with LabelSubMenuMixin {
|
||||
EmailActionType.printAll,
|
||||
if (additionalActions.contains(EmailActionType.moveToMailbox))
|
||||
EmailActionType.moveToMailbox,
|
||||
if (isLabelAvailable && labels?.isNotEmpty == true)
|
||||
EmailActionType.labelAs,
|
||||
if (isLabelAvailable) EmailActionType.labelAs,
|
||||
if (additionalActions.contains(EmailActionType.markAsStarred) &&
|
||||
additionalActions.contains(EmailActionType.unMarkAsStarred))
|
||||
presentationEmail.hasStarred
|
||||
@@ -580,6 +581,11 @@ class EmailActionReactor with LabelSubMenuMixin {
|
||||
submenuController.hide();
|
||||
popBack();
|
||||
},
|
||||
onCreateANewLabelAction: () {
|
||||
submenuController.hide();
|
||||
popBack();
|
||||
onCreateANewLabelAction();
|
||||
},
|
||||
),
|
||||
);
|
||||
}).toList();
|
||||
|
||||
Reference in New Issue
Block a user