TF-3427 Fix subject was not in print & click outside context menu can not close
Signed-off-by: dab246 <tdvu@linagora.com>
This commit is contained in:
@@ -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<HighlightSVGIconOnHover> createState() => _HighlightSVGIconOnHoverState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _HighlightSVGIconOnHoverState extends State<HighlightSVGIconOnHover> {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -34,37 +34,40 @@ class PopupItemWidget extends StatelessWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return PointerInterceptor(
|
return PointerInterceptor(
|
||||||
child: InkWell(
|
child: Material(
|
||||||
onTap: onCallbackAction,
|
type: MaterialType.transparency,
|
||||||
child: Container(
|
child: InkWell(
|
||||||
height: PopupItemWidgetStyle.height,
|
onTap: onCallbackAction,
|
||||||
constraints: const BoxConstraints(minWidth: PopupItemWidgetStyle.minWidth),
|
child: Container(
|
||||||
padding: padding,
|
height: PopupItemWidgetStyle.height,
|
||||||
child: Row(children: [
|
constraints: const BoxConstraints(minWidth: PopupItemWidgetStyle.minWidth),
|
||||||
SvgPicture.asset(
|
padding: padding,
|
||||||
_iconAction,
|
child: Row(children: [
|
||||||
width: iconSize ?? PopupItemWidgetStyle.iconSize,
|
SvgPicture.asset(
|
||||||
height: iconSize ?? PopupItemWidgetStyle.iconSize,
|
_iconAction,
|
||||||
fit: BoxFit.fill,
|
width: iconSize ?? PopupItemWidgetStyle.iconSize,
|
||||||
colorFilter: colorIcon?.asFilter()
|
height: iconSize ?? PopupItemWidgetStyle.iconSize,
|
||||||
),
|
fit: BoxFit.fill,
|
||||||
const SizedBox(width: PopupItemWidgetStyle.space),
|
colorFilter: colorIcon?.asFilter()
|
||||||
Expanded(child: Text(
|
),
|
||||||
_nameAction,
|
const SizedBox(width: PopupItemWidgetStyle.space),
|
||||||
style: styleName ?? PopupItemWidgetStyle.labelTextStyle
|
Expanded(child: Text(
|
||||||
)),
|
_nameAction,
|
||||||
if (isSelected == true && selectedIcon != null)
|
style: styleName ?? PopupItemWidgetStyle.labelTextStyle
|
||||||
Padding(
|
)),
|
||||||
padding: PopupItemWidgetStyle.iconSelectedPadding,
|
if (isSelected == true && selectedIcon != null)
|
||||||
child: SvgPicture.asset(
|
Padding(
|
||||||
selectedIcon!,
|
padding: PopupItemWidgetStyle.iconSelectedPadding,
|
||||||
width: PopupItemWidgetStyle.selectedIconSize,
|
child: SvgPicture.asset(
|
||||||
height: PopupItemWidgetStyle.selectedIconSize,
|
selectedIcon!,
|
||||||
fit: BoxFit.fill
|
width: PopupItemWidgetStyle.selectedIconSize,
|
||||||
),
|
height: PopupItemWidgetStyle.selectedIconSize,
|
||||||
)
|
fit: BoxFit.fill
|
||||||
]),
|
),
|
||||||
)
|
)
|
||||||
|
]),
|
||||||
|
)
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ class PopupMenuOverlayWidget extends StatelessWidget {
|
|||||||
final double? borderRadius;
|
final double? borderRadius;
|
||||||
final Color? backgroundColor;
|
final Color? backgroundColor;
|
||||||
final CustomPopupMenuController? controller;
|
final CustomPopupMenuController? controller;
|
||||||
|
final bool arrangeAsList;
|
||||||
|
final PreferredPosition? position;
|
||||||
|
final EdgeInsetsGeometry? padding;
|
||||||
|
|
||||||
const PopupMenuOverlayWidget({
|
const PopupMenuOverlayWidget({
|
||||||
Key? key,
|
Key? key,
|
||||||
@@ -20,6 +23,9 @@ class PopupMenuOverlayWidget extends StatelessWidget {
|
|||||||
this.borderRadius,
|
this.borderRadius,
|
||||||
this.backgroundColor,
|
this.backgroundColor,
|
||||||
this.controller,
|
this.controller,
|
||||||
|
this.position = PreferredPosition.bottom,
|
||||||
|
this.arrangeAsList = false,
|
||||||
|
this.padding,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -36,14 +42,17 @@ class PopupMenuOverlayWidget extends StatelessWidget {
|
|||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
color: backgroundColor ?? Colors.white,
|
color: backgroundColor ?? Colors.white,
|
||||||
borderRadius: BorderRadius.circular(borderRadius ?? 12)),
|
borderRadius: BorderRadius.circular(borderRadius ?? 12)),
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 5),
|
padding: padding,
|
||||||
child: Wrap(children: listButtonAction),
|
clipBehavior: Clip.antiAlias,
|
||||||
|
child: arrangeAsList
|
||||||
|
? IntrinsicWidth(child: Column(children: listButtonAction))
|
||||||
|
: Wrap(children: listButtonAction)
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
pressType: PressType.singleClick,
|
pressType: PressType.singleClick,
|
||||||
position: PreferredPosition.bottom,
|
position: position,
|
||||||
barrierColor: Colors.transparent,
|
barrierColor: Colors.transparent,
|
||||||
arrowSize: 0.0,
|
arrowSize: 0.0,
|
||||||
verticalMargin: 8,
|
verticalMargin: 8,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import 'dart:math';
|
|||||||
|
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
|
import 'package:custom_pop_up_menu/custom_pop_up_menu.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:desktop_drop/desktop_drop.dart';
|
import 'package:desktop_drop/desktop_drop.dart';
|
||||||
import 'package:dio/dio.dart';
|
import 'package:dio/dio.dart';
|
||||||
@@ -184,6 +185,7 @@ class ComposerController extends BaseController
|
|||||||
|
|
||||||
RichTextMobileTabletController? richTextMobileTabletController;
|
RichTextMobileTabletController? richTextMobileTabletController;
|
||||||
RichTextWebController? richTextWebController;
|
RichTextWebController? richTextWebController;
|
||||||
|
CustomPopupMenuController? menuMoreOptionController;
|
||||||
|
|
||||||
final ScrollController scrollController = ScrollController();
|
final ScrollController scrollController = ScrollController();
|
||||||
final ScrollController scrollControllerEmailAddress = ScrollController();
|
final ScrollController scrollControllerEmailAddress = ScrollController();
|
||||||
@@ -237,6 +239,7 @@ class ComposerController extends BaseController
|
|||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
richTextWebController = getBinding<RichTextWebController>();
|
richTextWebController = getBinding<RichTextWebController>();
|
||||||
responsiveContainerKey = GlobalKey();
|
responsiveContainerKey = GlobalKey();
|
||||||
|
menuMoreOptionController = CustomPopupMenuController();
|
||||||
} else {
|
} else {
|
||||||
richTextMobileTabletController = getBinding<RichTextMobileTabletController>();
|
richTextMobileTabletController = getBinding<RichTextMobileTabletController>();
|
||||||
}
|
}
|
||||||
@@ -277,6 +280,8 @@ class ComposerController extends BaseController
|
|||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
richTextWebController = null;
|
richTextWebController = null;
|
||||||
responsiveContainerKey = null;
|
responsiveContainerKey = null;
|
||||||
|
menuMoreOptionController?.dispose();
|
||||||
|
menuMoreOptionController = null;
|
||||||
} else {
|
} else {
|
||||||
richTextMobileTabletController = null;
|
richTextMobileTabletController = null;
|
||||||
}
|
}
|
||||||
@@ -476,7 +481,7 @@ class ComposerController extends BaseController
|
|||||||
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
||||||
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
||||||
draftsMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts],
|
draftsMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleDrafts],
|
||||||
draftsEmailId: _getDraftEmailId(),
|
draftsEmailId: getDraftEmailId(),
|
||||||
answerForwardEmailId: composerArguments.value!.presentationEmail?.id,
|
answerForwardEmailId: composerArguments.value!.presentationEmail?.id,
|
||||||
unsubscribeEmailId: composerArguments.value!.previousEmailId,
|
unsubscribeEmailId: composerArguments.value!.previousEmailId,
|
||||||
messageId: composerArguments.value!.messageId,
|
messageId: composerArguments.value!.messageId,
|
||||||
@@ -1046,7 +1051,7 @@ class ComposerController extends BaseController
|
|||||||
inlineAttachments: uploadController.mapInlineAttachments,
|
inlineAttachments: uploadController.mapInlineAttachments,
|
||||||
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
outboxMailboxId: mailboxDashBoardController.outboxMailbox?.mailboxId,
|
||||||
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
sentMailboxId: mailboxDashBoardController.mapDefaultMailboxIdByRole[PresentationMailbox.roleSent],
|
||||||
draftsEmailId: _getDraftEmailId(),
|
draftsEmailId: getDraftEmailId(),
|
||||||
answerForwardEmailId: composerArguments.value!.presentationEmail?.id,
|
answerForwardEmailId: composerArguments.value!.presentationEmail?.id,
|
||||||
unsubscribeEmailId: composerArguments.value!.previousEmailId,
|
unsubscribeEmailId: composerArguments.value!.previousEmailId,
|
||||||
messageId: composerArguments.value!.messageId,
|
messageId: composerArguments.value!.messageId,
|
||||||
@@ -2000,6 +2005,9 @@ class ComposerController extends BaseController
|
|||||||
FocusManager.instance.primaryFocus?.unfocus();
|
FocusManager.instance.primaryFocus?.unfocus();
|
||||||
richTextWebController?.editorController.setFocus();
|
richTextWebController?.editorController.setFocus();
|
||||||
richTextWebController?.closeAllMenuPopup();
|
richTextWebController?.closeAllMenuPopup();
|
||||||
|
if (menuMoreOptionController?.menuIsShowing == true) {
|
||||||
|
menuMoreOptionController?.hideMenu();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleOnMouseDownHtmlEditorWeb() {
|
void handleOnMouseDownHtmlEditorWeb() {
|
||||||
@@ -2277,7 +2285,7 @@ class ComposerController extends BaseController
|
|||||||
popBack();
|
popBack();
|
||||||
|
|
||||||
final emailContent = await getContentInEditor();
|
final emailContent = await getContentInEditor();
|
||||||
final draftEmailId = _getDraftEmailId();
|
final draftEmailId = getDraftEmailId();
|
||||||
log('ComposerController::_handleSaveMessageToDraft: draftEmailId = $draftEmailId');
|
log('ComposerController::_handleSaveMessageToDraft: draftEmailId = $draftEmailId');
|
||||||
final cancelToken = CancelToken();
|
final cancelToken = CancelToken();
|
||||||
final resultState = await _showSavingMessageToDraftsDialog(
|
final resultState = await _showSavingMessageToDraftsDialog(
|
||||||
@@ -2306,7 +2314,7 @@ class ComposerController extends BaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EmailId? _getDraftEmailId() {
|
EmailId? getDraftEmailId() {
|
||||||
if (_emailIdEditing != null &&
|
if (_emailIdEditing != null &&
|
||||||
_emailIdEditing != composerArguments.value!.presentationEmail?.id) {
|
_emailIdEditing != composerArguments.value!.presentationEmail?.id) {
|
||||||
return _emailIdEditing;
|
return _emailIdEditing;
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ class ComposerView extends GetWidget<ComposerController> {
|
|||||||
children: [
|
children: [
|
||||||
if (controller.responsiveUtils.isLandscapeMobile(context))
|
if (controller.responsiveUtils.isLandscapeMobile(context))
|
||||||
Obx(() => LandscapeAppBarComposerWidget(
|
Obx(() => LandscapeAppBarComposerWidget(
|
||||||
|
imagePaths: controller.imagePaths,
|
||||||
isSendButtonEnabled: controller.isEnableEmailSendButton.value,
|
isSendButtonEnabled: controller.isEnableEmailSendButton.value,
|
||||||
onCloseViewAction: () => controller.handleClickCloseComposer(context),
|
onCloseViewAction: () => controller.handleClickCloseComposer(context),
|
||||||
sendMessageAction: () => controller.handleClickSendButton(context),
|
sendMessageAction: () => controller.handleClickSendButton(context),
|
||||||
@@ -73,6 +74,7 @@ class ComposerView extends GetWidget<ComposerController> {
|
|||||||
))
|
))
|
||||||
else
|
else
|
||||||
Obx(() => AppBarComposerWidget(
|
Obx(() => AppBarComposerWidget(
|
||||||
|
imagePaths: controller.imagePaths,
|
||||||
isSendButtonEnabled: controller.isEnableEmailSendButton.value,
|
isSendButtonEnabled: controller.isEnableEmailSendButton.value,
|
||||||
onCloseViewAction: () => controller.handleClickCloseComposer(context),
|
onCloseViewAction: () => controller.handleClickCloseComposer(context),
|
||||||
sendMessageAction: () => controller.handleClickSendButton(context),
|
sendMessageAction: () => controller.handleClickSendButton(context),
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import 'package:core/presentation/extensions/color_extension.dart';
|
|
||||||
import 'package:core/presentation/views/responsive/responsive_widget.dart';
|
import 'package:core/presentation/views/responsive/responsive_widget.dart';
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:model/email/prefix_email_address.dart';
|
import 'package:model/email/prefix_email_address.dart';
|
||||||
import 'package:pointer_interceptor/pointer_interceptor.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/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/extensions/composer_print_draft_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/composer/presentation/model/prefix_recipient_state.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/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/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/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<ComposerController> {
|
class ComposerView extends GetWidget<ComposerController> {
|
||||||
|
|
||||||
@@ -50,18 +46,18 @@ class ComposerView extends GetWidget<ComposerController> {
|
|||||||
isFormattingOptionsEnabled: controller.richTextWebController!.isFormattingOptionsEnabled,
|
isFormattingOptionsEnabled: controller.richTextWebController!.isFormattingOptionsEnabled,
|
||||||
openRichToolbarAction: controller.richTextWebController!.toggleFormattingOptions,
|
openRichToolbarAction: controller.richTextWebController!.toggleFormattingOptions,
|
||||||
isSendButtonEnabled: controller.isEnableEmailSendButton.value,
|
isSendButtonEnabled: controller.isEnableEmailSendButton.value,
|
||||||
|
hasRequestReadReceipt: controller.hasRequestReadReceipt.value,
|
||||||
|
isPrintDraftEnabled: controller.isEmailChanged.value,
|
||||||
|
menuMoreOptionController: controller.menuMoreOptionController!,
|
||||||
onCloseViewAction: () => controller.handleClickCloseComposer(context),
|
onCloseViewAction: () => controller.handleClickCloseComposer(context),
|
||||||
attachFileAction: () => controller.openFilePickerByType(context, FileType.any),
|
attachFileAction: () => controller.openFilePickerByType(context, FileType.any),
|
||||||
insertImageAction: () => controller.insertImage(context, constraints.maxWidth),
|
insertImageAction: () => controller.insertImage(context, constraints.maxWidth),
|
||||||
sendMessageAction: () => controller.handleClickSendButton(context),
|
sendMessageAction: () => controller.handleClickSendButton(context),
|
||||||
openContextMenuAction: (position) {
|
toggleCodeViewAction: controller.richTextWebController!.toggleCodeView,
|
||||||
controller.openPopupMenuAction(
|
printDraftAction: () => controller.printDraft(context),
|
||||||
context,
|
toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context),
|
||||||
position,
|
saveToDraftsAction: () => controller.handleClickSaveAsDraftsButton(context),
|
||||||
_createMoreOptionPopupItems(context),
|
deleteComposerAction: () => controller.handleClickDeleteComposer(context),
|
||||||
radius: ComposerStyle.popupMenuRadius
|
|
||||||
);
|
|
||||||
},
|
|
||||||
)),
|
)),
|
||||||
ConstrainedBox(
|
ConstrainedBox(
|
||||||
constraints: BoxConstraints(
|
constraints: BoxConstraints(
|
||||||
@@ -523,14 +519,10 @@ class ComposerView extends GetWidget<ComposerController> {
|
|||||||
saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context),
|
saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context),
|
||||||
sendMessageAction: () => controller.handleClickSendButton(context),
|
sendMessageAction: () => controller.handleClickSendButton(context),
|
||||||
isPrintDraftEnabled: controller.isEmailChanged.isTrue,
|
isPrintDraftEnabled: controller.isEmailChanged.isTrue,
|
||||||
openContextMenuAction: (position) {
|
toggleCodeViewAction: controller.richTextWebController!.toggleCodeView,
|
||||||
controller.openPopupMenuAction(
|
menuMoreOptionController: controller.menuMoreOptionController!,
|
||||||
context,
|
printDraftAction: () => controller.printDraft(context),
|
||||||
position,
|
toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context),
|
||||||
_createMoreOptionPopupItemsOnDesktop(context),
|
|
||||||
radius: ComposerStyle.popupMenuRadius,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
)),
|
)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -810,14 +802,10 @@ class ComposerView extends GetWidget<ComposerController> {
|
|||||||
saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context),
|
saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context),
|
||||||
sendMessageAction: () => controller.handleClickSendButton(context),
|
sendMessageAction: () => controller.handleClickSendButton(context),
|
||||||
isPrintDraftEnabled: controller.isEmailChanged.isTrue,
|
isPrintDraftEnabled: controller.isEmailChanged.isTrue,
|
||||||
openContextMenuAction: (position) {
|
toggleCodeViewAction: controller.richTextWebController!.toggleCodeView,
|
||||||
controller.openPopupMenuAction(
|
menuMoreOptionController: controller.menuMoreOptionController!,
|
||||||
context,
|
printDraftAction: () => controller.printDraft(context),
|
||||||
position,
|
toggleRequestReadReceiptAction: () => controller.toggleRequestReadReceipt(context),
|
||||||
_createMoreOptionPopupItemsOnDesktop(context),
|
|
||||||
radius: ComposerStyle.popupMenuRadius,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
)),
|
)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
@@ -877,136 +865,4 @@ class ComposerView extends GetWidget<ComposerController> {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<PopupMenuEntry> _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<PopupMenuEntry> _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);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'package:core/presentation/extensions/color_extension.dart';
|
|||||||
import 'package:core/utils/app_logger.dart';
|
import 'package:core/utils/app_logger.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.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/identity_extension.dart';
|
||||||
import 'package:model/extensions/list_email_address_extension.dart';
|
import 'package:model/extensions/list_email_address_extension.dart';
|
||||||
import 'package:model/extensions/presentation_email_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/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/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/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';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
extension ComposerPrintDraftExtension on ComposerController {
|
extension ComposerPrintDraftExtension on ComposerController {
|
||||||
@@ -59,8 +61,26 @@ extension ComposerPrintDraftExtension on ComposerController {
|
|||||||
required Locale locale,
|
required Locale locale,
|
||||||
required String emailContent,
|
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(
|
final childWidget = PointerInterceptor(
|
||||||
child: PrintDraftDialogView(
|
child: PrintDraftDialogView(
|
||||||
emailPrint: DraftEmailPrint(
|
emailPrint: DraftEmailPrint(
|
||||||
@@ -68,7 +88,6 @@ extension ComposerPrintDraftExtension on ComposerController {
|
|||||||
userName: mailboxDashBoardController.userEmail,
|
userName: mailboxDashBoardController.userEmail,
|
||||||
attachments: uploadController.allAttachmentsUploaded,
|
attachments: uploadController.allAttachmentsUploaded,
|
||||||
emailContent: emailContent,
|
emailContent: emailContent,
|
||||||
locale: locale.toLanguageTag(),
|
|
||||||
fromPrefix: appLocalizations.from_email_address_prefix,
|
fromPrefix: appLocalizations.from_email_address_prefix,
|
||||||
toPrefix: appLocalizations.to_email_address_prefix,
|
toPrefix: appLocalizations.to_email_address_prefix,
|
||||||
ccPrefix: appLocalizations.cc_email_address_prefix,
|
ccPrefix: appLocalizations.cc_email_address_prefix,
|
||||||
@@ -79,14 +98,8 @@ extension ComposerPrintDraftExtension on ComposerController {
|
|||||||
ccAddress: listCcEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(),
|
ccAddress: listCcEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(),
|
||||||
bccAddress: listBccEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(),
|
bccAddress: listBccEmailAddress.toSet().toEscapeHtmlStringUseCommaSeparator(),
|
||||||
sender: identitySelected.value?.toEmailAddress(),
|
sender: identitySelected.value?.toEmailAddress(),
|
||||||
receiveTime: presentationEmail?.getReceivedAt(
|
receiveTime: receiveTime,
|
||||||
locale.toLanguageTag(),
|
subject: subjectEmail.value ?? '',
|
||||||
pattern: presentationEmail.receivedAt
|
|
||||||
?.value
|
|
||||||
.toLocal()
|
|
||||||
.toPatternForPrinting(locale.toLanguageTag()),
|
|
||||||
) ?? '',
|
|
||||||
subject: presentationEmail?.subject,
|
|
||||||
),
|
),
|
||||||
printEmailInteractor: printEmailInteractor,
|
printEmailInteractor: printEmailInteractor,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -324,6 +324,7 @@ mixin RichTextButtonMixin {
|
|||||||
_imagePaths,
|
_imagePaths,
|
||||||
(paragraph) => richTextController.applyParagraphType(paragraph)))
|
(paragraph) => richTextController.applyParagraphType(paragraph)))
|
||||||
.toList(),
|
.toList(),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
iconButton: buildWrapIconStyleText(
|
iconButton: buildWrapIconStyleText(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
||||||
spacing: 3,
|
spacing: 3,
|
||||||
@@ -344,6 +345,7 @@ mixin RichTextButtonMixin {
|
|||||||
_imagePaths,
|
_imagePaths,
|
||||||
(orderType) => richTextController.applyOrderListType(orderType)))
|
(orderType) => richTextController.applyOrderListType(orderType)))
|
||||||
.toList(),
|
.toList(),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
iconButton: buildWrapIconStyleText(
|
iconButton: buildWrapIconStyleText(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
||||||
spacing: 3,
|
spacing: 3,
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ class DraftEmailPrint extends EmailPrint {
|
|||||||
required super.appName,
|
required super.appName,
|
||||||
required super.userName,
|
required super.userName,
|
||||||
required super.emailContent,
|
required super.emailContent,
|
||||||
required super.locale,
|
|
||||||
required super.fromPrefix,
|
required super.fromPrefix,
|
||||||
required super.toPrefix,
|
required super.toPrefix,
|
||||||
required super.ccPrefix,
|
required super.ccPrefix,
|
||||||
|
|||||||
+10
-2
@@ -10,11 +10,19 @@ class MobileAppBarComposerWidgetStyle {
|
|||||||
static const double richTextIconSize = 28;
|
static const double richTextIconSize = 28;
|
||||||
|
|
||||||
static const Color backgroundColor = AppColor.colorComposerAppBar;
|
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 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 padding = EdgeInsetsDirectional.symmetric(horizontal: 12);
|
||||||
static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(3);
|
static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(3);
|
||||||
static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(5);
|
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,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -22,9 +22,16 @@ class BottomBarComposerWidgetStyle {
|
|||||||
static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(5);
|
static const EdgeInsetsGeometry iconPadding = EdgeInsetsDirectional.all(5);
|
||||||
static const EdgeInsetsGeometry sendButtonPadding = EdgeInsetsDirectional.symmetric(vertical: 8, horizontal: 24);
|
static const EdgeInsetsGeometry sendButtonPadding = EdgeInsetsDirectional.symmetric(vertical: 8, horizontal: 24);
|
||||||
static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(2);
|
static const EdgeInsetsGeometry richTextIconPadding = EdgeInsetsDirectional.all(2);
|
||||||
|
static const EdgeInsetsGeometry popupItemPadding = EdgeInsetsDirectional.symmetric(horizontal: 12);
|
||||||
|
|
||||||
static const TextStyle sendButtonTextStyle = TextStyle(
|
static const TextStyle sendButtonTextStyle = TextStyle(
|
||||||
fontWeight: FontWeight.w500,
|
fontWeight: FontWeight.w500,
|
||||||
fontSize: 15,
|
fontSize: 15,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
);
|
);
|
||||||
|
static const TextStyle popupItemTextStyle = TextStyle(
|
||||||
|
color: Colors.black,
|
||||||
|
fontSize: 16,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,14 @@
|
|||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||||
import 'package:flutter/material.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/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';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
|
typedef OnOpenContextMenuAction = Function(RelativeRect position);
|
||||||
|
|
||||||
class AppBarComposerWidget extends StatelessWidget {
|
class AppBarComposerWidget extends StatelessWidget {
|
||||||
|
|
||||||
|
final ImagePaths imagePaths;
|
||||||
final bool isSendButtonEnabled;
|
final bool isSendButtonEnabled;
|
||||||
final bool isNetworkConnectionAvailable;
|
final bool isNetworkConnectionAvailable;
|
||||||
final VoidCallback onCloseViewAction;
|
final VoidCallback onCloseViewAction;
|
||||||
@@ -17,10 +18,9 @@ class AppBarComposerWidget extends StatelessWidget {
|
|||||||
final VoidCallback openRichToolbarAction;
|
final VoidCallback openRichToolbarAction;
|
||||||
final OnOpenContextMenuAction openContextMenuAction;
|
final OnOpenContextMenuAction openContextMenuAction;
|
||||||
|
|
||||||
final _imagePaths = Get.find<ImagePaths>();
|
const AppBarComposerWidget({
|
||||||
|
|
||||||
AppBarComposerWidget({
|
|
||||||
super.key,
|
super.key,
|
||||||
|
required this.imagePaths,
|
||||||
required this.isSendButtonEnabled,
|
required this.isSendButtonEnabled,
|
||||||
required this.onCloseViewAction,
|
required this.onCloseViewAction,
|
||||||
required this.sendMessageAction,
|
required this.sendMessageAction,
|
||||||
@@ -40,7 +40,7 @@ class AppBarComposerWidget extends StatelessWidget {
|
|||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icCancel,
|
icon: imagePaths.icCancel,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
tooltipMessage: AppLocalizations.of(context).saveAndClose,
|
tooltipMessage: AppLocalizations.of(context).saveAndClose,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
||||||
@@ -49,7 +49,7 @@ class AppBarComposerWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icRichToolbar,
|
icon: imagePaths.icRichToolbar,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize,
|
||||||
@@ -61,7 +61,7 @@ class AppBarComposerWidget extends StatelessWidget {
|
|||||||
...[
|
...[
|
||||||
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icAttachFile,
|
icon: imagePaths.icAttachFile,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
||||||
@@ -70,7 +70,7 @@ class AppBarComposerWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icInsertImage,
|
icon: imagePaths.icInsertImage,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
||||||
@@ -81,8 +81,8 @@ class AppBarComposerWidget extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: isSendButtonEnabled
|
icon: isSendButtonEnabled
|
||||||
? _imagePaths.icSendMobile
|
? imagePaths.icSendMobile
|
||||||
: _imagePaths.icSendDisable,
|
: imagePaths.icSendDisable,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.sendButtonIconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.sendButtonIconSize,
|
||||||
@@ -91,7 +91,7 @@ class AppBarComposerWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icMore,
|
icon: imagePaths.icMore,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
||||||
|
|||||||
+11
-12
@@ -1,13 +1,13 @@
|
|||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
import 'package:core/presentation/views/button/tmail_button_widget.dart';
|
||||||
import 'package:flutter/material.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/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';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
class LandscapeAppBarComposerWidget extends StatelessWidget {
|
class LandscapeAppBarComposerWidget extends StatelessWidget {
|
||||||
|
|
||||||
|
final ImagePaths imagePaths;
|
||||||
final bool isSendButtonEnabled;
|
final bool isSendButtonEnabled;
|
||||||
final bool isNetworkConnectionAvailable;
|
final bool isNetworkConnectionAvailable;
|
||||||
final VoidCallback onCloseViewAction;
|
final VoidCallback onCloseViewAction;
|
||||||
@@ -17,10 +17,9 @@ class LandscapeAppBarComposerWidget extends StatelessWidget {
|
|||||||
final VoidCallback openRichToolbarAction;
|
final VoidCallback openRichToolbarAction;
|
||||||
final OnOpenContextMenuAction openContextMenuAction;
|
final OnOpenContextMenuAction openContextMenuAction;
|
||||||
|
|
||||||
final _imagePaths = Get.find<ImagePaths>();
|
const LandscapeAppBarComposerWidget({
|
||||||
|
|
||||||
LandscapeAppBarComposerWidget({
|
|
||||||
super.key,
|
super.key,
|
||||||
|
required this.imagePaths,
|
||||||
required this.isSendButtonEnabled,
|
required this.isSendButtonEnabled,
|
||||||
required this.onCloseViewAction,
|
required this.onCloseViewAction,
|
||||||
required this.sendMessageAction,
|
required this.sendMessageAction,
|
||||||
@@ -43,7 +42,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget {
|
|||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icCancel,
|
icon: imagePaths.icCancel,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
tooltipMessage: AppLocalizations.of(context).saveAndClose,
|
tooltipMessage: AppLocalizations.of(context).saveAndClose,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
||||||
@@ -52,7 +51,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icRichToolbar,
|
icon: imagePaths.icRichToolbar,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.richTextIconSize,
|
||||||
@@ -64,7 +63,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget {
|
|||||||
...[
|
...[
|
||||||
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icAttachFile,
|
icon: imagePaths.icAttachFile,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
||||||
@@ -73,7 +72,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icInsertImage,
|
icon: imagePaths.icInsertImage,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
||||||
@@ -84,8 +83,8 @@ class LandscapeAppBarComposerWidget extends StatelessWidget {
|
|||||||
],
|
],
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: isSendButtonEnabled
|
icon: isSendButtonEnabled
|
||||||
? _imagePaths.icSendMobile
|
? imagePaths.icSendMobile
|
||||||
: _imagePaths.icSendDisable,
|
: imagePaths.icSendDisable,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.sendButtonIconSize,
|
iconSize: MobileAppBarComposerWidgetStyle.sendButtonIconSize,
|
||||||
@@ -94,7 +93,7 @@ class LandscapeAppBarComposerWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
icon: _imagePaths.icMore,
|
icon: imagePaths.icMore,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
backgroundColor: Colors.transparent,
|
backgroundColor: Colors.transparent,
|
||||||
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
padding: MobileAppBarComposerWidgetStyle.iconPadding,
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/views/button/tmail_button_widget.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: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/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';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
class BottomBarComposerWidget extends StatelessWidget {
|
class BottomBarComposerWidget extends StatelessWidget {
|
||||||
@@ -12,13 +15,16 @@ class BottomBarComposerWidget extends StatelessWidget {
|
|||||||
final bool isPrintDraftEnabled;
|
final bool isPrintDraftEnabled;
|
||||||
final bool isFormattingOptionsEnabled;
|
final bool isFormattingOptionsEnabled;
|
||||||
final bool hasReadReceipt;
|
final bool hasReadReceipt;
|
||||||
|
final CustomPopupMenuController menuMoreOptionController;
|
||||||
final VoidCallback openRichToolbarAction;
|
final VoidCallback openRichToolbarAction;
|
||||||
final VoidCallback attachFileAction;
|
final VoidCallback attachFileAction;
|
||||||
final VoidCallback insertImageAction;
|
final VoidCallback insertImageAction;
|
||||||
final VoidCallback deleteComposerAction;
|
final VoidCallback deleteComposerAction;
|
||||||
final VoidCallback saveToDraftAction;
|
final VoidCallback saveToDraftAction;
|
||||||
final VoidCallback sendMessageAction;
|
final VoidCallback sendMessageAction;
|
||||||
final OnOpenContextMenuAction openContextMenuAction;
|
final VoidCallback toggleCodeViewAction;
|
||||||
|
final VoidCallback toggleRequestReadReceiptAction;
|
||||||
|
final VoidCallback printDraftAction;
|
||||||
|
|
||||||
const BottomBarComposerWidget({
|
const BottomBarComposerWidget({
|
||||||
super.key,
|
super.key,
|
||||||
@@ -27,13 +33,16 @@ class BottomBarComposerWidget extends StatelessWidget {
|
|||||||
required this.isPrintDraftEnabled,
|
required this.isPrintDraftEnabled,
|
||||||
required this.isFormattingOptionsEnabled,
|
required this.isFormattingOptionsEnabled,
|
||||||
required this.hasReadReceipt,
|
required this.hasReadReceipt,
|
||||||
|
required this.menuMoreOptionController,
|
||||||
required this.openRichToolbarAction,
|
required this.openRichToolbarAction,
|
||||||
required this.attachFileAction,
|
required this.attachFileAction,
|
||||||
required this.insertImageAction,
|
required this.insertImageAction,
|
||||||
required this.deleteComposerAction,
|
required this.deleteComposerAction,
|
||||||
required this.saveToDraftAction,
|
required this.saveToDraftAction,
|
||||||
required this.sendMessageAction,
|
required this.sendMessageAction,
|
||||||
required this.openContextMenuAction,
|
required this.toggleCodeViewAction,
|
||||||
|
required this.toggleRequestReadReceiptAction,
|
||||||
|
required this.printDraftAction,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -84,13 +93,56 @@ class BottomBarComposerWidget extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
const SizedBox(width: BottomBarComposerWidgetStyle.space),
|
const SizedBox(width: BottomBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
PopupMenuOverlayWidget(
|
||||||
icon: imagePaths.icMore,
|
controller: menuMoreOptionController,
|
||||||
iconColor: BottomBarComposerWidgetStyle.iconColor,
|
iconButton: HighlightSVGIconOnHover(
|
||||||
backgroundColor: Colors.transparent,
|
icon: imagePaths.icMore,
|
||||||
iconSize: BottomBarComposerWidgetStyle.iconSize,
|
size: BottomBarComposerWidgetStyle.iconSize,
|
||||||
tooltipMessage: AppLocalizations.of(context).more,
|
iconColor: BottomBarComposerWidgetStyle.iconColor,
|
||||||
onTapActionAtPositionCallback: openContextMenuAction,
|
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(),
|
const Spacer(),
|
||||||
TMailButtonWidget.fromIcon(
|
TMailButtonWidget.fromIcon(
|
||||||
|
|||||||
+92
-11
@@ -1,23 +1,32 @@
|
|||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/views/button/tmail_button_widget.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: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/features/composer/presentation/styles/mobile_app_bar_composer_widget_style.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
|
|
||||||
typedef OnOpenContextMenuAction = Function(RelativeRect position);
|
|
||||||
|
|
||||||
class MobileResponsiveAppBarComposerWidget extends StatelessWidget {
|
class MobileResponsiveAppBarComposerWidget extends StatelessWidget {
|
||||||
|
|
||||||
final ImagePaths imagePaths;
|
final ImagePaths imagePaths;
|
||||||
final bool isCodeViewEnabled;
|
final bool isCodeViewEnabled;
|
||||||
final bool isSendButtonEnabled;
|
final bool isSendButtonEnabled;
|
||||||
final bool isFormattingOptionsEnabled;
|
final bool isFormattingOptionsEnabled;
|
||||||
|
final bool hasRequestReadReceipt;
|
||||||
|
final bool isPrintDraftEnabled;
|
||||||
|
final CustomPopupMenuController menuMoreOptionController;
|
||||||
final VoidCallback onCloseViewAction;
|
final VoidCallback onCloseViewAction;
|
||||||
final VoidCallback attachFileAction;
|
final VoidCallback attachFileAction;
|
||||||
final VoidCallback insertImageAction;
|
final VoidCallback insertImageAction;
|
||||||
final VoidCallback sendMessageAction;
|
final VoidCallback sendMessageAction;
|
||||||
final OnOpenContextMenuAction openContextMenuAction;
|
|
||||||
final VoidCallback openRichToolbarAction;
|
final VoidCallback openRichToolbarAction;
|
||||||
|
final VoidCallback toggleCodeViewAction;
|
||||||
|
final VoidCallback toggleRequestReadReceiptAction;
|
||||||
|
final VoidCallback printDraftAction;
|
||||||
|
final VoidCallback saveToDraftsAction;
|
||||||
|
final VoidCallback deleteComposerAction;
|
||||||
|
|
||||||
const MobileResponsiveAppBarComposerWidget({
|
const MobileResponsiveAppBarComposerWidget({
|
||||||
super.key,
|
super.key,
|
||||||
@@ -25,12 +34,19 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget {
|
|||||||
required this.isCodeViewEnabled,
|
required this.isCodeViewEnabled,
|
||||||
required this.isFormattingOptionsEnabled,
|
required this.isFormattingOptionsEnabled,
|
||||||
required this.isSendButtonEnabled,
|
required this.isSendButtonEnabled,
|
||||||
|
required this.hasRequestReadReceipt,
|
||||||
|
required this.isPrintDraftEnabled,
|
||||||
|
required this.menuMoreOptionController,
|
||||||
required this.openRichToolbarAction,
|
required this.openRichToolbarAction,
|
||||||
required this.onCloseViewAction,
|
required this.onCloseViewAction,
|
||||||
required this.attachFileAction,
|
required this.attachFileAction,
|
||||||
required this.insertImageAction,
|
required this.insertImageAction,
|
||||||
required this.sendMessageAction,
|
required this.sendMessageAction,
|
||||||
required this.openContextMenuAction,
|
required this.toggleCodeViewAction,
|
||||||
|
required this.toggleRequestReadReceiptAction,
|
||||||
|
required this.printDraftAction,
|
||||||
|
required this.saveToDraftsAction,
|
||||||
|
required this.deleteComposerAction,
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -94,13 +110,78 @@ class MobileResponsiveAppBarComposerWidget extends StatelessWidget {
|
|||||||
onTapActionCallback: sendMessageAction,
|
onTapActionCallback: sendMessageAction,
|
||||||
),
|
),
|
||||||
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
const SizedBox(width: MobileAppBarComposerWidgetStyle.space),
|
||||||
TMailButtonWidget.fromIcon(
|
PopupMenuOverlayWidget(
|
||||||
icon: imagePaths.icMore,
|
controller: menuMoreOptionController,
|
||||||
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
iconButton: HighlightSVGIconOnHover(
|
||||||
backgroundColor: Colors.transparent,
|
icon: imagePaths.icMore,
|
||||||
iconSize: MobileAppBarComposerWidgetStyle.iconSize,
|
size: MobileAppBarComposerWidgetStyle.iconSize,
|
||||||
tooltipMessage: AppLocalizations.of(context).more,
|
iconColor: MobileAppBarComposerWidgetStyle.iconColor,
|
||||||
onTapActionAtPositionCallback: openContextMenuAction,
|
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,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -212,6 +212,7 @@ class ToolbarRichTextWebBuilder extends StatelessWidget with RichTextButtonMixin
|
|||||||
_imagePaths,
|
_imagePaths,
|
||||||
(paragraph) => richTextWebController.applyParagraphType(paragraph)))
|
(paragraph) => richTextWebController.applyParagraphType(paragraph)))
|
||||||
.toList(),
|
.toList(),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
iconButton: buildWrapIconStyleText(
|
iconButton: buildWrapIconStyleText(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
||||||
spacing: 3,
|
spacing: 3,
|
||||||
@@ -235,6 +236,7 @@ class ToolbarRichTextWebBuilder extends StatelessWidget with RichTextButtonMixin
|
|||||||
_imagePaths,
|
_imagePaths,
|
||||||
(orderType) => richTextWebController.applyOrderListType(orderType)))
|
(orderType) => richTextWebController.applyOrderListType(orderType)))
|
||||||
.toList(),
|
.toList(),
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 5),
|
||||||
iconButton: buildWrapIconStyleText(
|
iconButton: buildWrapIconStyleText(
|
||||||
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 5),
|
||||||
spacing: 3,
|
spacing: 3,
|
||||||
|
|||||||
@@ -6,7 +6,6 @@ class EmailPrint with EquatableMixin {
|
|||||||
final String appName;
|
final String appName;
|
||||||
final String userName;
|
final String userName;
|
||||||
final String emailContent;
|
final String emailContent;
|
||||||
final String locale;
|
|
||||||
final String toPrefix;
|
final String toPrefix;
|
||||||
final String fromPrefix;
|
final String fromPrefix;
|
||||||
final String ccPrefix;
|
final String ccPrefix;
|
||||||
@@ -26,7 +25,6 @@ class EmailPrint with EquatableMixin {
|
|||||||
required this.appName,
|
required this.appName,
|
||||||
required this.userName,
|
required this.userName,
|
||||||
required this.emailContent,
|
required this.emailContent,
|
||||||
required this.locale,
|
|
||||||
required this.fromPrefix,
|
required this.fromPrefix,
|
||||||
required this.toPrefix,
|
required this.toPrefix,
|
||||||
required this.ccPrefix,
|
required this.ccPrefix,
|
||||||
@@ -48,7 +46,6 @@ class EmailPrint with EquatableMixin {
|
|||||||
appName,
|
appName,
|
||||||
userName,
|
userName,
|
||||||
emailContent,
|
emailContent,
|
||||||
locale,
|
|
||||||
fromPrefix,
|
fromPrefix,
|
||||||
toPrefix,
|
toPrefix,
|
||||||
ccPrefix,
|
ccPrefix,
|
||||||
@@ -74,7 +71,6 @@ extension EmailPrintExtension on EmailPrint {
|
|||||||
emailContent: newEmailContent,
|
emailContent: newEmailContent,
|
||||||
titleAttachment: titleAttachment,
|
titleAttachment: titleAttachment,
|
||||||
receiveTime: receiveTime,
|
receiveTime: receiveTime,
|
||||||
locale: locale,
|
|
||||||
fromPrefix: fromPrefix,
|
fromPrefix: fromPrefix,
|
||||||
toPrefix: toPrefix,
|
toPrefix: toPrefix,
|
||||||
ccPrefix: ccPrefix,
|
ccPrefix: ccPrefix,
|
||||||
|
|||||||
@@ -1752,7 +1752,6 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
|
|||||||
userName: mailboxDashBoardController.userEmail,
|
userName: mailboxDashBoardController.userEmail,
|
||||||
attachments: currentEmailLoaded.value!.attachments,
|
attachments: currentEmailLoaded.value!.attachments,
|
||||||
emailContent: currentEmailLoaded.value!.htmlContent,
|
emailContent: currentEmailLoaded.value!.htmlContent,
|
||||||
locale: locale.toLanguageTag(),
|
|
||||||
fromPrefix: appLocalizations.from_email_address_prefix,
|
fromPrefix: appLocalizations.from_email_address_prefix,
|
||||||
toPrefix: appLocalizations.to_email_address_prefix,
|
toPrefix: appLocalizations.to_email_address_prefix,
|
||||||
ccPrefix: appLocalizations.cc_email_address_prefix,
|
ccPrefix: appLocalizations.cc_email_address_prefix,
|
||||||
|
|||||||
Reference in New Issue
Block a user