diff --git a/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_action_builder.dart b/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_action_builder.dart index 6d715f908..f747850a2 100644 --- a/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_action_builder.dart +++ b/core/lib/presentation/views/bottom_popup/cupertino_action_sheet_action_builder.dart @@ -15,10 +15,13 @@ abstract class CupertinoActionSheetActionBuilder { @protected OnCupertinoActionSheetActionClick? onCupertinoActionSheetActionClick; - CupertinoActionSheetActionBuilder(this.key, this.actionIcon, this.actionName); + CupertinoActionSheetActionBuilder( + this.key, + this.actionIcon, + this.actionName, + ); - void onActionClick( - OnCupertinoActionSheetActionClick onCupertinoActionSheetActionClick) { + void onActionClick(OnCupertinoActionSheetActionClick onCupertinoActionSheetActionClick) { this.onCupertinoActionSheetActionClick = onCupertinoActionSheetActionClick; } diff --git a/lib/features/manage_account/data/network/manage_account_api.dart b/lib/features/manage_account/data/network/manage_account_api.dart index a0ca40352..a59aa930b 100644 --- a/lib/features/manage_account/data/network/manage_account_api.dart +++ b/lib/features/manage_account/data/network/manage_account_api.dart @@ -120,19 +120,17 @@ class ManageAccountAPI { Future> getListTMailRule(AccountId accountId) async { final processingInvocation = ProcessingInvocation(); - final requestBuilder = - JmapRequestBuilder(_httpClient, processingInvocation); + final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation); final getRuleFilterMethod = GetRuleFilterMethod( accountId, ); - final getRuleFilterInvocation = - requestBuilder.invocation(getRuleFilterMethod); + final getRuleFilterInvocation = requestBuilder.invocation(getRuleFilterMethod); final response = await (requestBuilder - ..usings(getRuleFilterMethod.requiredCapabilities)) - .build() - .execute(); + ..usings(getRuleFilterMethod.requiredCapabilities)) + .build() + .execute(); final result = response.parse( getRuleFilterInvocation.methodCallId, diff --git a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart index 1ace36c77..c20348215 100644 --- a/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart +++ b/lib/features/manage_account/presentation/email_rules/email_rules_controller.dart @@ -18,14 +18,9 @@ class EmailRulesController extends BaseController { Get.find(); final GetAllRulesInteractor _getAllRulesInteractor; final _imagePaths = Get.find(); - late Worker accountIdWorker; EmailRulesController(this._getAllRulesInteractor); - void _clearWorker() { - accountIdWorker.call(); - } - @override void onDone() { viewState.value.fold((failure) {}, (success) { @@ -46,12 +41,6 @@ class EmailRulesController extends BaseController { super.onInit(); } - @override - void onClose() { - _clearWorker(); - super.onClose(); - } - void goToCreateNewRule() { //TODO: goToCreateNewRule } diff --git a/lib/features/manage_account/presentation/email_rules/email_rules_view.dart b/lib/features/manage_account/presentation/email_rules/email_rules_view.dart index 9935c89d4..ca4ddd3a4 100644 --- a/lib/features/manage_account/presentation/email_rules/email_rules_view.dart +++ b/lib/features/manage_account/presentation/email_rules/email_rules_view.dart @@ -57,8 +57,8 @@ class EmailRulesView extends GetWidget with AppLoaderMixin (failure) => const SizedBox.shrink(), (success) => success is LoadingState ? Padding( - padding: const EdgeInsets.only(bottom: 24), - child: loadingWidget) + padding: const EdgeInsets.only(bottom: 24), + child: loadingWidget) : const SizedBox.shrink() )); } diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart index eef1f1002..98b81fc69 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_controller.dart @@ -7,11 +7,13 @@ import 'package:jmap_dart_client/jmap/account_id.dart'; import 'package:jmap_dart_client/jmap/core/session/session.dart'; import 'package:model/model.dart'; import 'package:package_info_plus/package_info_plus.dart'; +import 'package:rule_filter/rule_filter/capability_rule_filter.dart'; import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/delete_authority_oidc_interactor.dart'; import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/domain/state/get_user_profile_state.dart'; import 'package:tmail_ui_user/features/manage_account/domain/usecases/log_out_oidc_interactor.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.dart'; import 'package:tmail_ui_user/main/routes/app_routes.dart'; @@ -28,7 +30,7 @@ class ManageAccountDashBoardController extends ReloadableController { final accountId = Rxn(); final accountMenuItemSelected = AccountMenuItem.profiles.obs; - Session? sessionCurrent; + final sessionCurrent = Rxn(); ManageAccountDashBoardController( LogoutOidcInteractor logoutOidcInteractor, @@ -63,7 +65,7 @@ class ManageAccountDashBoardController extends ReloadableController { @override void handleReloaded(Session session) { - sessionCurrent = session; + sessionCurrent.value = session; accountId.value = session.accounts.keys.first; _getUserProfile(); injectAutoCompleteBindings(); @@ -73,8 +75,8 @@ class ManageAccountDashBoardController extends ReloadableController { final arguments = Get.arguments; log('ManageAccountDashBoardController::_getAccountIdAndUserProfile(): $arguments'); if (arguments is ManageAccountArguments) { - sessionCurrent = arguments.session; - accountId.value = sessionCurrent?.accounts.keys.first; + sessionCurrent.value = arguments.session; + accountId.value = sessionCurrent.value?.accounts.keys.first; _getUserProfile(); injectAutoCompleteBindings(); } else { @@ -91,7 +93,7 @@ class ManageAccountDashBoardController extends ReloadableController { } void _getUserProfile() async { - userProfile.value = sessionCurrent != null ? UserProfile(sessionCurrent!.username.value) : null; + userProfile.value = sessionCurrent.value != null ? UserProfile(sessionCurrent.value!.username.value) : null; } void openMenuDrawer() { @@ -105,6 +107,9 @@ class ManageAccountDashBoardController extends ReloadableController { bool get isMenuDrawerOpen => menuDrawerKey.currentState?.isDrawerOpen == true; void selectAccountMenuItem(AccountMenuItem newAccountMenuItem) { + if(newAccountMenuItem == AccountMenuItem.emailRules) { + EmailRulesBindings().dependencies(); + } accountMenuItemSelected.value = newAccountMenuItem; if (currentContext != null && !_responsiveUtils.isDesktop(currentContext!)) { closeMenuDrawer(); @@ -113,7 +118,7 @@ class ManageAccountDashBoardController extends ReloadableController { void goToSettings() { pushAndPop(AppRoutes.MANAGE_ACCOUNT, - arguments: ManageAccountArguments(sessionCurrent)); + arguments: ManageAccountArguments(sessionCurrent.value)); } void backToMailboxDashBoard(BuildContext context) { @@ -127,4 +132,7 @@ class ManageAccountDashBoardController extends ReloadableController { pushAndPopAll(AppRoutes.MAILBOX_DASHBOARD, arguments: sessionCurrent); } } + + bool checkAvailableRuleFilterInSession() => sessionCurrent.value?.capabilities.containsKey(capabilityRuleFilter) ?? false; + } \ No newline at end of file diff --git a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart index 39a09301a..1012a4219 100644 --- a/lib/features/manage_account/presentation/manage_account_dashboard_view.dart +++ b/lib/features/manage_account/presentation/manage_account_dashboard_view.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:get/get.dart'; import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/mixin/user_setting_popup_menu_mixin.dart'; +import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_bindings.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/email_rules_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_view.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; @@ -148,7 +149,11 @@ class ManageAccountDashBoardView extends GetWidget(); + final _responsiveUtils = Get.find(); - final listAccountMenuItem = [ + late Worker sessionWorker; + + final listAccountMenuItem = RxList([ AccountMenuItem.profiles, - AccountMenuItem.emailRules, AccountMenuItem.languageAndRegion, - ]; + ]); + + void _initWorker() { + sessionWorker = ever(dashBoardController.sessionCurrent, (_) { + _createListAccountMenuItemWithEmailRule(); + }); + } + + void _clearWorker() { + sessionWorker.call(); + } + + @override + void onInit() { + _initWorker(); + _createListAccountMenuItemWithEmailRule(); + super.onInit(); + } + + _createListAccountMenuItemWithEmailRule(){ + if (dashBoardController.checkAvailableRuleFilterInSession()) { + listAccountMenuItem.clear(); + listAccountMenuItem.addAll([ + AccountMenuItem.profiles, + AccountMenuItem.emailRules, + AccountMenuItem.languageAndRegion, + ]); + } + } + + @override + void onClose() { + _clearWorker(); + super.onClose(); + } @override void onDone() { diff --git a/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart b/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart index d8c4a25fe..16b816e66 100644 --- a/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart +++ b/lib/features/manage_account/presentation/menu/manage_account_menu_view.dart @@ -77,19 +77,21 @@ class ManageAccountMenuView extends GetWidget { AppLocalizations.of(context).manage_account, style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))), const SizedBox(height: 12), - ListView.builder( - padding: const EdgeInsets.only(left: 16, right: 8), - key: const Key('list_manage_account_property'), - shrinkWrap: true, - itemCount: controller.listAccountMenuItem.length, - itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder( - context, - _imagePaths, - _responsiveUtils, - controller.listAccountMenuItem[index], - controller.dashBoardController.accountMenuItemSelected.value, - onSelectAccountMenuItemAction: (newAccountMenuItem) => - controller.selectAccountMenuItem(newAccountMenuItem)))), + Obx( + () => ListView.builder( + padding: const EdgeInsets.only(left: 16, right: 8), + key: const Key('list_manage_account_property'), + shrinkWrap: true, + itemCount: controller.listAccountMenuItem.length, + itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder( + context, + _imagePaths, + _responsiveUtils, + controller.listAccountMenuItem[index], + controller.dashBoardController.accountMenuItemSelected.value, + onSelectAccountMenuItemAction: (newAccountMenuItem) => + controller.selectAccountMenuItem(newAccountMenuItem)))), + ), const Padding( padding: EdgeInsets.symmetric(vertical: 16), child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), diff --git a/lib/features/manage_account/presentation/profiles/profiles_bindings.dart b/lib/features/manage_account/presentation/profiles/profiles_bindings.dart index 91b905a2c..6bfdb5ae1 100644 --- a/lib/features/manage_account/presentation/profiles/profiles_bindings.dart +++ b/lib/features/manage_account/presentation/profiles/profiles_bindings.dart @@ -10,7 +10,6 @@ class ProfileBindings extends BaseBindings { void dependencies() { super.dependencies(); IdentitiesBindings().dependencies(); - EmailRulesBindings().dependencies(); } @override diff --git a/lib/l10n/intl_messages.arb b/lib/l10n/intl_messages.arb index dacf67aa7..110627d65 100644 --- a/lib/l10n/intl_messages.arb +++ b/lib/l10n/intl_messages.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2022-08-08T14:35:21.345792", + "@@last_modified": "2022-08-09T16:48:03.746319", "initializing_data": "Initializing data...", "@initializing_data": { "type": "text", diff --git a/rule_filter/lib/rule_filter/rule_filter_id.dart b/rule_filter/lib/rule_filter/rule_filter_id.dart index a35c3edba..37a77bbcc 100644 --- a/rule_filter/lib/rule_filter/rule_filter_id.dart +++ b/rule_filter/lib/rule_filter/rule_filter_id.dart @@ -14,7 +14,6 @@ enum RuleFilterIdType { @RuleFilterIdConverter() @IdConverter() -@JsonSerializable() class RuleFilterId with EquatableMixin { final Id id; diff --git a/rule_filter/lib/rule_filter/rule_id.dart b/rule_filter/lib/rule_filter/rule_id.dart index 580efa7f7..7593811b9 100644 --- a/rule_filter/lib/rule_filter/rule_id.dart +++ b/rule_filter/lib/rule_filter/rule_id.dart @@ -3,7 +3,6 @@ import 'package:jmap_dart_client/http/converter/id_converter.dart'; import 'package:jmap_dart_client/jmap/core/id.dart'; import 'package:json_annotation/json_annotation.dart'; -@JsonSerializable() @IdConverter() class RuleId with EquatableMixin { final Id id;