add check availble filter rule in session

This commit is contained in:
ManhNTX
2022-08-09 13:19:44 +07:00
committed by Dat H. Pham
parent 2178b8f313
commit 900af08921
12 changed files with 91 additions and 50 deletions
@@ -15,10 +15,13 @@ abstract class CupertinoActionSheetActionBuilder<T> {
@protected @protected
OnCupertinoActionSheetActionClick<T>? onCupertinoActionSheetActionClick; OnCupertinoActionSheetActionClick<T>? onCupertinoActionSheetActionClick;
CupertinoActionSheetActionBuilder(this.key, this.actionIcon, this.actionName); CupertinoActionSheetActionBuilder(
this.key,
this.actionIcon,
this.actionName,
);
void onActionClick( void onActionClick(OnCupertinoActionSheetActionClick<T> onCupertinoActionSheetActionClick) {
OnCupertinoActionSheetActionClick<T> onCupertinoActionSheetActionClick) {
this.onCupertinoActionSheetActionClick = onCupertinoActionSheetActionClick; this.onCupertinoActionSheetActionClick = onCupertinoActionSheetActionClick;
} }
@@ -120,19 +120,17 @@ class ManageAccountAPI {
Future<List<TMailRule>> getListTMailRule(AccountId accountId) async { Future<List<TMailRule>> getListTMailRule(AccountId accountId) async {
final processingInvocation = ProcessingInvocation(); final processingInvocation = ProcessingInvocation();
final requestBuilder = final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
JmapRequestBuilder(_httpClient, processingInvocation);
final getRuleFilterMethod = GetRuleFilterMethod( final getRuleFilterMethod = GetRuleFilterMethod(
accountId, accountId,
); );
final getRuleFilterInvocation = final getRuleFilterInvocation = requestBuilder.invocation(getRuleFilterMethod);
requestBuilder.invocation(getRuleFilterMethod);
final response = await (requestBuilder final response = await (requestBuilder
..usings(getRuleFilterMethod.requiredCapabilities)) ..usings(getRuleFilterMethod.requiredCapabilities))
.build() .build()
.execute(); .execute();
final result = response.parse<GetRuleFilterResponse>( final result = response.parse<GetRuleFilterResponse>(
getRuleFilterInvocation.methodCallId, getRuleFilterInvocation.methodCallId,
@@ -18,14 +18,9 @@ class EmailRulesController extends BaseController {
Get.find<ManageAccountDashBoardController>(); Get.find<ManageAccountDashBoardController>();
final GetAllRulesInteractor _getAllRulesInteractor; final GetAllRulesInteractor _getAllRulesInteractor;
final _imagePaths = Get.find<ImagePaths>(); final _imagePaths = Get.find<ImagePaths>();
late Worker accountIdWorker;
EmailRulesController(this._getAllRulesInteractor); EmailRulesController(this._getAllRulesInteractor);
void _clearWorker() {
accountIdWorker.call();
}
@override @override
void onDone() { void onDone() {
viewState.value.fold((failure) {}, (success) { viewState.value.fold((failure) {}, (success) {
@@ -46,12 +41,6 @@ class EmailRulesController extends BaseController {
super.onInit(); super.onInit();
} }
@override
void onClose() {
_clearWorker();
super.onClose();
}
void goToCreateNewRule() { void goToCreateNewRule() {
//TODO: goToCreateNewRule //TODO: goToCreateNewRule
} }
@@ -57,8 +57,8 @@ class EmailRulesView extends GetWidget<EmailRulesController> with AppLoaderMixin
(failure) => const SizedBox.shrink(), (failure) => const SizedBox.shrink(),
(success) => success is LoadingState (success) => success is LoadingState
? Padding( ? Padding(
padding: const EdgeInsets.only(bottom: 24), padding: const EdgeInsets.only(bottom: 24),
child: loadingWidget) child: loadingWidget)
: const SizedBox.shrink() : const SizedBox.shrink()
)); ));
} }
@@ -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:jmap_dart_client/jmap/core/session/session.dart';
import 'package:model/model.dart'; import 'package:model/model.dart';
import 'package:package_info_plus/package_info_plus.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/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/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/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/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/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/account_menu_item.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/manage_account_arguments.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'; import 'package:tmail_ui_user/main/routes/app_routes.dart';
@@ -28,7 +30,7 @@ class ManageAccountDashBoardController extends ReloadableController {
final accountId = Rxn<AccountId>(); final accountId = Rxn<AccountId>();
final accountMenuItemSelected = AccountMenuItem.profiles.obs; final accountMenuItemSelected = AccountMenuItem.profiles.obs;
Session? sessionCurrent; final sessionCurrent = Rxn<Session>();
ManageAccountDashBoardController( ManageAccountDashBoardController(
LogoutOidcInteractor logoutOidcInteractor, LogoutOidcInteractor logoutOidcInteractor,
@@ -63,7 +65,7 @@ class ManageAccountDashBoardController extends ReloadableController {
@override @override
void handleReloaded(Session session) { void handleReloaded(Session session) {
sessionCurrent = session; sessionCurrent.value = session;
accountId.value = session.accounts.keys.first; accountId.value = session.accounts.keys.first;
_getUserProfile(); _getUserProfile();
injectAutoCompleteBindings(); injectAutoCompleteBindings();
@@ -73,8 +75,8 @@ class ManageAccountDashBoardController extends ReloadableController {
final arguments = Get.arguments; final arguments = Get.arguments;
log('ManageAccountDashBoardController::_getAccountIdAndUserProfile(): $arguments'); log('ManageAccountDashBoardController::_getAccountIdAndUserProfile(): $arguments');
if (arguments is ManageAccountArguments) { if (arguments is ManageAccountArguments) {
sessionCurrent = arguments.session; sessionCurrent.value = arguments.session;
accountId.value = sessionCurrent?.accounts.keys.first; accountId.value = sessionCurrent.value?.accounts.keys.first;
_getUserProfile(); _getUserProfile();
injectAutoCompleteBindings(); injectAutoCompleteBindings();
} else { } else {
@@ -91,7 +93,7 @@ class ManageAccountDashBoardController extends ReloadableController {
} }
void _getUserProfile() async { 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() { void openMenuDrawer() {
@@ -105,6 +107,9 @@ class ManageAccountDashBoardController extends ReloadableController {
bool get isMenuDrawerOpen => menuDrawerKey.currentState?.isDrawerOpen == true; bool get isMenuDrawerOpen => menuDrawerKey.currentState?.isDrawerOpen == true;
void selectAccountMenuItem(AccountMenuItem newAccountMenuItem) { void selectAccountMenuItem(AccountMenuItem newAccountMenuItem) {
if(newAccountMenuItem == AccountMenuItem.emailRules) {
EmailRulesBindings().dependencies();
}
accountMenuItemSelected.value = newAccountMenuItem; accountMenuItemSelected.value = newAccountMenuItem;
if (currentContext != null && !_responsiveUtils.isDesktop(currentContext!)) { if (currentContext != null && !_responsiveUtils.isDesktop(currentContext!)) {
closeMenuDrawer(); closeMenuDrawer();
@@ -113,7 +118,7 @@ class ManageAccountDashBoardController extends ReloadableController {
void goToSettings() { void goToSettings() {
pushAndPop(AppRoutes.MANAGE_ACCOUNT, pushAndPop(AppRoutes.MANAGE_ACCOUNT,
arguments: ManageAccountArguments(sessionCurrent)); arguments: ManageAccountArguments(sessionCurrent.value));
} }
void backToMailboxDashBoard(BuildContext context) { void backToMailboxDashBoard(BuildContext context) {
@@ -127,4 +132,7 @@ class ManageAccountDashBoardController extends ReloadableController {
pushAndPopAll(AppRoutes.MAILBOX_DASHBOARD, arguments: sessionCurrent); pushAndPopAll(AppRoutes.MAILBOX_DASHBOARD, arguments: sessionCurrent);
} }
} }
bool checkAvailableRuleFilterInSession() => sessionCurrent.value?.capabilities.containsKey(capabilityRuleFilter) ?? false;
} }
@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart'; import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.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/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/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/language_and_region/language_and_region_view.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
@@ -148,7 +149,11 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
case AccountMenuItem.languageAndRegion: case AccountMenuItem.languageAndRegion:
return LanguageAndRegionView(); return LanguageAndRegionView();
case AccountMenuItem.emailRules: case AccountMenuItem.emailRules:
return EmailRulesView(); if(controller.checkAvailableRuleFilterInSession()){
return EmailRulesView();
} else {
return const SizedBox.shrink();
}
default: default:
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
@@ -1,6 +1,9 @@
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/base/base_controller.dart'; import 'package:tmail_ui_user/features/base/base_controller.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart'; import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.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/account_menu_item.dart';
@@ -8,12 +11,48 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account
class ManageAccountMenuController extends BaseController { class ManageAccountMenuController extends BaseController {
final dashBoardController = Get.find<ManageAccountDashBoardController>(); final dashBoardController = Get.find<ManageAccountDashBoardController>();
final _responsiveUtils = Get.find<ResponsiveUtils>();
final listAccountMenuItem = <AccountMenuItem>[ late Worker sessionWorker;
final listAccountMenuItem = RxList<AccountMenuItem>([
AccountMenuItem.profiles, AccountMenuItem.profiles,
AccountMenuItem.emailRules,
AccountMenuItem.languageAndRegion, 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 @override
void onDone() { void onDone() {
@@ -77,19 +77,21 @@ class ManageAccountMenuView extends GetWidget<ManageAccountMenuController> {
AppLocalizations.of(context).manage_account, AppLocalizations.of(context).manage_account,
style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))), style: const TextStyle(color: Colors.black, fontWeight: FontWeight.bold, fontSize: 17))),
const SizedBox(height: 12), const SizedBox(height: 12),
ListView.builder( Obx(
padding: const EdgeInsets.only(left: 16, right: 8), () => ListView.builder(
key: const Key('list_manage_account_property'), padding: const EdgeInsets.only(left: 16, right: 8),
shrinkWrap: true, key: const Key('list_manage_account_property'),
itemCount: controller.listAccountMenuItem.length, shrinkWrap: true,
itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder( itemCount: controller.listAccountMenuItem.length,
context, itemBuilder: (context, index) => Obx(() => AccountMenuItemTileBuilder(
_imagePaths, context,
_responsiveUtils, _imagePaths,
controller.listAccountMenuItem[index], _responsiveUtils,
controller.dashBoardController.accountMenuItemSelected.value, controller.listAccountMenuItem[index],
onSelectAccountMenuItemAction: (newAccountMenuItem) => controller.dashBoardController.accountMenuItemSelected.value,
controller.selectAccountMenuItem(newAccountMenuItem)))), onSelectAccountMenuItemAction: (newAccountMenuItem) =>
controller.selectAccountMenuItem(newAccountMenuItem)))),
),
const Padding( const Padding(
padding: EdgeInsets.symmetric(vertical: 16), padding: EdgeInsets.symmetric(vertical: 16),
child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)), child: Divider(color: AppColor.lineItemListColor, height: 0.5, thickness: 0.2)),
@@ -10,7 +10,6 @@ class ProfileBindings extends BaseBindings {
void dependencies() { void dependencies() {
super.dependencies(); super.dependencies();
IdentitiesBindings().dependencies(); IdentitiesBindings().dependencies();
EmailRulesBindings().dependencies();
} }
@override @override
+1 -1
View File
@@ -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": "Initializing data...",
"@initializing_data": { "@initializing_data": {
"type": "text", "type": "text",
@@ -14,7 +14,6 @@ enum RuleFilterIdType {
@RuleFilterIdConverter() @RuleFilterIdConverter()
@IdConverter() @IdConverter()
@JsonSerializable()
class RuleFilterId with EquatableMixin { class RuleFilterId with EquatableMixin {
final Id id; final Id id;
-1
View File
@@ -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:jmap_dart_client/jmap/core/id.dart';
import 'package:json_annotation/json_annotation.dart'; import 'package:json_annotation/json_annotation.dart';
@JsonSerializable()
@IdConverter() @IdConverter()
class RuleId with EquatableMixin { class RuleId with EquatableMixin {
final Id id; final Id id;