From 500767ce7c1994e48ea5335c3482ccbe1046857f Mon Sep 17 00:00:00 2001 From: dab246 Date: Thu, 10 Aug 2023 18:47:36 +0700 Subject: [PATCH] TF-2078 Hide mailbox loading bar when change state email (cherry picked from commit 50fa29b2cd403dd3618cf6723e1a70e00c1e7a20) --- .../domain/state/get_all_mailboxes_state.dart | 2 ++ .../domain/state/search_mailbox_state.dart | 2 +- .../usecases/get_all_mailbox_interactor.dart | 2 +- .../presentation/base_mailbox_view.dart | 9 ----- .../mailbox/presentation/mailbox_view.dart | 4 ++- .../presentation/mailbox_view_web.dart | 4 ++- .../mailbox_loading_bar_widget_styles.dart | 6 ++++ .../widgets/mailbox_loading_bar_widget.dart | 33 +++++++++++++++++++ 8 files changed, 49 insertions(+), 13 deletions(-) create mode 100644 lib/features/mailbox/presentation/styles/mailbox_loading_bar_widget_styles.dart create mode 100644 lib/features/mailbox/presentation/widgets/mailbox_loading_bar_widget.dart diff --git a/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart b/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart index eccd11059..3cb2486a6 100644 --- a/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart +++ b/lib/features/mailbox/domain/state/get_all_mailboxes_state.dart @@ -2,6 +2,8 @@ import 'package:core/core.dart'; import 'package:jmap_dart_client/jmap/core/state.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; +class GetAllMailboxLoading extends LoadingState {} + class GetAllMailboxSuccess extends UIState { final List mailboxList; final State? currentMailboxState; diff --git a/lib/features/mailbox/domain/state/search_mailbox_state.dart b/lib/features/mailbox/domain/state/search_mailbox_state.dart index 33b1c973e..d7af4e09d 100644 --- a/lib/features/mailbox/domain/state/search_mailbox_state.dart +++ b/lib/features/mailbox/domain/state/search_mailbox_state.dart @@ -2,7 +2,7 @@ import 'package:core/presentation/state/failure.dart'; import 'package:core/presentation/state/success.dart'; import 'package:model/mailbox/presentation_mailbox.dart'; -class LoadingSearchMailbox extends UIState {} +class LoadingSearchMailbox extends LoadingState {} class SearchMailboxSuccess extends UIState { diff --git a/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart b/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart index 3f58fbea6..9bedcc054 100644 --- a/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart +++ b/lib/features/mailbox/domain/usecases/get_all_mailbox_interactor.dart @@ -15,7 +15,7 @@ class GetAllMailboxInteractor { Stream> execute(Session session, AccountId accountId, {Properties? properties}) async* { try { - yield Right(LoadingState()); + yield Right(GetAllMailboxLoading()); yield* _mailboxRepository .getAllMailbox( diff --git a/lib/features/mailbox/presentation/base_mailbox_view.dart b/lib/features/mailbox/presentation/base_mailbox_view.dart index 73bc0e1d1..538dc5d75 100644 --- a/lib/features/mailbox/presentation/base_mailbox_view.dart +++ b/lib/features/mailbox/presentation/base_mailbox_view.dart @@ -1,6 +1,5 @@ import 'package:core/presentation/extensions/color_extension.dart'; import 'package:core/presentation/resources/image_paths.dart'; -import 'package:core/presentation/state/success.dart'; import 'package:core/presentation/utils/responsive_utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -30,12 +29,4 @@ abstract class BaseMailboxView extends GetWidget const Divider(color: AppColor.colorDividerMailbox, height: 1) ]); } - - Widget buildLoadingView() { - return Obx(() => controller.viewState.value.fold( - (failure) => const SizedBox.shrink(), - (success) => success is LoadingState - ? Padding(padding: const EdgeInsets.only(top: 16), child: loadingWidget) - : const SizedBox.shrink())); - } } \ No newline at end of file diff --git a/lib/features/mailbox/presentation/mailbox_view.dart b/lib/features/mailbox/presentation/mailbox_view.dart index ff36f87fb..9025a6384 100644 --- a/lib/features/mailbox/presentation/mailbox_view.dart +++ b/lib/features/mailbox/presentation/mailbox_view.dart @@ -10,6 +10,8 @@ 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/widgets/bottom_bar_selection_mailbox_widget.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_item_widget.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_loading_bar_widget.dart'; import 'package:tmail_ui_user/features/mailbox/presentation/widgets/sending_queue_mailbox_widget.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/dashboard_routes.dart'; import 'package:tmail_ui_user/features/quotas/presentation/quotas_view.dart'; @@ -166,7 +168,7 @@ class MailboxView extends BaseMailboxView { } return buildUserInformation(context); }), - buildLoadingView(), + Obx(() => MailboxLoadingBarWidget(viewState: controller.viewState.value)), AppConfig.appGridDashboardAvailable ? buildAppGridDashboard(context, responsiveUtils, imagePaths, controller) : const SizedBox.shrink(), diff --git a/lib/features/mailbox/presentation/mailbox_view_web.dart b/lib/features/mailbox/presentation/mailbox_view_web.dart index 2eb00e748..3d1e121df 100644 --- a/lib/features/mailbox/presentation/mailbox_view_web.dart +++ b/lib/features/mailbox/presentation/mailbox_view_web.dart @@ -9,6 +9,8 @@ import 'package:tmail_ui_user/features/mailbox/presentation/base_mailbox_view.da 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/mailbox/presentation/widgets/mailbox_item_widget.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_folder_tile_builder.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/widgets/mailbox_loading_bar_widget.dart'; import 'package:tmail_ui_user/features/quotas/presentation/quotas_view.dart'; import 'package:tmail_ui_user/main/localizations/app_localizations.dart'; import 'package:tmail_ui_user/main/utils/app_config.dart'; @@ -100,7 +102,7 @@ class MailboxView extends BaseMailboxView { child: Column(children: [ if (!responsiveUtils.isDesktop(context)) buildUserInformation(context), - buildLoadingView(), + Obx(() => MailboxLoadingBarWidget(viewState: controller.viewState.value)), AppConfig.appGridDashboardAvailable && responsiveUtils.isWebNotDesktop(context) ? buildAppGridDashboard(context, responsiveUtils, imagePaths, controller) : const SizedBox.shrink(), diff --git a/lib/features/mailbox/presentation/styles/mailbox_loading_bar_widget_styles.dart b/lib/features/mailbox/presentation/styles/mailbox_loading_bar_widget_styles.dart new file mode 100644 index 000000000..0dfb2d271 --- /dev/null +++ b/lib/features/mailbox/presentation/styles/mailbox_loading_bar_widget_styles.dart @@ -0,0 +1,6 @@ + +import 'package:flutter/material.dart'; + +class MailboxLoadingBarWidgetStyles { + static const EdgeInsetsGeometry padding = EdgeInsetsDirectional.only(top: 16); +} \ No newline at end of file diff --git a/lib/features/mailbox/presentation/widgets/mailbox_loading_bar_widget.dart b/lib/features/mailbox/presentation/widgets/mailbox_loading_bar_widget.dart new file mode 100644 index 000000000..32f19a4dd --- /dev/null +++ b/lib/features/mailbox/presentation/widgets/mailbox_loading_bar_widget.dart @@ -0,0 +1,33 @@ +import 'package:core/presentation/state/failure.dart'; +import 'package:core/presentation/state/success.dart'; +import 'package:dartz/dartz.dart'; +import 'package:flutter/material.dart'; +import 'package:tmail_ui_user/features/base/widget/cupertino_loading_widget.dart'; +import 'package:tmail_ui_user/features/mailbox/domain/state/get_all_mailboxes_state.dart'; +import 'package:tmail_ui_user/features/mailbox/presentation/styles/mailbox_loading_bar_widget_styles.dart'; + +class MailboxLoadingBarWidget extends StatelessWidget { + + final Either viewState; + + const MailboxLoadingBarWidget({ + super.key, + required this.viewState, + }); + + @override + Widget build(BuildContext context) { + return viewState.fold( + (failure) => const SizedBox.shrink(), + (success) { + if (success is GetAllMailboxLoading) { + return const Padding( + padding: MailboxLoadingBarWidgetStyles.padding, + child: CupertinoLoadingWidget()); + } else { + return const SizedBox.shrink(); + } + } + ); + } +}