TF-3591 Implement CalendarEventCounter/accept method

This commit is contained in:
DatDang
2025-04-16 09:37:42 +07:00
committed by Dat H. Pham
parent 037fcc03a1
commit 9df53ef6b9
27 changed files with 256 additions and 21 deletions
@@ -58,6 +58,7 @@ import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_requ
import 'package:tmail_ui_user/features/email/domain/model/send_receipt_to_sender_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/view_entire_message_request.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_accept_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_counter_accept_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_maybe_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_reject_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/calendar_event_reply_state.dart';
@@ -80,6 +81,7 @@ import 'package:tmail_ui_user/features/email/domain/state/print_email_state.dart
import 'package:tmail_ui_user/features/email/domain/state/send_receipt_to_sender_state.dart';
import 'package:tmail_ui_user/features/email/domain/state/unsubscribe_email_state.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_accept_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/calendar_event_counter_accept_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/download_all_attachments_for_web_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/export_all_attachments_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/get_entire_message_as_document_interactor.dart';
@@ -184,6 +186,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
AcceptCalendarEventInteractor? _acceptCalendarEventInteractor;
MaybeCalendarEventInteractor? _maybeCalendarEventInteractor;
RejectCalendarEventInteractor? _rejectCalendarEventInteractor;
AcceptCounterCalendarEventInteractor? _acceptCounterCalendarEventInteractor;
final emailContents = RxnString();
final attachments = <Attachment>[].obs;
@@ -535,6 +538,7 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
_acceptCalendarEventInteractor = getBinding<AcceptCalendarEventInteractor>();
_maybeCalendarEventInteractor = getBinding<MaybeCalendarEventInteractor>();
_rejectCalendarEventInteractor = getBinding<RejectCalendarEventInteractor>();
_acceptCounterCalendarEventInteractor = getBinding<AcceptCounterCalendarEventInteractor>();
}
void _injectCalendarEventBindings(Session? session, AccountId? accountId) {
@@ -2084,6 +2088,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
case EventActionType.yes:
_acceptCalendarEventAction(emailId);
break;
case EventActionType.acceptCounter:
_acceptCounterCalendarEventAction(emailId);
case EventActionType.maybe:
_maybeCalendarEventAction(emailId);
break;
@@ -2095,6 +2101,25 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
}
}
void _acceptCounterCalendarEventAction(EmailId emailId) {
if (canNotAcceptCounterCalendarEvent) {
consumeState(Stream.value(Left(CalendarEventCounterAcceptFailure())));
} else {
consumeState(_acceptCounterCalendarEventInteractor!.execute(
accountId!,
{_displayingEventBlobId!},
emailId,
));
}
}
bool get canNotAcceptCounterCalendarEvent => _acceptCounterCalendarEventInteractor == null
|| _displayingEventBlobId == null
|| accountId == null
|| session == null
|| session!.validateCalendarEventCapability(accountId!).isAvailable == false
|| !session!.validateAcceptCounterCalendarEventCapability(accountId!);
void _acceptCalendarEventAction(EmailId emailId) {
if (_acceptCalendarEventInteractor == null
|| _displayingEventBlobId == null
@@ -2167,7 +2192,8 @@ class SingleEmailController extends BaseController with AppLoaderMixin {
appToast.showToastSuccessMessage(
currentOverlayContext!,
success.getEventActionType().getToastMessageSuccess(currentContext!));
success.getEventActionType().getToastMessageSuccess(currentContext!),
);
}
void _calendarEventFailure(Failure failure) {