[Thread Detail] [Part 1] TF-3639 data layer and controller (#3645)

This commit is contained in:
Dat Dang
2025-05-07 11:10:39 +07:00
committed by Dat H. Pham
parent 1bd0705fb3
commit 7c3af832e4
11 changed files with 231 additions and 0 deletions
@@ -0,0 +1,10 @@
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_thread_by_id_state.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/thread_detail_controller.dart';
extension HandleGetEmailIdsByThreadIdSuccess on ThreadDetailController {
void handleGetEmailIdsByThreadIdSuccess(
GetThreadByIdSuccess success,
) {
emailIds.value = success.emailIds;
}
}
@@ -0,0 +1,11 @@
import 'package:equatable/equatable.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
class ThreadDetailArguments with EquatableMixin {
final ThreadId threadId;
const ThreadDetailArguments({required this.threadId});
@override
List<Object?> get props => [threadId];
}
@@ -0,0 +1,54 @@
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/account_id.dart';
import 'package:jmap_dart_client/jmap/mail/email/email.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/thread_detail/domain/state/get_thread_by_id_state.dart';
import 'package:tmail_ui_user/features/thread_detail/domain/usecases/get_thread_by_id_interactor.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/extension/handle_get_email_ids_by_thread_id_success.dart';
import 'package:tmail_ui_user/features/thread_detail/presentation/model/thread_detail_arguments.dart';
class ThreadDetailController extends BaseController {
final ThreadDetailArguments arguments;
final GetThreadByIdInteractor _getEmailIdsByThreadIdInteractor;
ThreadDetailController(
this.arguments,
this._getEmailIdsByThreadIdInteractor,
);
final emailIds = <EmailId>[].obs;
final mailboxDashBoardController = Get.find<MailboxDashBoardController>();
AccountId? get accountId => mailboxDashBoardController.accountId.value;
@override
void onInit() {
super.onInit();
if (accountId != null) {
consumeState(_getEmailIdsByThreadIdInteractor.execute(
arguments.threadId,
accountId!,
));
}
}
@override
void handleSuccessViewState(success) {
if (success is GetThreadByIdSuccess) {
handleGetEmailIdsByThreadIdSuccess(success);
} else {
super.handleSuccessViewState(success);
}
}
@override
void handleFailureViewState(failure) {
if (failure is GetThreadByIdFailure) {
// TODO: handle failure
return;
}
super.handleFailureViewState(failure);
}
}