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>()));
}
}