TF-2682 Create always read receipt controller

This commit is contained in:
DatDang
2024-03-08 10:07:25 +07:00
committed by Dat H. Pham
parent 7a56234e5d
commit e08ba15d93
4 changed files with 162 additions and 0 deletions
@@ -0,0 +1,99 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
import 'package:tmail_ui_user/features/server_settings/domain/state/get_always_read_receipt_setting_state.dart';
import 'package:tmail_ui_user/features/server_settings/domain/state/update_always_read_receipt_setting_state.dart';
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart';
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_always_read_receipt_setting_interactor.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
class AlwaysReadReceiptController extends BaseController {
AlwaysReadReceiptController(
this._getAlwaysReadReceiptSettingInteractor,
this._updateAlwaysReadReceiptSettingInteractor,
);
final GetAlwaysReadReceiptSettingInteractor _getAlwaysReadReceiptSettingInteractor;
final UpdateAlwaysReadReceiptSettingInteractor _updateAlwaysReadReceiptSettingInteractor;
final alwaysReadReceipt = true.obs;
bool get isLoading => viewState.value.fold(
(failure) => false,
(success) => success is GettingAlwaysReadReceiptSetting || success is UpdatingAlwaysReadReceiptSetting);
final _manageAccountDashBoardController = Get.find<ManageAccountDashBoardController>();
@override
void onInit() {
super.onInit();
_getCurrentAlwaysReadReceiptSetting();
}
@override
void handleSuccessViewState(Success success) {
super.handleSuccessViewState(success);
if (success is GetAlwaysReadReceiptSettingSuccess) {
_getAlwaysReadReceiptSettingSuccess(success);
} else if (success is UpdateAlwaysReadReceiptSettingSuccess) {
_updateAlwaysReadReceiptSettingSuccess(success);
}
}
@override
void handleFailureViewState(Failure failure) {
super.handleFailureViewState(failure);
if (failure is GetAlwaysReadReceiptSettingFailure) {
_getAlwaysReadReceiptSettingFailure();
} else if (failure is UpdateAlwaysReadReceiptSettingFailure) {
_updateAlwaysReadReceiptSettingFailure();
}
}
void _updateAlwaysReadReceiptValue(bool value) {
alwaysReadReceipt.value = value;
}
void _updateAlwaysReadReceiptSettingFailure() {
if (currentOverlayContext != null && currentContext != null) {
appToast.showToastErrorMessage(
currentOverlayContext!,
AppLocalizations.of(currentContext!).an_error_occurred);
}
}
void _updateAlwaysReadReceiptSettingSuccess(
UpdateAlwaysReadReceiptSettingSuccess success
) {
_updateAlwaysReadReceiptValue(success.isEnabled);
}
void toggleAlwaysReadReceipt() {
if (isLoading) return;
final accountId = _manageAccountDashBoardController.accountId.value;
if (accountId != null) {
consumeState(_updateAlwaysReadReceiptSettingInteractor.execute(
accountId,
!alwaysReadReceipt.value));
}
}
void _getAlwaysReadReceiptSettingFailure() {
alwaysReadReceipt.value = true;
}
void _getAlwaysReadReceiptSettingSuccess(
GetAlwaysReadReceiptSettingSuccess success
) {
_updateAlwaysReadReceiptValue(success.isEnabled);
}
void _getCurrentAlwaysReadReceiptSetting() {
final accountId = _manageAccountDashBoardController.accountId.value;
if (accountId != null) {
consumeState(_getAlwaysReadReceiptSettingInteractor.execute(accountId));
}
}
}
@@ -0,0 +1,48 @@
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/always_read_receipt_controller.dart';
import 'package:tmail_ui_user/features/server_settings/data/datasource/server_settings_data_source.dart';
import 'package:tmail_ui_user/features/server_settings/data/datasource_impl/remote_server_settings_data_source_impl.dart';
import 'package:tmail_ui_user/features/server_settings/data/network/server_settings_api.dart';
import 'package:tmail_ui_user/features/server_settings/data/repository/server_settings_repository_impl.dart';
import 'package:tmail_ui_user/features/server_settings/domain/repository/server_settings_repository.dart';
import 'package:tmail_ui_user/features/server_settings/domain/usecases/get_always_read_receipt_setting_interactor.dart';
import 'package:tmail_ui_user/features/server_settings/domain/usecases/update_always_read_receipt_setting_interactor.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
class AlwaysReadReceiptBindings extends BaseBindings {
@override
void bindingsController() {
Get.put(AlwaysReadReceiptController(
Get.find<GetAlwaysReadReceiptSettingInteractor>(),
Get.find<UpdateAlwaysReadReceiptSettingInteractor>()));
}
@override
void bindingsDataSource() {
Get.lazyPut<ServerSettingsDataSource>(() => Get.find<RemoteServerSettingsDataSourceImpl>());
}
@override
void bindingsDataSourceImpl() {
Get.lazyPut(() => RemoteServerSettingsDataSourceImpl(
Get.find<ServerSettingsAPI>(),
Get.find<RemoteExceptionThrower>()));
}
@override
void bindingsInteractor() {
Get.lazyPut(() => GetAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
Get.lazyPut(() => UpdateAlwaysReadReceiptSettingInteractor(Get.find<ServerSettingsRepository>()));
}
@override
void bindingsRepository() {
Get.lazyPut<ServerSettingsRepository>(() => Get.find<ServerSettingsRepositoryImpl>());
}
@override
void bindingsRepositoryImpl() {
Get.lazyPut(() => ServerSettingsRepositoryImpl(Get.find<ServerSettingsDataSource>()));
}
}
@@ -12,6 +12,7 @@ import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
import 'package:model/model.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
import 'package:server_settings/server_settings/capability_server_settings.dart';
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/base/state/banner_state.dart';
@@ -21,6 +22,7 @@ import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacati
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_all_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/domain/usecases/update_vacation_interactor.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/action/dashboard_setting_action.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/always_read_receipt/bindings/always_read_receipt_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/bindings/email_rules_bindings.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
@@ -198,6 +200,9 @@ class ManageAccountDashBoardController extends ReloadableController {
case AccountMenuItem.emailRules:
EmailRulesBindings().dependencies();
break;
case AccountMenuItem.alwaysReadReceipt:
AlwaysReadReceiptBindings().dependencies();
break;
case AccountMenuItem.forward:
ForwardBindings().dependencies();
break;
@@ -239,6 +244,14 @@ class ManageAccountDashBoardController extends ReloadableController {
}
}
bool get isServerSettingsCapabilitySupported {
if (accountId.value != null && sessionCurrent != null) {
return [capabilityServerSettings].isSupported(sessionCurrent!, accountId.value!);
} else {
return false;
}
}
bool get isRuleFilterCapabilitySupported {
if (accountId.value != null && sessionCurrent != null) {
return [capabilityRuleFilter].isSupported(sessionCurrent!, accountId.value!);
@@ -38,6 +38,8 @@ class ManageAccountMenuController extends GetxController {
AccountMenuItem.profiles,
if (dashBoardController.isRuleFilterCapabilitySupported)
AccountMenuItem.emailRules,
if (dashBoardController.isServerSettingsCapabilitySupported)
AccountMenuItem.alwaysReadReceipt,
if (dashBoardController.isForwardCapabilitySupported)
AccountMenuItem.forward,
if (dashBoardController.isVacationCapabilitySupported)