From 062f444b86a9375849cd8b2e6777ec88d7a0cd9a Mon Sep 17 00:00:00 2001 From: dab246 Date: Fri, 17 Feb 2023 15:24:46 +0700 Subject: [PATCH] Add progress loading view when build tree --- .../presentation/mixin/mailbox_widget_mixin.dart | 3 +-- .../mailbox_visibility_controller.dart | 14 +++++++++++--- .../mailbox_visibility_view.dart | 3 ++- .../state/mailbox_visibility_state.dart | 5 +++++ .../mailbox_visibility_folder_tile_builder.dart | 2 +- 5 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart diff --git a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart index b5144d461..8468c4f6f 100644 --- a/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart +++ b/lib/features/mailbox/presentation/mixin/mailbox_widget_mixin.dart @@ -277,8 +277,7 @@ mixin MailboxWidgetMixin { EdgeInsets? padding } ) { - return Container( - color: Colors.transparent, + return Padding( padding: padding ?? EdgeInsets.only( top: 10, left: responsiveUtils.isDesktop(context) ? 0 : 16, diff --git a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart index 914e7678c..45a99ddb0 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_controller.dart @@ -12,6 +12,7 @@ import 'package:get/get.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'; +import 'package:model/mailbox/presentation_mailbox.dart'; import 'package:tmail_ui_user/features/base/base_mailbox_controller.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_action_state.dart'; import 'package:tmail_ui_user/features/mailbox/domain/model/mailbox_subscribe_state.dart'; @@ -29,6 +30,7 @@ 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'; @@ -68,13 +70,13 @@ class MailboxVisibilityController extends BaseMailboxController { @override void onData(Either newState) { super.onData(newState); - newState.fold((failure) => null, (success) async { + newState.fold((failure) => null, (success) { if (success is GetAllMailboxSuccess) { currentMailboxState = success.currentMailboxState; - await buildTree(success.mailboxList); + _handleBuildTree(success.mailboxList); } else if (success is RefreshChangesAllMailboxSuccess) { currentMailboxState = success.currentMailboxState; - await refreshTree(success.mailboxList); + refreshTree(success.mailboxList); } }); } @@ -102,6 +104,12 @@ class MailboxVisibilityController extends BaseMailboxController { super.onReady(); } + void _handleBuildTree(List mailboxList) async { + dispatchState(Right(LoadingBuildTreeMailboxVisibility())); + await buildTree(mailboxList); + dispatchState(Right(BuildTreeMailboxVisibilitySuccess())); + } + void subscribeMailbox(MailboxNode mailboxNode) { final _mailboxSubscribeState = mailboxNode.item.isSubscribedMailbox ? MailboxSubscribeState.disabled : MailboxSubscribeState.enabled; diff --git a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart index 5d7a6c3f5..e568ebfee 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/mailbox_visibility_view.dart @@ -12,6 +12,7 @@ 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/manage_account/presentation/base/setting_detail_view_builder.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/utils/mailbox_visibility_utils.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'; @@ -56,7 +57,7 @@ class MailboxVisibilityView extends GetWidget Widget _buildLoadingView() { return Obx(() => controller.viewState.value.fold( (failure) => const SizedBox.shrink(), - (success) => success is LoadingState + (success) => success is LoadingState || success is LoadingBuildTreeMailboxVisibility ? Padding(padding: const EdgeInsets.only(top: 16), child: loadingWidget) : const SizedBox.shrink())); } diff --git a/lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart b/lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart new file mode 100644 index 000000000..7925bdfbc --- /dev/null +++ b/lib/features/manage_account/presentation/mailbox_visibility/state/mailbox_visibility_state.dart @@ -0,0 +1,5 @@ +import 'package:core/presentation/state/success.dart'; + +class LoadingBuildTreeMailboxVisibility extends LoadingState {} + +class BuildTreeMailboxVisibilitySuccess extends UIState {} diff --git a/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart b/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart index 29ae46b99..d60f73f48 100644 --- a/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart +++ b/lib/features/manage_account/presentation/mailbox_visibility/widgets/mailbox_visibility_folder_tile_builder.dart @@ -62,7 +62,7 @@ class MailBoxVisibilityFolderTileBuilder extends StatelessWidget { _mailboxNode.expandMode == ExpandMode.EXPAND ? _imagePaths.icExpandFolder : _imagePaths.icCollapseFolder, - color: _mailboxNode.item.isSubscribedMailbox + color: _mailboxNode.item.allowedToDisplay ? AppColor.primaryColor : AppColor.colorIconUnSubscribedMailbox, fit: BoxFit.fill