From c8ea2da3cff36957f1ecf2cb280bbbf44ea4ed35 Mon Sep 17 00:00:00 2001 From: dab246 Date: Wed, 10 Jul 2024 13:57:55 +0700 Subject: [PATCH] TF-2945 Apply quick select for read receipt in composer on web --- .../presentation/composer_controller.dart | 8 +++- .../composer/presentation/composer_view.dart | 4 +- .../presentation/composer_view_web.dart | 42 +++---------------- .../web/bottom_bar_composer_widget.dart | 15 +++++-- lib/l10n/intl_messages.arb | 26 +++++++++++- lib/main/localizations/app_localizations.dart | 28 +++++++++++++ 6 files changed, 78 insertions(+), 45 deletions(-) diff --git a/lib/features/composer/presentation/composer_controller.dart b/lib/features/composer/presentation/composer_controller.dart index 711c052ee..f9f2d265f 100644 --- a/lib/features/composer/presentation/composer_controller.dart +++ b/lib/features/composer/presentation/composer_controller.dart @@ -1785,8 +1785,14 @@ class ComposerController extends BaseController with DragDropFileMixin implement } } - void toggleRequestReadReceipt() { + void toggleRequestReadReceipt(BuildContext context) { hasRequestReadReceipt.toggle(); + + appToast.showToastSuccessMessage( + context, + hasRequestReadReceipt.isTrue + ? AppLocalizations.of(context).requestReadReceiptHasBeenEnabled + : AppLocalizations.of(context).requestReadReceiptHasBeenDisabled); } Future _autoFocusFieldWhenLauncher() async { diff --git a/lib/features/composer/presentation/composer_view.dart b/lib/features/composer/presentation/composer_view.dart index ab1ee1c05..10851e897 100644 --- a/lib/features/composer/presentation/composer_view.dart +++ b/lib/features/composer/presentation/composer_view.dart @@ -440,7 +440,7 @@ class ComposerView extends GetWidget { isSelected: controller.hasRequestReadReceipt.value, onCallbackAction: () { popBack(); - controller.toggleRequestReadReceipt(); + controller.toggleRequestReadReceipt(context); } ) ), @@ -461,7 +461,7 @@ class ComposerView extends GetWidget { isSelected: controller.hasRequestReadReceipt.value, onCallbackAction: () { popBack(); - controller.toggleRequestReadReceipt(); + controller.toggleRequestReadReceipt(context); } ) ), diff --git a/lib/features/composer/presentation/composer_view_web.dart b/lib/features/composer/presentation/composer_view_web.dart index d992b0caa..e6984d39b 100644 --- a/lib/features/composer/presentation/composer_view_web.dart +++ b/lib/features/composer/presentation/composer_view_web.dart @@ -467,6 +467,7 @@ class ComposerView extends GetWidget { Obx(() => BottomBarComposerWidget( isCodeViewEnabled: controller.richTextWebController!.codeViewEnabled, isFormattingOptionsEnabled: controller.richTextWebController!.isFormattingOptionsEnabled, + hasReadReceipt: controller.hasRequestReadReceipt.value, openRichToolbarAction: controller.richTextWebController!.toggleFormattingOptions, attachFileAction: () => controller.openFilePickerByType(context, FileType.any), insertImageAction: () => controller.insertImage(context, constraints.maxWidth), @@ -474,14 +475,7 @@ class ComposerView extends GetWidget { deleteComposerAction: () => controller.handleClickDeleteComposer(context), saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context), sendMessageAction: () => controller.handleClickSendButton(context), - requestReadReceiptAction: (position) { - controller.openPopupMenuAction( - context, - position, - _createReadReceiptPopupItems(context), - radius: ComposerStyle.popupMenuRadius - ); - }, + requestReadReceiptAction: () => controller.toggleRequestReadReceipt(context), )), ], ), @@ -776,6 +770,7 @@ class ComposerView extends GetWidget { Obx(() => BottomBarComposerWidget( isCodeViewEnabled: controller.richTextWebController!.codeViewEnabled, isFormattingOptionsEnabled: controller.richTextWebController!.isFormattingOptionsEnabled, + hasReadReceipt: controller.hasRequestReadReceipt.value, openRichToolbarAction: controller.richTextWebController!.toggleFormattingOptions, attachFileAction: () => controller.openFilePickerByType(context, FileType.any), insertImageAction: () => controller.insertImage(context, constraints.maxWidth), @@ -783,14 +778,7 @@ class ComposerView extends GetWidget { deleteComposerAction: () => controller.handleClickDeleteComposer(context), saveToDraftAction: () => controller.handleClickSaveAsDraftsButton(context), sendMessageAction: () => controller.handleClickSendButton(context), - requestReadReceiptAction: (position) { - controller.openPopupMenuAction( - context, - position, - _createReadReceiptPopupItems(context), - radius: ComposerStyle.popupMenuRadius - ); - }, + requestReadReceiptAction: () => controller.toggleRequestReadReceipt(context), )), ]), ); @@ -799,26 +787,6 @@ class ComposerView extends GetWidget { ); } - List _createReadReceiptPopupItems(BuildContext context) { - return [ - PopupMenuItem( - padding: EdgeInsets.zero, - child: PopupItemWidget( - controller.imagePaths.icReadReceipt, - AppLocalizations.of(context).requestReadReceipt, - styleName: ComposerStyle.popupItemTextStyle, - padding: ComposerStyle.popupItemPadding, - selectedIcon: controller.imagePaths.icFilterSelected, - isSelected: controller.hasRequestReadReceipt.value, - onCallbackAction: () { - popBack(); - controller.toggleRequestReadReceipt(); - } - ) - ), - ]; - } - List _createMoreOptionPopupItems(BuildContext context) { return [ PopupMenuItem( @@ -849,7 +817,7 @@ class ComposerView extends GetWidget { isSelected: controller.hasRequestReadReceipt.value, onCallbackAction: () { popBack(); - controller.toggleRequestReadReceipt(); + controller.toggleRequestReadReceipt(context); } ) ), diff --git a/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart b/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart index 691f7136d..c446046d5 100644 --- a/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart +++ b/lib/features/composer/presentation/widgets/web/bottom_bar_composer_widget.dart @@ -11,6 +11,7 @@ class BottomBarComposerWidget extends StatelessWidget { final bool isCodeViewEnabled; final bool isFormattingOptionsEnabled; + final bool hasReadReceipt; final VoidCallback openRichToolbarAction; final VoidCallback attachFileAction; final VoidCallback insertImageAction; @@ -18,7 +19,7 @@ class BottomBarComposerWidget extends StatelessWidget { final VoidCallback deleteComposerAction; final VoidCallback saveToDraftAction; final VoidCallback sendMessageAction; - final OnRequestReadReceiptAction? requestReadReceiptAction; + final VoidCallback requestReadReceiptAction; final _imagePaths = Get.find(); @@ -26,6 +27,7 @@ class BottomBarComposerWidget extends StatelessWidget { super.key, required this.isCodeViewEnabled, required this.isFormattingOptionsEnabled, + required this.hasReadReceipt, required this.openRichToolbarAction, required this.attachFileAction, required this.insertImageAction, @@ -33,7 +35,7 @@ class BottomBarComposerWidget extends StatelessWidget { required this.deleteComposerAction, required this.saveToDraftAction, required this.sendMessageAction, - this.requestReadReceiptAction, + required this.requestReadReceiptAction, }); @override @@ -113,8 +115,13 @@ class BottomBarComposerWidget extends StatelessWidget { borderRadius: BottomBarComposerWidgetStyle.iconRadius, padding: BottomBarComposerWidgetStyle.iconPadding, iconSize: BottomBarComposerWidgetStyle.iconSize, - tooltipMessage: AppLocalizations.of(context).requestReadReceipt, - onTapActionAtPositionCallback: requestReadReceiptAction, + iconColor: hasReadReceipt + ? BottomBarComposerWidgetStyle.selectedIconColor + : BottomBarComposerWidgetStyle.iconColor, + tooltipMessage: hasReadReceipt + ? AppLocalizations.of(context).turnOffRequestReadReceipt + : AppLocalizations.of(context).turnOnRequestReadReceipt, + onTapActionCallback: requestReadReceiptAction, ), const SizedBox(width: BottomBarComposerWidgetStyle.space), TMailButtonWidget.fromIcon( diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index 3e90dab54..9aa8d658a 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2024-03-19T12:10:23.549474", + "@@last_modified": "2024-07-10T13:53:40.940363", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", @@ -3909,5 +3909,29 @@ "type": "text", "placeholders_order": [], "placeholders": {} + }, + "turnOnRequestReadReceipt": "Turn on request read receipt", + "@turnOnRequestReadReceipt": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "turnOffRequestReadReceipt": "Turn off request read receipt", + "@turnOffRequestReadReceipt": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "requestReadReceiptHasBeenEnabled": "Request read receipt has been enabled", + "@requestReadReceiptHasBeenEnabled": { + "type": "text", + "placeholders_order": [], + "placeholders": {} + }, + "requestReadReceiptHasBeenDisabled": "Request read receipt has been disabled", + "@requestReadReceiptHasBeenDisabled": { + "type": "text", + "placeholders_order": [], + "placeholders": {} } } \ No newline at end of file diff --git a/lib/main/localizations/app_localizations.dart b/lib/main/localizations/app_localizations.dart index 2f1733d71..47be4e141 100644 --- a/lib/main/localizations/app_localizations.dart +++ b/lib/main/localizations/app_localizations.dart @@ -4085,4 +4085,32 @@ class AppLocalizations { name: 'showNotifications', ); } + + String get turnOnRequestReadReceipt { + return Intl.message( + 'Turn on request read receipt', + name: 'turnOnRequestReadReceipt' + ); + } + + String get turnOffRequestReadReceipt { + return Intl.message( + 'Turn off request read receipt', + name: 'turnOffRequestReadReceipt' + ); + } + + String get requestReadReceiptHasBeenEnabled { + return Intl.message( + 'Request read receipt has been enabled', + name: 'requestReadReceiptHasBeenEnabled' + ); + } + + String get requestReadReceiptHasBeenDisabled { + return Intl.message( + 'Request read receipt has been disabled', + name: 'requestReadReceiptHasBeenDisabled' + ); + } } \ No newline at end of file