diff --git a/lib/features/base/widget/highlight_svg_icon_on_hover.dart b/lib/features/base/widget/highlight_svg_icon_on_hover.dart new file mode 100644 index 000000000..5bf8dc767 --- /dev/null +++ b/lib/features/base/widget/highlight_svg_icon_on_hover.dart @@ -0,0 +1,59 @@ +import 'package:core/presentation/extensions/color_extension.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class HighlightSVGIconOnHover extends StatefulWidget { + final String icon; + final double size; + final double borderRadius; + final Color? iconColor; + final EdgeInsetsGeometry? padding; + final String? tooltipMessage; + + const HighlightSVGIconOnHover({ + Key? key, + required this.icon, + this.size = 20.0, + this.borderRadius = 5.0, + this.iconColor, + this.padding, + this.tooltipMessage, + }) : super(key: key); + + @override + State createState() => _HighlightSVGIconOnHoverState(); +} + +class _HighlightSVGIconOnHoverState extends State { + bool _isHovered = false; + + @override + Widget build(BuildContext context) { + final child = MouseRegion( + onEnter: (_) => setState(() => _isHovered = true), + onExit: (_) => setState(() => _isHovered = false), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(widget.borderRadius)), + color: _isHovered ? Theme.of(context).hoverColor : null, + ), + padding: widget.padding ?? const EdgeInsets.all(5), + child: SvgPicture.asset( + widget.icon, + width: widget.size, + height: widget.size, + fit: BoxFit.fill, + colorFilter: widget.iconColor?.asFilter(), + ), + ), + ); + + if (widget.tooltipMessage != null) { + return Tooltip( + message: widget.tooltipMessage, + child: child, + ); + } + return child; + } +} \ No newline at end of file diff --git a/lib/features/base/widget/popup_item_widget.dart b/lib/features/base/widget/popup_item_widget.dart index 169f51205..fa2ccfb90 100644 --- a/lib/features/base/widget/popup_item_widget.dart +++ b/lib/features/base/widget/popup_item_widget.dart @@ -34,37 +34,40 @@ class PopupItemWidget extends StatelessWidget { @override Widget build(BuildContext context) { return PointerInterceptor( - child: InkWell( - onTap: onCallbackAction, - child: Container( - height: PopupItemWidgetStyle.height, - constraints: const BoxConstraints(minWidth: PopupItemWidgetStyle.minWidth), - padding: padding, - child: Row(children: [ - SvgPicture.asset( - _iconAction, - width: iconSize ?? PopupItemWidgetStyle.iconSize, - height: iconSize ?? PopupItemWidgetStyle.iconSize, - fit: BoxFit.fill, - colorFilter: colorIcon?.asFilter() - ), - const SizedBox(width: PopupItemWidgetStyle.space), - Expanded(child: Text( - _nameAction, - style: styleName ?? PopupItemWidgetStyle.labelTextStyle - )), - if (isSelected == true && selectedIcon != null) - Padding( - padding: PopupItemWidgetStyle.iconSelectedPadding, - child: SvgPicture.asset( - selectedIcon!, - width: PopupItemWidgetStyle.selectedIconSize, - height: PopupItemWidgetStyle.selectedIconSize, - fit: BoxFit.fill - ), - ) - ]), - ) + child: Material( + type: MaterialType.transparency, + child: InkWell( + onTap: onCallbackAction, + child: Container( + height: PopupItemWidgetStyle.height, + constraints: const BoxConstraints(minWidth: PopupItemWidgetStyle.minWidth), + padding: padding, + child: Row(children: [ + SvgPicture.asset( + _iconAction, + width: iconSize ?? PopupItemWidgetStyle.iconSize, + height: iconSize ?? PopupItemWidgetStyle.iconSize, + fit: BoxFit.fill, + colorFilter: colorIcon?.asFilter() + ), + const SizedBox(width: PopupItemWidgetStyle.space), + Expanded(child: Text( + _nameAction, + style: styleName ?? PopupItemWidgetStyle.labelTextStyle + )), + if (isSelected == true && selectedIcon != null) + Padding( + padding: PopupItemWidgetStyle.iconSelectedPadding, + child: SvgPicture.asset( + selectedIcon!, + width: PopupItemWidgetStyle.selectedIconSize, + height: PopupItemWidgetStyle.selectedIconSize, + fit: BoxFit.fill + ), + ) + ]), + ) + ), ), ); } diff --git a/lib/features/base/widget/popup_menu_overlay_widget.dart b/lib/features/base/widget/popup_menu_overlay_widget.dart index 6cc276b84..e82d9873b 100644 --- a/lib/features/base/widget/popup_menu_overlay_widget.dart +++ b/lib/features/base/widget/popup_menu_overlay_widget.dart @@ -11,6 +11,9 @@ class PopupMenuOverlayWidget extends StatelessWidget { final double? borderRadius; final Color? backgroundColor; final CustomPopupMenuController? controller; + final bool arrangeAsList; + final PreferredPosition? position; + final EdgeInsetsGeometry? padding; const PopupMenuOverlayWidget({ Key? key, @@ -20,6 +23,9 @@ class PopupMenuOverlayWidget extends StatelessWidget { this.borderRadius, this.backgroundColor, this.controller, + this.position = PreferredPosition.bottom, + this.arrangeAsList = false, + this.padding, }) : super(key: key); @override @@ -36,14 +42,17 @@ class PopupMenuOverlayWidget extends StatelessWidget { decoration: BoxDecoration( color: backgroundColor ?? Colors.white, borderRadius: BorderRadius.circular(borderRadius ?? 12)), - padding: const EdgeInsets.symmetric(horizontal: 5), - child: Wrap(children: listButtonAction), + padding: padding, + clipBehavior: Clip.antiAlias, + child: arrangeAsList + ? IntrinsicWidth(child: Column(children: listButtonAction)) + : Wrap(children: listButtonAction) ), ), ); }, pressType: PressType.singleClick, - position: PreferredPosition.bottom, + position: position, barrierColor: Colors.transparent, arrowSize: 0.0, verticalMargin: 8, diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 8777e53b8..fa7fce98b 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'package:collection/collection.dart'; import 'package:core/core.dart'; +import 'package:custom_pop_up_menu/custom_pop_up_menu.dart'; import 'package:dartz/dartz.dart'; import 'package:desktop_drop/desktop_drop.dart'; import 'package:dio/dio.dart'; @@ -184,6 +185,7 @@ class ComposerController extends BaseController RichTextMobileTabletController? richTextMobileTabletController; RichTextWebController? richTextWebController; + CustomPopupMenuController? menuMoreOptionController; final ScrollController scrollController = ScrollController(); final ScrollController scrollControllerEmailAddress = ScrollController(); @@ -237,6 +239,7 @@ class ComposerController extends BaseController if (PlatformInfo.isWeb) { richTextWebController = getBinding(); responsiveContainerKey = GlobalKey(); + menuMoreOptionController = CustomPopupMenuController(); } else { richTextMobileTabletController = getBinding(); } @@ -277,6 +280,8 @@ class ComposerController extends BaseController if (PlatformInfo.isWeb) { richTextWebController = null; responsiveContainerKey = null; + menuMoreOptionController?.dispose(); + menuMoreOptionController = null; } else { richTextMobileTabletController = null; } @@ -476,7 +481,7 @@ class ComposerController extends BaseController outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId, sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent], draftsMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts], - draftsEmailId: _getDraftEmailId(), + draftsEmailId: getDraftEmailId(), answerForwardEmailId: composerArguments.value!.presentationEmail?.id, unsubscribeEmailId: composerArguments.value!.previousEmailId, messageId: composerArguments.value!.messageId, @@ -1046,7 +1051,7 @@ class ComposerController extends BaseController inlineAttachments: uploadController.mapInlineAttachments, outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId, sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent], - draftsEmailId: _getDraftEmailId(), + draftsEmailId: getDraftEmailId(), answerForwardEmailId: composerArguments.value!.presentationEmail?.id, unsubscribeEmailId: composerArguments.value!.previousEmailId, messageId: composerArguments.value!.messageId, @@ -2000,6 +2005,9 @@ class ComposerController extends BaseController FocusManager.instance.primaryFocus?.unfocus(); richTextWebController?.editorController.setFocus(); richTextWebController?.closeAllMenuPopup(); + if (menuMoreOptionController?.menuIsShowing == true) { + menuMoreOptionController?.hideMenu(); + } } void handleOnMouseDownHtmlEditorWeb() { @@ -2277,7 +2285,7 @@ class ComposerController extends BaseController popBack(); final emailContent = await getContentInEditor(); - final draftEmailId = _getDraftEmailId(); + final draftEmailId = getDraftEmailId(); log('ComposerController::_handleSaveMessageToDraft: draftEmailId = $draftEmailId'); final cancelToken = CancelToken(); final resultState = await _showSavingMessageToDraftsDialog( @@ -2306,7 +2314,7 @@ class ComposerController extends BaseController } } - EmailId? _getDraftEmailId() { + EmailId? getDraftEmailId() { if (_emailIdEditing != null && _emailIdEditing != composerArguments.value!.presentationEmail?.id) { return _emailIdEditing; diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index a7b9974bb..0a48ac8f7 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -48,6 +48,7 @@ class ComposerView extends GetWidget { children: [ if (controller.responsiveUtils.isLandscapeMobile(context)) Obx(() => LandscapeAppBarComposerWidget( + imagePaths: controller.imagePaths, isSendButtonEnabled: controller.isEnableEmailSendButton.value, onCloseViewAction: () => controller.handleClickCloseComposer(context), sendMessageAction: () => controller.handleClickSendButton(context), @@ -73,6 +74,7 @@ class ComposerView extends GetWidget { )) else Obx(() => AppBarComposerWidget( + imagePaths: controller.imagePaths, isSendButtonEnabled: controller.isEnableEmailSendButton.value, onCloseViewAction: () => controller.handleClickCloseComposer(context), sendMessageAction: () => controller.handleClickSendButton(context), diff --git a/lib/features/composer/presentation/composer_view_web.dart b/lib/features/composer/presentation/composer_view_web.dart index 1f002e1b9..1974d69ac 100644 --- a/lib/features/composer/presentation/composer_view_web.dart +++ b/lib/features/composer/presentation/composer_view_web.dart @@ -1,11 +1,9 @@ -import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/views/responsive/responsive_widget.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:model/email/prefix_email_address.dart'; import 'package:pointer_interceptor/pointer_interceptor.dart'; -import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/composer_controller.dart'; import 'package:tmail_ui_user/features/composer/presentation/extensions/composer_print_draft_extension.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.dart'; @@ -26,8 +24,6 @@ import 'package:tmail_ui_user/features/composer/presentation/widgets/web/from_co import 'package:tmail_ui_user/features/composer/presentation/widgets/web/local_file_drop_zone_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/toolbar_rich_text_builder.dart'; -import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; -import 'package:tmail_ui_user/main/routes/route_navigation.dart'; class ComposerView extends GetWidget { @@ -50,18 +46,18 @@ class ComposerView extends GetWidget { isFormattingOptionsEnabled: controller.richTextWebController!.isFormattingOptionsEnabled, openRichToolbarAction: controller.richTextWebController!.toggleFormattingOptions, isSendButtonEnabled: controller.isEnableEmailSendButton.value, + hasRequestReadReceipt: controller.hasRequestReadReceipt.value, + isPrintDraftEnabled: controller.isEmailChanged.value, + menuMoreOptionController: controller.menuMoreOptionController!, onCloseViewAction: () => controller.handleClickCloseComposer(context), attachFileAction: () => controller.openFilePickerByType(context, FileType.any), insertImageAction: () => controller.insertImage(context, constraints.maxWidth), sendMessageAction: () => controller.handleClickSendButton(context), - openContextMenuAction: (position) { - controller.openPopupMenuAction( - context, - position, - _createMoreOptionPopupItems(context), - radius: ComposerStyle.popupMenuRadius - ); - }, + toggleCodeViewAction: controller.richTextWebController!.toggleCodeView, + printDraftAction: () => controller.printDraft(context), + toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context), + saveToDraftsAction: () => controller.handleClickSaveAsDraftsButton(context), + deleteComposerAction: () => controller.handleClickDeleteComposer(context), )), ConstrainedBox( constraints: BoxConstraints( @@ -523,14 +519,10 @@ class ComposerView extends GetWidget { saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context), sendMessageAction: () => controller.handleClickSendButton(context), isPrintDraftEnabled: controller.isEmailChanged.isTrue, - openContextMenuAction: (position) { - controller.openPopupMenuAction( - context, - position, - _createMoreOptionPopupItemsOnDesktop(context), - radius: ComposerStyle.popupMenuRadius, - ); - }, + toggleCodeViewAction: controller.richTextWebController!.toggleCodeView, + menuMoreOptionController: controller.menuMoreOptionController!, + printDraftAction: () => controller.printDraft(context), + toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context), )), ], ), @@ -810,14 +802,10 @@ class ComposerView extends GetWidget { saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context), sendMessageAction: () => controller.handleClickSendButton(context), isPrintDraftEnabled: controller.isEmailChanged.isTrue, - openContextMenuAction: (position) { - controller.openPopupMenuAction( - context, - position, - _createMoreOptionPopupItemsOnDesktop(context), - radius: ComposerStyle.popupMenuRadius, - ); - }, + toggleCodeViewAction: controller.richTextWebController!.toggleCodeView, + menuMoreOptionController: controller.menuMoreOptionController!, + printDraftAction: () => controller.printDraft(context), + toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context), )), ], ), @@ -877,136 +865,4 @@ class ComposerView extends GetWidget { ) ); } - - List _createMoreOptionPopupItems(BuildContext context) { - return [ - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icStyleCodeView, - AppLocalizations.of(context).embedCode, - styleName: ComposerStyle.popupItemTextStyle, - colorIcon: ComposerStyle.popupItemIconColor, - padding: ComposerStyle.popupItemPadding, - selectedIcon: controller.imagePaths.icFilterSelected, - isSelected: controller.richTextWebController?.codeViewEnabled, - onCallbackAction: () { - popBack(); - controller.richTextWebController?.toggleCodeView(); - } - ) - ), - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icReadReceipt, - AppLocalizations.of(context).requestReadReceipt, - styleName: ComposerStyle.popupItemTextStyle, - padding: ComposerStyle.popupItemPadding, - colorIcon: ComposerStyle.popupItemIconColor, - selectedIcon: controller.imagePaths.icFilterSelected, - isSelected: controller.hasRequestReadReceipt.value, - onCallbackAction: () { - popBack(); - controller.toggleRequestReadReceipt(context); - } - ) - ), - if (controller.isEmailChanged.isTrue) - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icPrinter, - AppLocalizations.of(context).print, - colorIcon: AppColor.steelGrayA540, - styleName: ComposerStyle.popupItemTextStyle, - padding: ComposerStyle.popupItemPadding, - onCallbackAction: () { - popBack(); - controller.printDraft(context); - }, - ), - ), - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icSaveToDraft, - AppLocalizations.of(context).saveAsDraft, - colorIcon: ComposerStyle.popupItemIconColor, - styleName: ComposerStyle.popupItemTextStyle, - padding: ComposerStyle.popupItemPadding, - onCallbackAction: () { - popBack(); - controller.handleClickSaveAsDraftsButton(context); - } - ) - ), - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icDeleteMailbox, - AppLocalizations.of(context).delete, - colorIcon: ComposerStyle.popupItemIconColor, - styleName: ComposerStyle.popupItemTextStyle, - padding: ComposerStyle.popupItemPadding, - onCallbackAction: () { - popBack(); - controller.handleClickDeleteComposer(context); - }, - ) - ), - ]; - } - - List _createMoreOptionPopupItemsOnDesktop(BuildContext context) { - return [ - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icStyleCodeView, - AppLocalizations.of(context).embedCode, - styleName: ComposerStyle.popupItemTextStyle, - colorIcon: ComposerStyle.popupItemIconColor, - padding: ComposerStyle.popupItemPadding, - selectedIcon: controller.imagePaths.icFilterSelected, - isSelected: controller.richTextWebController?.codeViewEnabled, - onCallbackAction: () { - popBack(); - controller.richTextWebController?.toggleCodeView(); - }, - ), - ), - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icReadReceipt, - AppLocalizations.of(context).requestReadReceipt, - styleName: ComposerStyle.popupItemTextStyle, - padding: ComposerStyle.popupItemPadding, - colorIcon: ComposerStyle.popupItemIconColor, - selectedIcon: controller.imagePaths.icFilterSelected, - isSelected: controller.hasRequestReadReceipt.value, - onCallbackAction: () { - popBack(); - controller.toggleRequestReadReceipt(context); - }, - ), - ), - if (controller.isEmailChanged.isTrue) - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icPrinter, - AppLocalizations.of(context).print, - colorIcon: ComposerStyle.popupItemIconColor, - styleName: ComposerStyle.popupItemTextStyle, - padding: ComposerStyle.popupItemPadding, - onCallbackAction: () { - popBack(); - controller.printDraft(context); - }, - ), - ), - ]; - } } \ No newline at end of file diff --git a/lib/features/composer/presentation/extensions/composer_print_draft_extension.dart b/lib/features/composer/presentation/extensions/composer_print_draft_extension.dart index a8f85471f..dba35a164 100644 --- a/lib/features/composer/presentation/extensions/composer_print_draft_extension.dart +++ b/lib/features/composer/presentation/extensions/composer_print_draft_extension.dart @@ -4,6 +4,7 @@ import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/utils/app_logger.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:model/email/email_action_type.dart'; import 'package:model/extensions/identity_extension.dart'; import 'package:model/extensions/list_email_address_extension.dart'; import 'package:model/extensions/presentation_email_extension.dart'; @@ -13,6 +14,7 @@ import 'package:tmail_ui_user/features/composer/presentation/composer_controller import 'package:tmail_ui_user/features/composer/presentation/model/draft_email_print.dart'; import 'package:tmail_ui_user/features/composer/presentation/widgets/web/print_draft_dialog_view.dart'; import 'package:tmail_ui_user/features/email/domain/state/print_email_state.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/extensions/datetime_extension.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; extension ComposerPrintDraftExtension on ComposerController { @@ -59,8 +61,26 @@ extension ComposerPrintDraftExtension on ComposerController { required Locale locale, required String emailContent, }) { - final presentationEmail = composerArguments.value!.presentationEmail; + final presentationEmail = composerArguments.value?.presentationEmail; + final emailActionType = composerArguments.value?.emailActionType; + String receiveTime = ''; + if (emailActionType == EmailActionType.editDraft) { + receiveTime = presentationEmail?.getReceivedAt( + locale.toLanguageTag(), + pattern: presentationEmail.receivedAt + ?.value + .toLocal() + .toPatternForPrinting(locale.toLanguageTag()), + ) ?? ''; + } else { + final currentTime = DateTime.now(); + receiveTime = currentTime.formatDate( + locale: locale.toLanguageTag(), + pattern: currentTime.toPatternForPrinting(locale.toLanguageTag()), + ); + } + log('ComposerPrintDraftExtension::_showPrintDraftsDialog:receiveTime = $receiveTime | emailActionType = $emailActionType'); final childWidget = PointerInterceptor( child: PrintDraftDialogView( emailPrint: DraftEmailPrint( @@ -68,7 +88,6 @@ extension ComposerPrintDraftExtension on ComposerController { userName: mailboxDashBoardController.userEmail, attachments: uploadController.allAttachmentsUploaded, emailContent: emailContent, - locale: locale.toLanguageTag(), fromPrefix: appLocalizations.from_email_address_prefix, toPrefix: appLocalizations.to_email_address_prefix, ccPrefix: appLocalizations.cc_email_address_prefix, @@ -79,14 +98,8 @@ extension ComposerPrintDraftExtension on ComposerController { ccAddress: listCcEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(), bccAddress: listBccEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(), sender: identitySelected.value?.toEmailAddress(), - receiveTime: presentationEmail?.getReceivedAt( - locale.toLanguageTag(), - pattern: presentationEmail.receivedAt - ?.value - .toLocal() - .toPatternForPrinting(locale.toLanguageTag()), - ) ?? '', - subject: presentationEmail?.subject, + receiveTime: receiveTime, + subject: subjectEmail.value ?? '', ), printEmailInteractor: printEmailInteractor, ), diff --git a/lib/features/composer/presentation/mixin/rich_text_button_mixin.dart b/lib/features/composer/presentation/mixin/rich_text_button_mixin.dart index 484c277cf..e8d34570e 100644 --- a/lib/features/composer/presentation/mixin/rich_text_button_mixin.dart +++ b/lib/features/composer/presentation/mixin/rich_text_button_mixin.dart @@ -324,6 +324,7 @@ mixin RichTextButtonMixin { _imagePaths, (paragraph) => richTextController.applyParagraphType(paragraph))) .toList(), + padding: const EdgeInsets.symmetric(horizontal: 5), iconButton: buildWrapIconStyleText( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5), spacing: 3, @@ -344,6 +345,7 @@ mixin RichTextButtonMixin { _imagePaths, (orderType) => richTextController.applyOrderListType(orderType))) .toList(), + padding: const EdgeInsets.symmetric(horizontal: 5), iconButton: buildWrapIconStyleText( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5), spacing: 3, diff --git a/lib/features/composer/presentation/model/draft_email_print.dart b/lib/features/composer/presentation/model/draft_email_print.dart index 9dbd3ca41..1fdb52c08 100644 --- a/lib/features/composer/presentation/model/draft_email_print.dart +++ b/lib/features/composer/presentation/model/draft_email_print.dart @@ -6,7 +6,6 @@ class DraftEmailPrint extends EmailPrint { required super.appName, required super.userName, required super.emailContent, - required super.locale, required super.fromPrefix, required super.toPrefix, required super.ccPrefix, diff --git a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart index 827574f81..73c3fcbd3 100644 --- a/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart +++ b/lib/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart @@ -10,11 +10,19 @@ class MobileAppBarComposerWidgetStyle { static const double richTextIconSize = 28; static const Color backgroundColor = AppColor.colorComposerAppBar; - static const Color iconColor = AppColor.colorMobileRichButtonComposer; + static const Color iconColor = AppColor.steelGrayA540; + static const Color popupItemIconColor = AppColor.steelGrayA540; static const Color selectedBackgroundColor = AppColor.colorSelected; - static const Color selectedIconColor = AppColor.primaryColor; + static const Color selectedIconColor = AppColor.blue700; static const EdgeInsetsGeometry padding = EdgeInsetsDirectional.symmetric(horizontal: 12); static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(3); static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(5); + static const EdgeInsetsGeometry popupItemPadding = EdgeInsetsDirectional.symmetric(horizontal: 12); + + static const TextStyle popupItemTextStyle = TextStyle( + color: Colors.black, + fontSize: 16, + fontWeight: FontWeight.w500, + ); } \ No newline at end of file diff --git a/lib/features/composer/presentation/styles/web/bottom_bar_composer_widget_style.dart b/lib/features/composer/presentation/styles/web/bottom_bar_composer_widget_style.dart index fe34fefdb..b55df2bff 100644 --- a/lib/features/composer/presentation/styles/web/bottom_bar_composer_widget_style.dart +++ b/lib/features/composer/presentation/styles/web/bottom_bar_composer_widget_style.dart @@ -22,9 +22,16 @@ class BottomBarComposerWidgetStyle { static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(5); static const EdgeInsetsGeometry sendButtonPadding = EdgeInsetsDirectional.symmetric(vertical: 8, horizontal: 24); static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(2); + static const EdgeInsetsGeometry popupItemPadding = EdgeInsetsDirectional.symmetric(horizontal: 12); + static const TextStyle sendButtonTextStyle = TextStyle( fontWeight: FontWeight.w500, fontSize: 15, color: Colors.white, ); + static const TextStyle popupItemTextStyle = TextStyle( + color: Colors.black, + fontSize: 16, + fontWeight: FontWeight.w500, + ); } \ No newline at end of file diff --git a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart index 0200424ec..f230fa3ef 100644 --- a/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart @@ -1,13 +1,14 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/views/button/tmail_button_widget.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart'; -import 'package:tmail_ui_user/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; +typedef OnOpenContextMenuAction = Function(RelativeRect position); + class AppBarComposerWidget extends StatelessWidget { + final ImagePaths imagePaths; final bool isSendButtonEnabled; final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; @@ -17,10 +18,9 @@ class AppBarComposerWidget extends StatelessWidget { final VoidCallback openRichToolbarAction; final OnOpenContextMenuAction openContextMenuAction; - final _imagePaths = Get.find(); - - AppBarComposerWidget({ + const AppBarComposerWidget({ super.key, + required this.imagePaths, required this.isSendButtonEnabled, required this.onCloseViewAction, required this.sendMessageAction, @@ -40,7 +40,7 @@ class AppBarComposerWidget extends StatelessWidget { child: Row( children: [ TMailButtonWidget.fromIcon( - icon: _imagePaths.icCancel, + icon: imagePaths.icCancel, backgroundColor: Colors.transparent, tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, @@ -49,7 +49,7 @@ class AppBarComposerWidget extends StatelessWidget { ), const Spacer(), TMailButtonWidget.fromIcon( - icon: _imagePaths.icRichToolbar, + icon: imagePaths.icRichToolbar, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize, @@ -61,7 +61,7 @@ class AppBarComposerWidget extends StatelessWidget { ...[ const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( - icon: _imagePaths.icAttachFile, + icon: imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, iconSize: MobileAppBarComposerWidgetStyle.iconSize, @@ -70,7 +70,7 @@ class AppBarComposerWidget extends StatelessWidget { ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( - icon: _imagePaths.icInsertImage, + icon: imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, iconSize: MobileAppBarComposerWidgetStyle.iconSize, @@ -81,8 +81,8 @@ class AppBarComposerWidget extends StatelessWidget { ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled - ? _imagePaths.icSendMobile - : _imagePaths.icSendDisable, + ? imagePaths.icSendMobile + : imagePaths.icSendDisable, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.sendButtonIconSize, @@ -91,7 +91,7 @@ class AppBarComposerWidget extends StatelessWidget { ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( - icon: _imagePaths.icMore, + icon: imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, diff --git a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart index 2d74fc056..459dc9d87 100644 --- a/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/mobile/landscape_app_bar_composer_widget.dart @@ -1,13 +1,13 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/views/button/tmail_button_widget.dart'; import 'package:flutter/material.dart'; -import 'package:get/get.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart'; -import 'package:tmail_ui_user/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart'; +import 'package:tmail_ui_user/features/composer/presentation/widgets/mobile/app_bar_composer_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class LandscapeAppBarComposerWidget extends StatelessWidget { + final ImagePaths imagePaths; final bool isSendButtonEnabled; final bool isNetworkConnectionAvailable; final VoidCallback onCloseViewAction; @@ -17,10 +17,9 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { final VoidCallback openRichToolbarAction; final OnOpenContextMenuAction openContextMenuAction; - final _imagePaths = Get.find(); - - LandscapeAppBarComposerWidget({ + const LandscapeAppBarComposerWidget({ super.key, + required this.imagePaths, required this.isSendButtonEnabled, required this.onCloseViewAction, required this.sendMessageAction, @@ -43,7 +42,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { child: Row( children: [ TMailButtonWidget.fromIcon( - icon: _imagePaths.icCancel, + icon: imagePaths.icCancel, backgroundColor: Colors.transparent, tooltipMessage: AppLocalizations.of(context).saveAndClose, iconSize: MobileAppBarComposerWidgetStyle.iconSize, @@ -52,7 +51,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { ), const Spacer(), TMailButtonWidget.fromIcon( - icon: _imagePaths.icRichToolbar, + icon: imagePaths.icRichToolbar, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize, @@ -64,7 +63,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { ...[ const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( - icon: _imagePaths.icAttachFile, + icon: imagePaths.icAttachFile, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, iconSize: MobileAppBarComposerWidgetStyle.iconSize, @@ -73,7 +72,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( - icon: _imagePaths.icInsertImage, + icon: imagePaths.icInsertImage, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, iconSize: MobileAppBarComposerWidgetStyle.iconSize, @@ -84,8 +83,8 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { ], TMailButtonWidget.fromIcon( icon: isSendButtonEnabled - ? _imagePaths.icSendMobile - : _imagePaths.icSendDisable, + ? imagePaths.icSendMobile + : imagePaths.icSendDisable, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, iconSize: MobileAppBarComposerWidgetStyle.sendButtonIconSize, @@ -94,7 +93,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget { ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( - icon: _imagePaths.icMore, + icon: imagePaths.icMore, iconColor: MobileAppBarComposerWidgetStyle.iconColor, backgroundColor: Colors.transparent, padding: MobileAppBarComposerWidgetStyle.iconPadding, diff --git a/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart index d3bff3aa0..9538efe6f 100644 --- a/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart @@ -1,8 +1,11 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/views/button/tmail_button_widget.dart'; +import 'package:custom_pop_up_menu/custom_pop_up_menu.dart'; import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/features/base/widget/highlight_svg_icon_on_hover.dart'; +import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart'; +import 'package:tmail_ui_user/features/base/widget/popup_menu_overlay_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/web/bottom_bar_composer_widget_style.dart'; -import 'package:tmail_ui_user/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; class BottomBarComposerWidget extends StatelessWidget { @@ -12,13 +15,16 @@ class BottomBarComposerWidget extends StatelessWidget { final bool isPrintDraftEnabled; final bool isFormattingOptionsEnabled; final bool hasReadReceipt; + final CustomPopupMenuController menuMoreOptionController; final VoidCallback openRichToolbarAction; final VoidCallback attachFileAction; final VoidCallback insertImageAction; final VoidCallback deleteComposerAction; final VoidCallback saveToDraftAction; final VoidCallback sendMessageAction; - final OnOpenContextMenuAction openContextMenuAction; + final VoidCallback toggleCodeViewAction; + final VoidCallback toggleRequestReadReceiptAction; + final VoidCallback printDraftAction; const BottomBarComposerWidget({ super.key, @@ -27,13 +33,16 @@ class BottomBarComposerWidget extends StatelessWidget { required this.isPrintDraftEnabled, required this.isFormattingOptionsEnabled, required this.hasReadReceipt, + required this.menuMoreOptionController, required this.openRichToolbarAction, required this.attachFileAction, required this.insertImageAction, required this.deleteComposerAction, required this.saveToDraftAction, required this.sendMessageAction, - required this.openContextMenuAction, + required this.toggleCodeViewAction, + required this.toggleRequestReadReceiptAction, + required this.printDraftAction, }); @override @@ -84,13 +93,56 @@ class BottomBarComposerWidget extends StatelessWidget { ), ), const SizedBox(width: BottomBarComposerWidgetStyle.space), - TMailButtonWidget.fromIcon( - icon: imagePaths.icMore, - iconColor: BottomBarComposerWidgetStyle.iconColor, - backgroundColor: Colors.transparent, - iconSize: BottomBarComposerWidgetStyle.iconSize, - tooltipMessage: AppLocalizations.of(context).more, - onTapActionAtPositionCallback: openContextMenuAction, + PopupMenuOverlayWidget( + controller: menuMoreOptionController, + iconButton: HighlightSVGIconOnHover( + icon: imagePaths.icMore, + size: BottomBarComposerWidgetStyle.iconSize, + iconColor: BottomBarComposerWidgetStyle.iconColor, + tooltipMessage: AppLocalizations.of(context).more, + ), + listButtonAction: [ + PopupItemWidget( + imagePaths.icStyleCodeView, + AppLocalizations.of(context).embedCode, + styleName: BottomBarComposerWidgetStyle.popupItemTextStyle, + colorIcon: BottomBarComposerWidgetStyle.iconColor, + padding: BottomBarComposerWidgetStyle.popupItemPadding, + selectedIcon: imagePaths.icFilterSelected, + isSelected: isCodeViewEnabled, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + toggleCodeViewAction(); + }, + ), + PopupItemWidget( + imagePaths.icReadReceipt, + AppLocalizations.of(context).requestReadReceipt, + styleName: BottomBarComposerWidgetStyle.popupItemTextStyle, + padding: BottomBarComposerWidgetStyle.popupItemPadding, + colorIcon: BottomBarComposerWidgetStyle.iconColor, + selectedIcon: imagePaths.icFilterSelected, + isSelected: hasReadReceipt, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + toggleRequestReadReceiptAction(); + }, + ), + if (isPrintDraftEnabled) + PopupItemWidget( + imagePaths.icPrinter, + AppLocalizations.of(context).print, + colorIcon: BottomBarComposerWidgetStyle.iconColor, + styleName: BottomBarComposerWidgetStyle.popupItemTextStyle, + padding: BottomBarComposerWidgetStyle.popupItemPadding, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + printDraftAction(); + }, + ), + ], + arrangeAsList: true, + position: null, ), const Spacer(), TMailButtonWidget.fromIcon( diff --git a/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart index 90813f89d..3ecf1d546 100644 --- a/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/web/mobile_responsive_app_bar_composer_widget.dart @@ -1,23 +1,32 @@ import 'package:core/presentation/resources/image_paths.dart'; import 'package:core/presentation/views/button/tmail_button_widget.dart'; +import 'package:custom_pop_up_menu/custom_pop_up_menu.dart'; import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/features/base/widget/highlight_svg_icon_on_hover.dart'; +import 'package:tmail_ui_user/features/base/widget/popup_item_widget.dart'; +import 'package:tmail_ui_user/features/base/widget/popup_menu_overlay_widget.dart'; import 'package:tmail_ui_user/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; -typedef OnOpenContextMenuAction = Function(RelativeRect position); - class MobileResponsiveAppBarComposerWidget extends StatelessWidget { final ImagePaths imagePaths; final bool isCodeViewEnabled; final bool isSendButtonEnabled; final bool isFormattingOptionsEnabled; + final bool hasRequestReadReceipt; + final bool isPrintDraftEnabled; + final CustomPopupMenuController menuMoreOptionController; final VoidCallback onCloseViewAction; final VoidCallback attachFileAction; final VoidCallback insertImageAction; final VoidCallback sendMessageAction; - final OnOpenContextMenuAction openContextMenuAction; final VoidCallback openRichToolbarAction; + final VoidCallback toggleCodeViewAction; + final VoidCallback toggleRequestReadReceiptAction; + final VoidCallback printDraftAction; + final VoidCallback saveToDraftsAction; + final VoidCallback deleteComposerAction; const MobileResponsiveAppBarComposerWidget({ super.key, @@ -25,12 +34,19 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { required this.isCodeViewEnabled, required this.isFormattingOptionsEnabled, required this.isSendButtonEnabled, + required this.hasRequestReadReceipt, + required this.isPrintDraftEnabled, + required this.menuMoreOptionController, required this.openRichToolbarAction, required this.onCloseViewAction, required this.attachFileAction, required this.insertImageAction, required this.sendMessageAction, - required this.openContextMenuAction, + required this.toggleCodeViewAction, + required this.toggleRequestReadReceiptAction, + required this.printDraftAction, + required this.saveToDraftsAction, + required this.deleteComposerAction, }); @override @@ -94,13 +110,78 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget { onTapActionCallback: sendMessageAction, ), const SizedBox(width: MobileAppBarComposerWidgetStyle.space), - TMailButtonWidget.fromIcon( - icon: imagePaths.icMore, - iconColor: MobileAppBarComposerWidgetStyle.iconColor, - backgroundColor: Colors.transparent, - iconSize: MobileAppBarComposerWidgetStyle.iconSize, - tooltipMessage: AppLocalizations.of(context).more, - onTapActionAtPositionCallback: openContextMenuAction, + PopupMenuOverlayWidget( + controller: menuMoreOptionController, + iconButton: HighlightSVGIconOnHover( + icon: imagePaths.icMore, + size: MobileAppBarComposerWidgetStyle.iconSize, + iconColor: MobileAppBarComposerWidgetStyle.iconColor, + tooltipMessage: AppLocalizations.of(context).more, + ), + listButtonAction: [ + PopupItemWidget( + imagePaths.icStyleCodeView, + AppLocalizations.of(context).embedCode, + styleName: MobileAppBarComposerWidgetStyle.popupItemTextStyle, + colorIcon: MobileAppBarComposerWidgetStyle.iconColor, + padding: MobileAppBarComposerWidgetStyle.popupItemPadding, + selectedIcon: imagePaths.icFilterSelected, + isSelected: isCodeViewEnabled, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + toggleCodeViewAction(); + }, + ), + PopupItemWidget( + imagePaths.icReadReceipt, + AppLocalizations.of(context).requestReadReceipt, + styleName: MobileAppBarComposerWidgetStyle.popupItemTextStyle, + padding: MobileAppBarComposerWidgetStyle.popupItemPadding, + colorIcon: MobileAppBarComposerWidgetStyle.popupItemIconColor, + selectedIcon: imagePaths.icFilterSelected, + isSelected: hasRequestReadReceipt, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + toggleRequestReadReceiptAction(); + }, + ), + if (isPrintDraftEnabled) + PopupItemWidget( + imagePaths.icPrinter, + AppLocalizations.of(context).print, + colorIcon: MobileAppBarComposerWidgetStyle.popupItemIconColor, + styleName: MobileAppBarComposerWidgetStyle.popupItemTextStyle, + padding: MobileAppBarComposerWidgetStyle.popupItemPadding, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + printDraftAction(); + }, + ), + PopupItemWidget( + imagePaths.icSaveToDraft, + AppLocalizations.of(context).saveAsDraft, + colorIcon: MobileAppBarComposerWidgetStyle.popupItemIconColor, + styleName: MobileAppBarComposerWidgetStyle.popupItemTextStyle, + padding: MobileAppBarComposerWidgetStyle.popupItemPadding, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + saveToDraftsAction(); + }, + ), + PopupItemWidget( + imagePaths.icDeleteMailbox, + AppLocalizations.of(context).delete, + colorIcon: MobileAppBarComposerWidgetStyle.popupItemIconColor, + styleName: MobileAppBarComposerWidgetStyle.popupItemTextStyle, + padding: MobileAppBarComposerWidgetStyle.popupItemPadding, + onCallbackAction: () { + menuMoreOptionController.hideMenu(); + deleteComposerAction(); + }, + ), + ], + arrangeAsList: true, + position: null, ), ], ), diff --git a/lib/features/composer/presentation/widgets/web/toolbar_rich_text_builder.dart b/lib/features/composer/presentation/widgets/web/toolbar_rich_text_builder.dart index 8e98cb961..a207f2e1c 100644 --- a/lib/features/composer/presentation/widgets/web/toolbar_rich_text_builder.dart +++ b/lib/features/composer/presentation/widgets/web/toolbar_rich_text_builder.dart @@ -212,6 +212,7 @@ class ToolbarRichTextWebBuilder extends StatelessWidget with RichTextButtonMixin _imagePaths, (paragraph) => richTextWebController.applyParagraphType(paragraph))) .toList(), + padding: const EdgeInsets.symmetric(horizontal: 5), iconButton: buildWrapIconStyleText( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5), spacing: 3, @@ -235,6 +236,7 @@ class ToolbarRichTextWebBuilder extends StatelessWidget with RichTextButtonMixin _imagePaths, (orderType) => richTextWebController.applyOrderListType(orderType))) .toList(), + padding: const EdgeInsets.symmetric(horizontal: 5), iconButton: buildWrapIconStyleText( padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5), spacing: 3, diff --git a/lib/features/email/domain/model/email_print.dart b/lib/features/email/domain/model/email_print.dart index caca107a8..67d223eab 100644 --- a/lib/features/email/domain/model/email_print.dart +++ b/lib/features/email/domain/model/email_print.dart @@ -6,7 +6,6 @@ class EmailPrint with EquatableMixin { final String appName; final String userName; final String emailContent; - final String locale; final String toPrefix; final String fromPrefix; final String ccPrefix; @@ -26,7 +25,6 @@ class EmailPrint with EquatableMixin { required this.appName, required this.userName, required this.emailContent, - required this.locale, required this.fromPrefix, required this.toPrefix, required this.ccPrefix, @@ -48,7 +46,6 @@ class EmailPrint with EquatableMixin { appName, userName, emailContent, - locale, fromPrefix, toPrefix, ccPrefix, @@ -74,7 +71,6 @@ extension EmailPrintExtension on EmailPrint { emailContent: newEmailContent, titleAttachment: titleAttachment, receiveTime: receiveTime, - locale: locale, fromPrefix: fromPrefix, toPrefix: toPrefix, ccPrefix: ccPrefix, diff --git a/lib/features/email/presentation/controller/single_email_controller.dart b/lib/features/email/presentation/controller/single_email_controller.dart index 818b7e496..04cf1a94d 100644 --- a/lib/features/email/presentation/controller/single_email_controller.dart +++ b/lib/features/email/presentation/controller/single_email_controller.dart @@ -1752,7 +1752,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin { userName: mailboxDashBoardController.userEmail, attachments: currentEmailLoaded.value!.attachments, emailContent: currentEmailLoaded.value!.htmlContent, - locale: locale.toLanguageTag(), fromPrefix: appLocalizations.from_email_address_prefix, toPrefix: appLocalizations.to_email_address_prefix, ccPrefix: appLocalizations.cc_email_address_prefix,