TF-3589 Calendar event attendance status

This commit is contained in:
DatDang
2025-04-03 13:38:51 +07:00
committed by Dat H. Pham
parent 5c163e9676
commit ad05c68453
26 changed files with 208 additions and 471 deletions
@@ -1,12 +0,0 @@
import 'package:jmap_dart_client/jmap/core/id.dart';
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
extension EmailIdExtension on EmailId {
Map<Id, PatchObject> generateMapUpdateObjectEventAttendanceStatus(EventActionType eventActionType) {
return {
id: eventActionType.generateEventAttendanceStatusActionPath()
};
}
}
@@ -1,9 +1,6 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/cupertino.dart';
import 'package:jmap_dart_client/jmap/core/patch_object.dart';
import 'package:jmap_dart_client/jmap/mail/email/keyword_identifier.dart';
import 'package:model/extensions/keyword_identifier_extension.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
enum EventActionType {
@@ -25,31 +22,6 @@ enum EventActionType {
}
}
PatchObject generateEventAttendanceStatusActionPath() {
switch(this) {
case EventActionType.yes:
return PatchObject({
KeyWordIdentifierExtension.acceptedEventAttendance.generatePath(): true,
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): null,
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): null,
});
case EventActionType.maybe:
return PatchObject({
KeyWordIdentifierExtension.acceptedEventAttendance.generatePath(): null,
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): true,
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): null,
});
case EventActionType.no:
return PatchObject({
KeyWordIdentifierExtension.acceptedEventAttendance.generatePath(): null,
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance.generatePath(): null,
KeyWordIdentifierExtension.rejectedEventAttendance.generatePath(): true,
});
case EventActionType.mailToAttendees:
return PatchObject({});
}
}
String getToastMessageSuccess(BuildContext context) {
switch(this) {
case EventActionType.yes:
@@ -62,31 +34,6 @@ enum EventActionType {
return '';
}
}
Map<KeyWordIdentifier, bool> getMapKeywords() {
switch(this) {
case EventActionType.yes:
return {
KeyWordIdentifierExtension.acceptedEventAttendance: true,
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance: false,
KeyWordIdentifierExtension.rejectedEventAttendance: false,
};
case EventActionType.maybe:
return {
KeyWordIdentifierExtension.acceptedEventAttendance: false,
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance: true,
KeyWordIdentifierExtension.rejectedEventAttendance: false,
};
case EventActionType.no:
return {
KeyWordIdentifierExtension.acceptedEventAttendance: false,
KeyWordIdentifierExtension.tentativelyAcceptedEventAttendance: false,
KeyWordIdentifierExtension.rejectedEventAttendance: true,
};
case EventActionType.mailToAttendees:
return {};
}
}
}
class EventAction with EquatableMixin {
@@ -25,7 +25,6 @@ import 'package:model/email/read_actions.dart';
import 'package:tmail_ui_user/features/composer/domain/model/email_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/detailed_email.dart';
import 'package:tmail_ui_user/features/email/domain/model/email_print.dart';
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
import 'package:tmail_ui_user/features/email/domain/model/move_to_mailbox_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/preview_email_eml_request.dart';
import 'package:tmail_ui_user/features/email/domain/model/restore_deleted_message_request.dart';
@@ -177,12 +176,6 @@ abstract class EmailRepository {
Future<void> printEmail(EmailPrint emailPrint);
Future<void> storeEventAttendanceStatus(
Session session,
AccountId accountId,
EmailId emailId,
EventActionType eventActionType);
Future<List<Email>> parseEmailByBlobIds(AccountId accountId, Set<Id> blobIds);
Future<String> generatePreviewEmailEMLContent(PreviewEmailEMLRequest previewEmailEMLRequest);
@@ -1,20 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
class StoreEventAttendanceStatusLoading extends LoadingState {}
class StoreEventAttendanceStatusSuccess extends UIState {
final EventActionType eventActionType;
StoreEventAttendanceStatusSuccess(this.eventActionType);
@override
List<Object?> get props => [eventActionType];
}
class StoreEventAttendanceStatusFailure extends FeatureFailure {
StoreEventAttendanceStatusFailure({dynamic exception}) : super(exception: exception);
}
@@ -1,36 +0,0 @@
import 'package:core/presentation/state/failure.dart';
import 'package:core/presentation/state/success.dart';
import 'package:dartz/dartz.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/email/domain/model/event_action.dart';
import 'package:tmail_ui_user/features/email/domain/repository/email_repository.dart';
import 'package:tmail_ui_user/features/email/domain/state/store_event_attendance_status_state.dart';
class StoreEventAttendanceStatusInteractor {
final EmailRepository _emailRepository;
StoreEventAttendanceStatusInteractor(this._emailRepository);
Stream<Either<Failure, Success>> execute(
Session session,
AccountId accountId,
EmailId emailId,
EventActionType eventActionType
) async* {
try {
yield Right(StoreEventAttendanceStatusLoading());
await _emailRepository.storeEventAttendanceStatus(
session,
accountId,
emailId,
eventActionType);
yield Right(StoreEventAttendanceStatusSuccess(eventActionType));
} catch (e) {
yield Left(StoreEventAttendanceStatusFailure(exception: e));
}
}
}