TF-2116 Apply new design composer mobile

(cherry picked from commit fe4ec144d1a18a94de782f87fff56bbf1cd3a00a)
This commit is contained in:
dab246
2023-09-07 09:53:34 +07:00
committed by Dat H. Pham
parent cbba97279a
commit 3809a05a35
33 changed files with 803 additions and 1002 deletions
@@ -0,0 +1,27 @@
import 'package:core/presentation/extensions/html_extension.dart';
import 'package:core/utils/app_logger.dart';
import 'package:flutter/material.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
mixin EditorViewMixin {
String getEmailContentQuotedAsHtml({
required BuildContext context,
required String emailContent,
required EmailActionType emailActionType,
required PresentationEmail presentationEmail,
}) {
final headerEmailQuoted = emailActionType.getHeaderEmailQuoted(
context: context,
presentationEmail: presentationEmail
);
log('EditorViewMixin::getEmailContentQuotedAsHtml:headerEmailQuoted: $headerEmailQuoted');
final headerEmailQuotedAsHtml = headerEmailQuoted != null
? headerEmailQuoted.addCiteTag()
: '';
final emailQuotedHtml = '${HtmlExtension.editorStartTags}$headerEmailQuotedAsHtml${emailContent.addBlockQuoteTag()}';
return emailQuotedHtml;
}
}
@@ -3,10 +3,10 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/composer/presentation/model/screen_display_mode.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/desktop_container_view_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/minimize_composer_widget.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/web/desktop_responsive_container_view_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/minimize_composer_widget.dart';
class DesktopContainerView extends StatelessWidget {
class DesktopResponsiveContainerView extends StatelessWidget {
final ScreenDisplayMode displayMode;
final String emailSubject;
@@ -16,8 +16,8 @@ class DesktopContainerView extends StatelessWidget {
final _responsiveUtils = Get.find<ResponsiveUtils>();
DesktopContainerView({
super.key,
DesktopResponsiveContainerView({
super.key,
required this.childBuilder,
required this.displayMode,
required this.emailSubject,
@@ -29,8 +29,8 @@ class DesktopContainerView extends StatelessWidget {
Widget build(BuildContext context) {
if (displayMode == ScreenDisplayMode.minimize) {
return PositionedDirectional(
end: DesktopContainerViewStyle.margin,
bottom: DesktopContainerViewStyle.margin,
end: DesktopResponsiveContainerViewStyle.margin,
bottom: DesktopResponsiveContainerViewStyle.margin,
child: PointerInterceptor(
child: MinimizeComposerWidget(
emailSubject: emailSubject,
@@ -44,16 +44,16 @@ class DesktopContainerView extends StatelessWidget {
final maxHeight = _responsiveUtils.getSizeScreenHeight(context) * 0.75;
return PositionedDirectional(
end: DesktopContainerViewStyle.margin,
bottom: DesktopContainerViewStyle.margin,
end: DesktopResponsiveContainerViewStyle.margin,
bottom: DesktopResponsiveContainerViewStyle.margin,
child: Card(
elevation: DesktopContainerViewStyle.elevation,
elevation: DesktopResponsiveContainerViewStyle.elevation,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(DesktopContainerViewStyle.radius))
borderRadius: BorderRadius.all(Radius.circular(DesktopResponsiveContainerViewStyle.radius))
),
clipBehavior: Clip.antiAlias,
child: Container(
color: DesktopContainerViewStyle.backgroundColor,
color: DesktopResponsiveContainerViewStyle.backgroundColor,
width: maxWidth,
height: maxHeight,
child: LayoutBuilder(builder: (context, constraints) =>
@@ -69,16 +69,16 @@ class DesktopContainerView extends StatelessWidget {
final maxHeight = _responsiveUtils.getSizeScreenHeight(context) * 0.9;
return Scaffold(
backgroundColor: DesktopContainerViewStyle.outSideBackgroundColor,
backgroundColor: DesktopResponsiveContainerViewStyle.outSideBackgroundColor,
body: Center(
child: Card(
elevation: DesktopContainerViewStyle.elevation,
elevation: DesktopResponsiveContainerViewStyle.elevation,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(DesktopContainerViewStyle.radius))
borderRadius: BorderRadius.all(Radius.circular(DesktopResponsiveContainerViewStyle.radius))
),
clipBehavior: Clip.antiAlias,
child: Container(
color: DesktopContainerViewStyle.backgroundColor,
color: DesktopResponsiveContainerViewStyle.backgroundColor,
width: maxWidth,
height: maxHeight,
child: LayoutBuilder(builder: (context, constraints) =>
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/mobile_container_view_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/web/mobile_responsive_container_view_style.dart';
class MobileContainerView extends StatelessWidget {
class MobileResponsiveContainerView extends StatelessWidget {
final Widget Function(BuildContext context, BoxConstraints constraints) childBuilder;
const MobileContainerView({
const MobileResponsiveContainerView({
super.key,
required this.childBuilder,
});
@@ -14,7 +14,7 @@ class MobileContainerView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: MobileContainerViewStyle.outSideBackgroundColor,
backgroundColor: MobileResponsiveContainerViewStyle.outSideBackgroundColor,
body: LayoutBuilder(builder: (context, constraints) =>
PointerInterceptor(
child: childBuilder.call(context, constraints)
@@ -2,15 +2,15 @@ import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pointer_interceptor/pointer_interceptor.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/tablet_container_view_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/styles/web/tablet_responsive_container_view_style.dart';
class TabletContainerView extends StatelessWidget {
class TabletResponsiveContainerView extends StatelessWidget {
final Widget Function(BuildContext context, BoxConstraints constraints) childBuilder;
final _responsiveUtils = Get.find<ResponsiveUtils>();
TabletContainerView({
TabletResponsiveContainerView({
super.key,
required this.childBuilder,
});
@@ -18,18 +18,18 @@ class TabletContainerView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: TabletContainerViewStyle.outSideBackgroundColor,
backgroundColor: TabletResponsiveContainerViewStyle.outSideBackgroundColor,
body: Center(
child: Card(
elevation: TabletContainerViewStyle.elevation,
margin: TabletContainerViewStyle.getMargin(context, _responsiveUtils),
elevation: TabletResponsiveContainerViewStyle.elevation,
margin: TabletResponsiveContainerViewStyle.getMargin(context, _responsiveUtils),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(TabletContainerViewStyle.radius))
borderRadius: BorderRadius.all(Radius.circular(TabletResponsiveContainerViewStyle.radius))
),
clipBehavior: Clip.antiAlias,
child: Container(
color: TabletContainerViewStyle.backgroundColor,
width: TabletContainerViewStyle.getWidth(context, _responsiveUtils),
color: TabletResponsiveContainerViewStyle.backgroundColor,
width: TabletResponsiveContainerViewStyle.getWidth(context, _responsiveUtils),
child: LayoutBuilder(builder: (context, constraints) =>
PointerInterceptor(
child: childBuilder.call(context, constraints)
@@ -2,21 +2,19 @@
import 'package:core/presentation/extensions/html_extension.dart';
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:core/utils/app_logger.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter/material.dart';
import 'package:html_editor_enhanced/html_editor.dart';
import 'package:model/email/email_action_type.dart';
import 'package:model/email/presentation_email.dart';
import 'package:tmail_ui_user/features/base/widget/cupertino_loading_widget.dart';
import 'package:tmail_ui_user/features/composer/presentation/extensions/email_action_type_extension.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web_editor_widget.dart';
import 'package:tmail_ui_user/features/composer/presentation/view/editor_view_mixin.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/web/web_editor_widget.dart';
import 'package:tmail_ui_user/features/email/domain/state/get_email_content_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/transform_html_email_content_state.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/main/utils/app_utils.dart';
class WebEditorView extends StatelessWidget {
class WebEditorView extends StatelessWidget with EditorViewMixin {
final HtmlEditorController editorController;
final ComposerArguments? arguments;
@@ -115,7 +113,7 @@ class WebEditorView extends StatelessWidget {
}
return contentViewState!.fold(
(failure) {
final emailContentQuoted = _getEmailContentQuotedAsHtml(
final emailContentQuoted = getEmailContentQuotedAsHtml(
context: context,
emailContent: '',
emailActionType: arguments!.emailActionType,
@@ -137,7 +135,7 @@ class WebEditorView extends StatelessWidget {
if (success is TransformHtmlEmailContentLoading) {
return const CupertinoLoadingWidget(padding: EdgeInsets.all(16.0));
} else {
final emailContentQuoted = _getEmailContentQuotedAsHtml(
final emailContentQuoted = getEmailContentQuotedAsHtml(
context: context,
emailContent: success is TransformHtmlEmailContentSuccess
? success.htmlContent
@@ -173,22 +171,4 @@ class WebEditorView extends StatelessWidget {
);
}
}
String _getEmailContentQuotedAsHtml({
required BuildContext context,
required String emailContent,
required EmailActionType emailActionType,
required PresentationEmail presentationEmail,
}) {
final headerEmailQuoted = emailActionType.getHeaderEmailQuoted(
context: context,
presentationEmail: presentationEmail
);
log('WebEditorView::getEmailContentQuotedAsHtml:headerEmailQuoted: $headerEmailQuoted');
final headerEmailQuotedAsHtml = headerEmailQuoted != null
? headerEmailQuoted.addCiteTag()
: '';
final emailQuotedHtml = '${HtmlExtension.editorStartTags}$headerEmailQuotedAsHtml${emailContent.addBlockQuoteTag()}';
return emailQuotedHtml;
}
}
}