TF-1683 Remove Plain text option of message in VacationView
(cherry picked from commit 9a6f9b2ecaf629140f0676bff1a33e524f17ebc1)
This commit is contained in:
@@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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/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/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/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_presentation.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/model/vacation/vacation_responder_status.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.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 vacationPresentation = VacationPresentation.initialize().obs;
|
||||||
final errorMessageBody = Rxn<String>();
|
final errorMessageBody = Rxn<String>();
|
||||||
final vacationMessageType = Rx<VacationMessageType>(VacationMessageType.plainText);
|
|
||||||
|
|
||||||
final messageTextController = TextEditingController();
|
|
||||||
final subjectTextController = TextEditingController();
|
final subjectTextController = TextEditingController();
|
||||||
final richTextControllerForMobile = RichTextController();
|
final richTextControllerForMobile = RichTextController();
|
||||||
final htmlEditorMinHeight = 150;
|
final htmlEditorMinHeight = 150;
|
||||||
@@ -115,9 +112,8 @@ class VacationController extends BaseController {
|
|||||||
|
|
||||||
void _initializeValueForVacation(VacationPresentation newVacation) {
|
void _initializeValueForVacation(VacationPresentation newVacation) {
|
||||||
vacationPresentation.value = newVacation;
|
vacationPresentation.value = newVacation;
|
||||||
messageTextController.text = newVacation.messagePlainText ?? '';
|
|
||||||
subjectTextController.text = newVacation.subject ?? '';
|
subjectTextController.text = newVacation.subject ?? '';
|
||||||
updateMessageHtmlText(newVacation.messageHtmlText ?? '');
|
updateMessageHtmlText(newVacation.messageHtmlText ?? newVacation.messagePlainText ?? '');
|
||||||
if (PlatformInfo.isWeb) {
|
if (PlatformInfo.isWeb) {
|
||||||
_richTextControllerForWeb.editorController.setText(newVacation.messageHtmlText ?? '');
|
_richTextControllerForWeb.editorController.setText(newVacation.messageHtmlText ?? '');
|
||||||
} else {
|
} else {
|
||||||
@@ -263,9 +259,8 @@ class VacationController extends BaseController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final messagePlainText = messageTextController.text;
|
|
||||||
final messageHtmlText = (PlatformInfo.isWeb ? _vacationMessageHtmlText : await _getMessageHtmlText()) ?? '';
|
final messageHtmlText = (PlatformInfo.isWeb ? _vacationMessageHtmlText : await _getMessageHtmlText()) ?? '';
|
||||||
if (messagePlainText.isEmpty && messageHtmlText.isEmpty && context.mounted) {
|
if (messageHtmlText.isEmpty && context.mounted) {
|
||||||
if (currentOverlayContext != null && currentContext != null) {
|
if (currentOverlayContext != null && currentContext != null) {
|
||||||
_appToast.showToastErrorMessage(
|
_appToast.showToastErrorMessage(
|
||||||
currentOverlayContext!,
|
currentOverlayContext!,
|
||||||
@@ -277,9 +272,9 @@ class VacationController extends BaseController {
|
|||||||
final subjectVacation = subjectTextController.text;
|
final subjectVacation = subjectTextController.text;
|
||||||
|
|
||||||
final newVacationPresentation = vacationPresentation.value.copyWidth(
|
final newVacationPresentation = vacationPresentation.value.copyWidth(
|
||||||
messagePlainText: messagePlainText,
|
messageHtmlText: messageHtmlText,
|
||||||
messageHtmlText: messageHtmlText,
|
subject: subjectVacation
|
||||||
subject: subjectVacation);
|
);
|
||||||
log('VacationController::saveVacation(): newVacationPresentation: $newVacationPresentation');
|
log('VacationController::saveVacation(): newVacationPresentation: $newVacationPresentation');
|
||||||
final newVacationResponse = newVacationPresentation.toVacationResponse();
|
final newVacationResponse = newVacationPresentation.toVacationResponse();
|
||||||
log('VacationController::saveVacation(): newVacationResponse: $newVacationResponse');
|
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) {
|
void clearFocusEditor(BuildContext context) {
|
||||||
if (PlatformInfo.isMobile) {
|
if (PlatformInfo.isMobile) {
|
||||||
richTextControllerForMobile.htmlEditorApi?.unfocus();
|
richTextControllerForMobile.htmlEditorApi?.unfocus();
|
||||||
|
KeyboardUtils.hideSystemKeyboardMobile();
|
||||||
}
|
}
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
}
|
}
|
||||||
@@ -377,7 +360,6 @@ class VacationController extends BaseController {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
void onClose() {
|
void onClose() {
|
||||||
messageTextController.dispose();
|
|
||||||
subjectTextController.dispose();
|
subjectTextController.dispose();
|
||||||
richTextControllerForMobile.dispose();
|
richTextControllerForMobile.dispose();
|
||||||
scrollController.dispose();
|
scrollController.dispose();
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
|
|
||||||
import 'package:core/core.dart';
|
import 'package:core/core.dart';
|
||||||
import 'package:core/presentation/utils/html_transformer/html_utils.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/material.dart';
|
||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.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/rich_text_composer.dart';
|
||||||
import 'package:rich_text_composer/views/widgets/rich_text_keyboard_toolbar.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/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/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/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/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/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/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/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/utils/vacation_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller.dart';
|
||||||
@@ -366,64 +363,43 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildVacationMessage(BuildContext context) {
|
Widget _buildVacationMessage(BuildContext context) {
|
||||||
return Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
|
return Column(
|
||||||
Row(children: [
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
Expanded(child: Text(AppLocalizations.of(context).message,
|
children: [
|
||||||
style: const TextStyle(
|
Text(
|
||||||
fontSize: 14,
|
AppLocalizations.of(context).message,
|
||||||
fontWeight: FontWeight.normal,
|
style: const TextStyle(
|
||||||
color: AppColor.colorContentEmail))),
|
fontSize: 14,
|
||||||
_buildVacationMessageTypeButton(context, VacationMessageType.plainText),
|
fontWeight: FontWeight.normal,
|
||||||
_buildVacationMessageTypeButton(context, VacationMessageType.htmlTemplate),
|
color: AppColor.colorContentEmail
|
||||||
]),
|
)
|
||||||
const SizedBox(height: 8),
|
),
|
||||||
_buildMessageTextEditor(context)
|
const SizedBox(height: 8),
|
||||||
]);
|
_buildMessageTextEditor(context)
|
||||||
|
]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildMessageTextEditor(BuildContext context) {
|
Widget _buildMessageTextEditor(BuildContext context) {
|
||||||
return Obx(() {
|
return Container(
|
||||||
if (controller.vacationMessageType.value == VacationMessageType.plainText) {
|
decoration: BoxDecoration(
|
||||||
return _buildMessagePlainTextEditor(context);
|
borderRadius: BorderRadius.circular(10),
|
||||||
} else {
|
border: Border.all(color: AppColor.colorInputBorderCreateMailbox),
|
||||||
return Container(
|
color: Colors.white),
|
||||||
decoration: BoxDecoration(
|
padding: const EdgeInsetsDirectional.only(start: 12, end: 12, top: 12),
|
||||||
borderRadius: BorderRadius.circular(10),
|
child: Column(children: [
|
||||||
border: Border.all(color: AppColor.colorInputBorderCreateMailbox),
|
_buildMessageHtmlTextEditor(context),
|
||||||
color: Colors.white),
|
if (PlatformInfo.isWeb)
|
||||||
padding: const EdgeInsets.only(left: 12, right: 12, top: 12),
|
Center(
|
||||||
child: Column(children: [
|
child: PointerInterceptor(
|
||||||
_buildMessageHtmlTextEditor(context),
|
child: buildToolbarRichTextForWeb(
|
||||||
if (PlatformInfo.isWeb)
|
context,
|
||||||
Center(child: Obx(() {
|
controller.richTextControllerForWeb,
|
||||||
return PointerInterceptor(
|
layoutType: ButtonLayoutType.scrollHorizontal
|
||||||
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(),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -443,11 +419,9 @@ class VacationView extends GetWidget<VacationController> with RichTextButtonMixi
|
|||||||
defaultToolbarButtons: []),
|
defaultToolbarButtons: []),
|
||||||
otherOptions: const html_editor_browser.OtherOptions(height: 150),
|
otherOptions: const html_editor_browser.OtherOptions(height: 150),
|
||||||
callbacks: html_editor_browser.Callbacks(
|
callbacks: html_editor_browser.Callbacks(
|
||||||
onChangeSelection: (settings) {
|
onChangeSelection: controller.richTextControllerForWeb.onEditorSettingsChange,
|
||||||
controller.richTextControllerForWeb.onEditorSettingsChange(settings);
|
onChangeContent: controller.updateMessageHtmlText,
|
||||||
}, onChangeContent: (String? changed) {
|
onFocus: () {
|
||||||
controller.updateMessageHtmlText(changed);
|
|
||||||
}, onFocus: () {
|
|
||||||
KeyboardUtils.hideKeyboard(context);
|
KeyboardUtils.hideKeyboard(context);
|
||||||
Future.delayed(const Duration(milliseconds: 500), () {
|
Future.delayed(const Duration(milliseconds: 500), () {
|
||||||
controller.richTextControllerForWeb.editorController.setFocus();
|
controller.richTextControllerForWeb.editorController.setFocus();
|
||||||
@@ -474,21 +448,4 @@ class VacationView extends GetWidget<VacationController> 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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -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": "Initializing data...",
|
||||||
"@initializing_data": {
|
"@initializing_data": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
@@ -1220,12 +1220,6 @@
|
|||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
},
|
},
|
||||||
"plain_text": "Plain text",
|
|
||||||
"@plain_text": {
|
|
||||||
"type": "text",
|
|
||||||
"placeholders_order": [],
|
|
||||||
"placeholders": {}
|
|
||||||
},
|
|
||||||
"html_template": "Html template",
|
"html_template": "Html template",
|
||||||
"@html_template": {
|
"@html_template": {
|
||||||
"type": "text",
|
"type": "text",
|
||||||
|
|||||||
@@ -1250,12 +1250,6 @@ class AppLocalizations {
|
|||||||
name: 'signature');
|
name: 'signature');
|
||||||
}
|
}
|
||||||
|
|
||||||
String get plain_text {
|
|
||||||
return Intl.message(
|
|
||||||
'Plain text',
|
|
||||||
name: 'plain_text');
|
|
||||||
}
|
|
||||||
|
|
||||||
String get html_template {
|
String get html_template {
|
||||||
return Intl.message(
|
return Intl.message(
|
||||||
'Html template',
|
'Html template',
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ class AppUtils {
|
|||||||
return intl.Bidi.isRtlLanguage(Localizations.localeOf(context).languageCode);
|
return intl.Bidi.isRtlLanguage(Localizations.localeOf(context).languageCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static TextDirection getCurrentDirection(BuildContext context) =>
|
static TextDirection getCurrentDirection(BuildContext context) => Directionality.maybeOf(context) ?? TextDirection.ltr;
|
||||||
isDirectionRTL(context) ? TextDirection.rtl : TextDirection.ltr;
|
|
||||||
|
|
||||||
static bool isEmailLocalhost(String email) {
|
static bool isEmailLocalhost(String email) {
|
||||||
return RegExp(r'^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@localhost$').hasMatch(email);
|
return RegExp(r'^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@localhost$').hasMatch(email);
|
||||||
|
|||||||
Reference in New Issue
Block a user