import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:dartz/dartz.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:model/mailbox/select_mode.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/delete_credential_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/domain/constants/mailbox_constants.dart'; import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mailbox_dashboard_controller.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; class MailboxController extends BaseController { final mailboxDashBoardController = Get.find(); final GetAllMailboxInteractor _getAllMailboxInteractor; final DeleteCredentialInteractor _deleteCredentialInteractor; final TreeBuilder _treeBuilder; final ResponsiveUtils responsiveUtils; final folderMailboxTree = MailboxTree(MailboxNode.root()).obs; MailboxController( this._getAllMailboxInteractor, this._deleteCredentialInteractor, this._treeBuilder, this.responsiveUtils ); @override void onReady() { super.onReady(); mailboxDashBoardController.accountId.listen((accountId) { if (accountId != null) { getAllMailboxAction(accountId); } }); } @override void dispose() { super.dispose(); mailboxDashBoardController.accountId.close(); } void refreshGetAllMailboxAction() { final accountId = mailboxDashBoardController.accountId.value; if (accountId != null) { getAllMailboxAction(accountId); } } void getAllMailboxAction(AccountId accountId) async { consumeState(_getAllMailboxInteractor.execute(accountId)); } @override void onData(Either newState) { super.onData(newState); newState.map((success) { if (success is GetAllMailboxSuccess) { _buildTree(success.folderMailboxList); } }); } @override void onDone() { viewState.value.map((success) { if (success is GetAllMailboxSuccess) { _setUpMapMailboxIdDefault(success.defaultMailboxList); } }); } @override void onError(error) {} void _buildTree(List folderMailboxList) async { folderMailboxTree.value = await _treeBuilder.generateMailboxTree(folderMailboxList); } void _setUpMapMailboxIdDefault(List defaultMailboxList) { defaultMailboxList.forEach((presentationMailbox) { if (presentationMailbox.role == PresentationMailbox.roleInbox) { mailboxDashBoardController.setSelectedMailbox(presentationMailbox); } mailboxDashBoardController.addMailboxIdToMap(presentationMailbox.role!, presentationMailbox.id); }); } SelectMode getSelectMode(PresentationMailbox presentationMailbox, PresentationMailbox? selectedMailbox) { return presentationMailbox.id == selectedMailbox?.id ? SelectMode.ACTIVE : SelectMode.INACTIVE; } void selectMailbox( BuildContext context, PresentationMailbox presentationMailboxSelected ) { mailboxDashBoardController.setSelectedMailbox(presentationMailboxSelected); if (responsiveUtils.isMobile(context)) { mailboxDashBoardController.closeDrawer(); } } void _deleteCredential() async { await _deleteCredentialInteractor.execute(); } void closeMailboxScreen() { _deleteCredential(); Get.offAllNamed(AppRoutes.LOGIN); } }