add check availble filter rule in session
This commit is contained in:
@@ -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,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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user