Add GetAll and Refresh mailbox interactor to BaseMailboxController
This commit is contained in:
+5
-1
@@ -1,4 +1,6 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/usecases/refresh_all_mailbox_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart';
|
||||
@@ -9,7 +11,9 @@ class MailboxVisibilityBindings extends Bindings {
|
||||
void dependencies() {
|
||||
Get.lazyPut(() => MailboxVisibilityController(
|
||||
Get.find<TreeBuilder>(),
|
||||
Get.find<VerifyNameInteractor>()
|
||||
Get.find<VerifyNameInteractor>(),
|
||||
Get.find<GetAllMailboxInteractor>(),
|
||||
Get.find<RefreshAllMailboxInteractor>(),
|
||||
));
|
||||
_bindingsUtils();
|
||||
}
|
||||
|
||||
+25
-29
@@ -3,11 +3,10 @@ import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/utils/app_toast.dart';
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:get/get.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/core/state.dart' as jmap;
|
||||
import 'package:jmap_dart_client/jmap/mail/mailbox/mailbox.dart';
|
||||
import 'package:model/mailbox/expand_mode.dart';
|
||||
@@ -30,13 +29,12 @@ import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_catego
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_tree_builder.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox_creator/domain/usecases/verify_name_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||
|
||||
class MailboxVisibilityController extends BaseMailboxController {
|
||||
GetAllMailboxInteractor? _getAllMailboxInteractor;
|
||||
RefreshAllMailboxInteractor? _refreshAllMailboxInteractor;
|
||||
SubscribeMailboxInteractor? _subscribeMailboxInteractor;
|
||||
SubscribeMultipleMailboxInteractor? _subscribeMultipleMailboxInteractor;
|
||||
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||
@@ -55,14 +53,19 @@ class MailboxVisibilityController extends BaseMailboxController {
|
||||
MailboxVisibilityController(
|
||||
TreeBuilder treeBuilder,
|
||||
VerifyNameInteractor verifyNameInteractor,
|
||||
) : super(treeBuilder, verifyNameInteractor);
|
||||
GetAllMailboxInteractor getAllMailboxInteractor,
|
||||
RefreshAllMailboxInteractor refreshAllMailboxInteractor
|
||||
) : super(
|
||||
treeBuilder,
|
||||
verifyNameInteractor,
|
||||
getAllMailboxInteractor: getAllMailboxInteractor,
|
||||
refreshAllMailboxInteractor: refreshAllMailboxInteractor
|
||||
);
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
try {
|
||||
_getAllMailboxInteractor = Get.find<GetAllMailboxInteractor>();
|
||||
_refreshAllMailboxInteractor = Get.find<RefreshAllMailboxInteractor>();
|
||||
_subscribeMailboxInteractor = Get.find<SubscribeMailboxInteractor>();
|
||||
_subscribeMultipleMailboxInteractor = Get.find<SubscribeMultipleMailboxInteractor>();
|
||||
} catch (e) {
|
||||
@@ -87,7 +90,6 @@ class MailboxVisibilityController extends BaseMailboxController {
|
||||
_handleUnsubscribeMultipleMailboxHasSomeSuccess(success);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -95,31 +97,16 @@ class MailboxVisibilityController extends BaseMailboxController {
|
||||
final _session = _accountDashBoardController.sessionCurrent.value;
|
||||
final _accountId = _accountDashBoardController.accountId.value;
|
||||
if(_session != null && _accountId != null) {
|
||||
getAllMailboxAction(_session, _accountId);
|
||||
getAllMailbox(_session, _accountId);
|
||||
}
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void getAllMailboxAction(Session session, AccountId accountId) async {
|
||||
if(_getAllMailboxInteractor != null){
|
||||
consumeState(_getAllMailboxInteractor!.execute(session, accountId));
|
||||
}
|
||||
}
|
||||
|
||||
void refreshMailboxChanges({jmap.State? currentMailboxState}) {
|
||||
log('MailboxVisibilityController::refreshMailboxChanges(): currentMailboxState: $currentMailboxState');
|
||||
final newMailboxState = currentMailboxState ?? _currentMailboxState;
|
||||
log('MailboxVisibilityController::refreshMailboxChanges(): newMailboxState: $newMailboxState');
|
||||
final session = _accountDashBoardController.sessionCurrent.value;
|
||||
final accountId = _accountDashBoardController.accountId.value;
|
||||
if (accountId != null && session != null && newMailboxState != null) {
|
||||
consumeState(_refreshAllMailboxInteractor!.execute(session, accountId, newMailboxState));
|
||||
}
|
||||
}
|
||||
|
||||
void _buildMailboxTreeHasSubscribed(List<PresentationMailbox> mailboxList) async {
|
||||
dispatchState(Right(LoadingBuildTreeMailboxVisibility()));
|
||||
final _mailboxList = mailboxList;
|
||||
await buildTree(_mailboxList);
|
||||
dispatchState(Right(BuildTreeMailboxVisibilitySuccess()));
|
||||
}
|
||||
|
||||
void _refreshMailboxTreeHasSubscribed(List<PresentationMailbox> mailboxList) async {
|
||||
@@ -187,7 +174,7 @@ class MailboxVisibilityController extends BaseMailboxController {
|
||||
_showToastSubscribeMailboxSuccess(subscribeMailboxSuccess.mailboxId);
|
||||
}
|
||||
|
||||
refreshMailboxChanges(currentMailboxState: subscribeMailboxSuccess.currentMailboxState);
|
||||
_refreshMailboxChanges(subscribeMailboxSuccess.currentEmailState);
|
||||
}
|
||||
|
||||
void _handleUnsubscribeMultipleMailboxHasSomeSuccess(SubscribeMultipleMailboxHasSomeSuccess subscribeMailboxSuccess) {
|
||||
@@ -198,7 +185,7 @@ class MailboxVisibilityController extends BaseMailboxController {
|
||||
);
|
||||
}
|
||||
|
||||
refreshMailboxChanges(currentMailboxState: subscribeMailboxSuccess.currentMailboxState);
|
||||
_refreshMailboxChanges(subscribeMailboxSuccess.currentEmailState);
|
||||
}
|
||||
|
||||
void _handleUnsubscribeMultipleMailboxAllSuccess(SubscribeMultipleMailboxAllSuccess subscribeMailboxSuccess) {
|
||||
@@ -209,7 +196,16 @@ class MailboxVisibilityController extends BaseMailboxController {
|
||||
);
|
||||
}
|
||||
|
||||
refreshMailboxChanges(currentMailboxState: subscribeMailboxSuccess.currentMailboxState);
|
||||
_refreshMailboxChanges(subscribeMailboxSuccess.currentEmailState);
|
||||
}
|
||||
|
||||
void _refreshMailboxChanges(jmap.State? currentEmailState) {
|
||||
final _session = _accountDashBoardController.sessionCurrent.value;
|
||||
final _accountId = _accountDashBoardController.accountId.value;
|
||||
final currentMailboxState = currentEmailState ?? _currentMailboxState;
|
||||
if (_session != null && _accountId != null && currentMailboxState != null) {
|
||||
refreshMailboxChanges(_session, _accountId, currentMailboxState);
|
||||
}
|
||||
}
|
||||
|
||||
void _showToastSubscribeMailboxSuccess(
|
||||
|
||||
+35
-18
@@ -1,3 +1,4 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/presentation/resources/image_paths.dart';
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
@@ -13,6 +14,7 @@ import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_categories.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_header_widget.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||
@@ -51,12 +53,12 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController> with
|
||||
children: [
|
||||
if (_responsiveUtils.isWebDesktop(context))...[
|
||||
const MailboxVisibilityHeaderWidget(),
|
||||
_buildLoadingView(),
|
||||
const Padding(
|
||||
padding: EdgeInsets.symmetric(vertical: 16),
|
||||
child: Divider(color: AppColor.colorDividerMailbox, height: 0.5, thickness: 0.2),
|
||||
),
|
||||
],
|
||||
_buildLoadingView(),
|
||||
Expanded(child: _buildListMailbox(context)),
|
||||
]
|
||||
),
|
||||
@@ -69,19 +71,34 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController> with
|
||||
Widget _buildLoadingView() {
|
||||
return Obx(() => controller.viewState.value.fold(
|
||||
(failure) => const SizedBox.shrink(),
|
||||
(success) => success is LoadingState
|
||||
? const Center(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 16),
|
||||
child: SizedBox(
|
||||
height: 24,
|
||||
width: 24,
|
||||
child: CupertinoActivityIndicator(
|
||||
color: AppColor.colorTextButton,
|
||||
),
|
||||
)),
|
||||
)
|
||||
: const SizedBox.shrink()));
|
||||
(success) {
|
||||
if (success is LoadingState) {
|
||||
return const Center(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 16),
|
||||
child: SizedBox(
|
||||
height: 24,
|
||||
width: 24,
|
||||
child: CupertinoActivityIndicator(
|
||||
color: AppColor.colorTextButton,
|
||||
),
|
||||
)),
|
||||
);
|
||||
} else if (success is LoadingBuildTreeMailboxVisibility) {
|
||||
return const Center(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(top: 16),
|
||||
child: SizedBox(
|
||||
height: 24,
|
||||
width: 24,
|
||||
child: CupertinoActivityIndicator(
|
||||
color: AppColor.colorTextButton,
|
||||
),
|
||||
)),
|
||||
);
|
||||
}
|
||||
return const SizedBox.shrink();
|
||||
}));
|
||||
}
|
||||
|
||||
Widget _buildListMailbox(BuildContext context) {
|
||||
@@ -182,15 +199,15 @@ class MailboxVisibilityView extends GetWidget<MailboxVisibilityController> with
|
||||
context,
|
||||
key: const Key('children_tree_mailbox_child'),
|
||||
isExpanded: mailboxNode.expandMode == ExpandMode.EXPAND,
|
||||
parent: Obx(() => controller.defaultMailboxIsNotEmpty ? (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode)
|
||||
parent: (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode)
|
||||
..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
||||
..addOnSubscribeMailboxActionClick((mailboxNode) => controller.subscribeMailbox(mailboxNode)))
|
||||
.build(context) : const SizedBox.shrink()) ,
|
||||
.build(context),
|
||||
children: _buildListChildTileWidget(context, mailboxNode)
|
||||
).build()
|
||||
: Obx(() => controller.defaultMailboxIsNotEmpty ? (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode)
|
||||
: (MailBoxVisibilityFolderTileBuilder(context, _imagePaths, mailboxNode, lastNode: lastNode)
|
||||
..addOnExpandFolderActionClick((mailboxNode) => controller.toggleMailboxFolder(mailboxNode))
|
||||
..addOnSubscribeMailboxActionClick((mailboxNode) => controller.subscribeMailbox(mailboxNode)))
|
||||
.build(context) : const SizedBox.shrink())).toList() ?? <Widget>[];
|
||||
.build(context)).toList() ?? <Widget>[];
|
||||
}
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
import 'package:core/presentation/state/success.dart';
|
||||
|
||||
class LoadingBuildTreeMailboxVisibility extends LoadingState {}
|
||||
|
||||
class BuildTreeMailboxVisibilitySuccess extends UIState {}
|
||||
+10
-12
@@ -5,11 +5,9 @@ import 'package:model/mailbox/expand_mode.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/domain/extensions/presentation_mailbox_extension.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_actions.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/model/mailbox_node.dart';
|
||||
import 'package:tmail_ui_user/features/mailbox/presentation/utils/mailbox_method_action_define.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
typedef OnExpandFolderActionClick = void Function(MailboxNode);
|
||||
typedef OnSubscribeMailboxActionClick = void Function(MailboxNode);
|
||||
|
||||
class MailBoxVisibilityFolderTileBuilder {
|
||||
final MailboxNode _mailboxNode;
|
||||
final BuildContext _context;
|
||||
@@ -17,8 +15,8 @@ class MailBoxVisibilityFolderTileBuilder {
|
||||
final MailboxNode? lastNode;
|
||||
final MailboxActions? mailboxActions;
|
||||
|
||||
OnSubscribeMailboxActionClick? _onSubscribeMailboxActionClick;
|
||||
OnExpandFolderActionClick? _onExpandFolderActionClick;
|
||||
OnClickExpandMailboxNodeAction? _onClickExpandMailboxNodeAction;
|
||||
OnClickSubscribeMailboxAction? _onClickSubscribeMailboxAction;
|
||||
bool isHoverItem = false;
|
||||
|
||||
MailBoxVisibilityFolderTileBuilder(
|
||||
@@ -29,12 +27,12 @@ class MailBoxVisibilityFolderTileBuilder {
|
||||
this.mailboxActions,
|
||||
});
|
||||
|
||||
void addOnExpandFolderActionClick(OnExpandFolderActionClick onExpandFolderActionClick) {
|
||||
_onExpandFolderActionClick = onExpandFolderActionClick;
|
||||
void addOnExpandFolderActionClick(OnClickExpandMailboxNodeAction onClickExpandMailboxNodeAction) {
|
||||
_onClickExpandMailboxNodeAction = onClickExpandMailboxNodeAction;
|
||||
}
|
||||
|
||||
void addOnSubscribeMailboxActionClick(OnSubscribeMailboxActionClick onSubscribeMailboxActionClick) {
|
||||
_onSubscribeMailboxActionClick = onSubscribeMailboxActionClick;
|
||||
void addOnSubscribeMailboxActionClick(OnClickSubscribeMailboxAction onClickSubscribeMailboxAction) {
|
||||
_onClickSubscribeMailboxAction = onClickSubscribeMailboxAction;
|
||||
}
|
||||
|
||||
Widget build(BuildContext context) => _buildMailboxItem(context);
|
||||
@@ -124,7 +122,7 @@ class MailBoxVisibilityFolderTileBuilder {
|
||||
tooltip: _mailboxNode.expandMode == ExpandMode.EXPAND
|
||||
? AppLocalizations.of(_context).collapse
|
||||
: AppLocalizations.of(_context).expand,
|
||||
onTap: () => _onExpandFolderActionClick?.call(_mailboxNode)),
|
||||
onTap: () => _onClickExpandMailboxNodeAction?.call(_mailboxNode)),
|
||||
],
|
||||
)
|
||||
else
|
||||
@@ -155,7 +153,7 @@ class MailBoxVisibilityFolderTileBuilder {
|
||||
tooltip: _mailboxNode.expandMode == ExpandMode.EXPAND
|
||||
? AppLocalizations.of(_context).collapse
|
||||
: AppLocalizations.of(_context).expand,
|
||||
onTap: () => _onExpandFolderActionClick?.call(_mailboxNode)),
|
||||
onTap: () => _onClickExpandMailboxNodeAction?.call(_mailboxNode)),
|
||||
],
|
||||
)
|
||||
else
|
||||
@@ -242,7 +240,7 @@ class MailBoxVisibilityFolderTileBuilder {
|
||||
|
||||
Widget _buildSubscribeMailboxItem(BuildContext context, MailboxNode _mailboxNode) {
|
||||
return InkWell(
|
||||
onTap: () => _onSubscribeMailboxActionClick?.call(_mailboxNode),
|
||||
onTap: () => _onClickSubscribeMailboxAction?.call(_mailboxNode),
|
||||
child: Text(
|
||||
_mailboxNode.item.isSubscribedMailbox
|
||||
? AppLocalizations.of(context).hide
|
||||
|
||||
Reference in New Issue
Block a user