From 559f3d1e11ff832eb1439e8ad7d5b07ee1994e87 Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 7 Jul 2023 16:40:24 +0700 Subject: [PATCH] TF-1683 Remove `Plain text` option of message in VacationView (cherry picked from commit 9a6f9b2ecaf629140f0676bff1a33e524f17ebc1) --- .../model/vacation/vacation_message_type.dart | 20 --- .../vacation/vacation_controller.dart | 30 +---- .../presentation/vacation/vacation_view.dart | 117 ++++++------------ lib/l10n/intl_messages.arb | 8 +- lib/main/localizations/app_localizations.dart | 6 - lib/main/utils/app_utils.dart | 3 +- 6 files changed, 45 insertions(+), 139 deletions(-) delete mode 100644 lib/features/manage_account/presentation/model/vacation/vacation_message_type.dart diff --git a/lib/features/manage_account/presentation/model/vacation/vacation_message_type.dart b/lib/features/manage_account/presentation/model/vacation/vacation_message_type.dart deleted file mode 100644 index 412a38262..000000000 --- a/lib/features/manage_account/presentation/model/vacation/vacation_message_type.dart +++ /dev/null @@ -1,20 +0,0 @@ - -import 'package:flutter/cupertino.dart'; -import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; - -enum VacationMessageType { - plainText, - htmlTemplate -} - -extension VacationMessageTypeExtension on VacationMessageType { - - String getTitle(BuildContext context) { - switch(this) { - case VacationMessageType.plainText: - return AppLocalizations.of(context).plain_text; - case VacationMessageType.htmlTemplate: - return AppLocalizations.of(context).html_template; - } - } -} \ No newline at end of file diff --git a/lib/features/manage_account/presentation/vacation/vacation_controller.dart b/lib/features/manage_account/presentation/vacation/vacation_controller.dart index 514f07f0f..3484781ec 100644 --- a/lib/features/manage_account/presentation/vacation/vacation_controller.dart +++ b/lib/features/manage_account/presentation/vacation/vacation_controller.dart @@ -18,7 +18,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/va import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/date_type.dart'; -import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_message_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_presentation.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_responder_status.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; @@ -37,9 +36,7 @@ class VacationController extends BaseController { final vacationPresentation = VacationPresentation.initialize().obs; final errorMessageBody = Rxn(); - final vacationMessageType = Rx(VacationMessageType.plainText); - final messageTextController = TextEditingController(); final subjectTextController = TextEditingController(); final richTextControllerForMobile = RichTextController(); final htmlEditorMinHeight = 150; @@ -115,9 +112,8 @@ class VacationController extends BaseController { void _initializeValueForVacation(VacationPresentation newVacation) { vacationPresentation.value = newVacation; - messageTextController.text = newVacation.messagePlainText ?? ''; subjectTextController.text = newVacation.subject ?? ''; - updateMessageHtmlText(newVacation.messageHtmlText ?? ''); + updateMessageHtmlText(newVacation.messageHtmlText ?? newVacation.messagePlainText ?? ''); if (PlatformInfo.isWeb) { _richTextControllerForWeb.editorController.setText(newVacation.messageHtmlText ?? ''); } else { @@ -263,9 +259,8 @@ class VacationController extends BaseController { return; } - final messagePlainText = messageTextController.text; final messageHtmlText = (PlatformInfo.isWeb ? _vacationMessageHtmlText : await _getMessageHtmlText()) ?? ''; - if (messagePlainText.isEmpty && messageHtmlText.isEmpty && context.mounted) { + if (messageHtmlText.isEmpty && context.mounted) { if (currentOverlayContext != null && currentContext != null) { _appToast.showToastErrorMessage( currentOverlayContext!, @@ -277,9 +272,9 @@ class VacationController extends BaseController { final subjectVacation = subjectTextController.text; final newVacationPresentation = vacationPresentation.value.copyWidth( - messagePlainText: messagePlainText, - messageHtmlText: messageHtmlText, - subject: subjectVacation); + messageHtmlText: messageHtmlText, + subject: subjectVacation + ); log('VacationController::saveVacation(): newVacationPresentation: $newVacationPresentation'); final newVacationResponse = newVacationPresentation.toVacationResponse(); log('VacationController::saveVacation(): newVacationResponse: $newVacationResponse'); @@ -329,22 +324,10 @@ class VacationController extends BaseController { } } - void selectVacationMessageType(BuildContext context, VacationMessageType newMessageType) { - if (newMessageType == VacationMessageType.plainText && PlatformInfo.isMobile) { - _storeMessageHtmlTextOnMobile(); - } - clearFocusEditor(context); - vacationMessageType.value = newMessageType; - } - - void _storeMessageHtmlTextOnMobile() async { - final messageHtml = await _getMessageHtmlText(); - updateMessageHtmlText(messageHtml); - } - void clearFocusEditor(BuildContext context) { if (PlatformInfo.isMobile) { richTextControllerForMobile.htmlEditorApi?.unfocus(); + KeyboardUtils.hideSystemKeyboardMobile(); } KeyboardUtils.hideKeyboard(context); } @@ -377,7 +360,6 @@ class VacationController extends BaseController { @override void onClose() { - messageTextController.dispose(); subjectTextController.dispose(); richTextControllerForMobile.dispose(); scrollController.dispose(); diff --git a/lib/features/manage_account/presentation/vacation/vacation_view.dart b/lib/features/manage_account/presentation/vacation/vacation_view.dart index f729ff7d6..e04d4df6e 100644 --- a/lib/features/manage_account/presentation/vacation/vacation_view.dart +++ b/lib/features/manage_account/presentation/vacation/vacation_view.dart @@ -1,7 +1,6 @@ import 'package:core/core.dart'; import 'package:core/presentation/utils/html_transformer/html_utils.dart'; -import 'package:core/utils/direction_utils.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; @@ -9,13 +8,11 @@ import 'package:pointer_interceptor/pointer_interceptor.dart'; import 'package:rich_text_composer/rich_text_composer.dart'; import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.dart'; import 'package:tmail_ui_user/features/base/widget/border_button_field.dart'; -import 'package:tmail_ui_user/features/base/widget/text_input_decoration_builder.dart'; import 'package:tmail_ui_user/features/base/widget/text_input_field_builder.dart'; import 'package:tmail_ui_user/features/composer/presentation/mixin/rich_text_button_mixin.dart'; import 'package:tmail_ui_user/features/composer/presentation/model/button_layout_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/base/setting_detail_view_builder.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/date_type.dart'; -import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_message_type.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/vacation/vacation_responder_status.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/utils/vacation_utils.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart'; @@ -366,64 +363,43 @@ class VacationView extends GetWidget with RichTextButtonMixi } Widget _buildVacationMessage(BuildContext context) { - return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ - Row(children: [ - Expanded(child: Text(AppLocalizations.of(context).message, - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.normal, - color: AppColor.colorContentEmail))), - _buildVacationMessageTypeButton(context, VacationMessageType.plainText), - _buildVacationMessageTypeButton(context, VacationMessageType.htmlTemplate), - ]), - const SizedBox(height: 8), - _buildMessageTextEditor(context) - ]); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + AppLocalizations.of(context).message, + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.normal, + color: AppColor.colorContentEmail + ) + ), + const SizedBox(height: 8), + _buildMessageTextEditor(context) + ] + ); } Widget _buildMessageTextEditor(BuildContext context) { - return Obx(() { - if (controller.vacationMessageType.value == VacationMessageType.plainText) { - return _buildMessagePlainTextEditor(context); - } else { - return Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - border: Border.all(color: AppColor.colorInputBorderCreateMailbox), - color: Colors.white), - padding: const EdgeInsets.only(left: 12, right: 12, top: 12), - child: Column(children: [ - _buildMessageHtmlTextEditor(context), - if (PlatformInfo.isWeb) - Center(child: Obx(() { - return PointerInterceptor( - child: buildToolbarRichTextForWeb( - context, - controller.richTextControllerForWeb, - layoutType: ButtonLayoutType.scrollHorizontal), - ); - })) - ]), - ); - } - }); - } - - Widget _buildMessagePlainTextEditor(BuildContext context) { - return TextFieldBuilder( - onTextChange: (value) => controller.updateMessageBody(context, value), - keyboardType: TextInputType.multiline, - controller: controller.messageTextController, - textStyle: const TextStyle(color: Colors.black, fontSize: 16), - textDirection: DirectionUtils.getDirectionByLanguage(context), - minLines: 10, - maxLines: null, - decoration: (TextInputDecorationBuilder() - ..setContentPadding(const EdgeInsets.all(16)) - ..setHintText(AppLocalizations.of(context).hintMessageBodyVacation) - ..setFillColor(Colors.white) - ..setErrorText(controller.isVacationDeactivated ? null : controller.errorMessageBody.value)) - .build(), + return Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all(color: AppColor.colorInputBorderCreateMailbox), + color: Colors.white), + padding: const EdgeInsetsDirectional.only(start: 12, end: 12, top: 12), + child: Column(children: [ + _buildMessageHtmlTextEditor(context), + if (PlatformInfo.isWeb) + Center( + child: PointerInterceptor( + child: buildToolbarRichTextForWeb( + context, + controller.richTextControllerForWeb, + layoutType: ButtonLayoutType.scrollHorizontal + ) + ) + ) + ]), ); } @@ -443,11 +419,9 @@ class VacationView extends GetWidget with RichTextButtonMixi defaultToolbarButtons: []), otherOptions: const html_editor_browser.OtherOptions(height: 150), callbacks: html_editor_browser.Callbacks( - onChangeSelection: (settings) { - controller.richTextControllerForWeb.onEditorSettingsChange(settings); - }, onChangeContent: (String? changed) { - controller.updateMessageHtmlText(changed); - }, onFocus: () { + onChangeSelection: controller.richTextControllerForWeb.onEditorSettingsChange, + onChangeContent: controller.updateMessageHtmlText, + onFocus: () { KeyboardUtils.hideKeyboard(context); Future.delayed(const Duration(milliseconds: 500), () { controller.richTextControllerForWeb.editorController.setFocus(); @@ -474,21 +448,4 @@ class VacationView extends GetWidget with RichTextButtonMixi ); } } - - Widget _buildVacationMessageTypeButton(BuildContext context, VacationMessageType messageType) { - return buildButtonWrapText( - messageType.getTitle(context), - textStyle: TextStyle( - fontWeight: FontWeight.w500, - fontSize: 14, - color: controller.vacationMessageType.value == messageType - ? AppColor.colorContentEmail - : AppColor.colorHintSearchBar), - bgColor: controller.vacationMessageType.value == messageType - ? AppColor.emailAddressChipColor - : Colors.transparent, - height: 35, - radius: 10, - onTap: () => controller.selectVacationMessageType(context, messageType)); - } } \ No newline at end of file diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 8a549ecca..6bb4b653e 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2023-07-06T18:40:29.349603", + "@@last_modified": "2023-07-07T16:07:02.053606", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -1220,12 +1220,6 @@ "placeholders_order": [], "placeholders": {} }, - "plain_text": "Plain text", - "@plain_text": { - "type": "text", - "placeholders_order": [], - "placeholders": {} - }, "html_template": "Html template", "@html_template": { "type": "text", diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index a308a5480..a1f5d7799 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -1250,12 +1250,6 @@ class AppLocalizations { name: 'signature'); } - String get plain_text { - return Intl.message( - 'Plain text', - name: 'plain_text'); - } - String get html_template { return Intl.message( 'Html template', diff --git a/lib/main/utils/app_utils.dart b/lib/main/utils/app_utils.dart index 929f1143b..7fa2b8b15 100644 --- a/lib/main/utils/app_utils.dart +++ b/lib/main/utils/app_utils.dart @@ -33,8 +33,7 @@ class AppUtils { return intl.Bidi.isRtlLanguage(Localizations.localeOf(context).languageCode); } - static TextDirection getCurrentDirection(BuildContext context) => - isDirectionRTL(context) ? TextDirection.rtl : TextDirection.ltr; + static TextDirection getCurrentDirection(BuildContext context) => Directionality.maybeOf(context) ?? TextDirection.ltr; static bool isEmailLocalhost(String email) { return RegExp(r'^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@localhost$').hasMatch(email);