fix: hide Storage section in settings menu when quota is empty
This commit is contained in:
+3
-1
@@ -1946,6 +1946,7 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
arguments: ManageAccountArguments(
|
arguments: ManageAccountArguments(
|
||||||
sessionCurrent,
|
sessionCurrent,
|
||||||
previousUri: RouteUtils.baseUri,
|
previousUri: RouteUtils.baseUri,
|
||||||
|
quota: octetsQuota.value,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -2020,7 +2021,8 @@ class MailboxDashBoardController extends ReloadableController
|
|||||||
arguments: ManageAccountArguments(
|
arguments: ManageAccountArguments(
|
||||||
sessionCurrent,
|
sessionCurrent,
|
||||||
menuSettingCurrent: AccountMenuItem.vacation,
|
menuSettingCurrent: AccountMenuItem.vacation,
|
||||||
previousUri: RouteUtils.baseUri
|
previousUri: RouteUtils.baseUri,
|
||||||
|
quota: octetsQuota.value,
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
+47
@@ -0,0 +1,47 @@
|
|||||||
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||||
|
import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_setting_capability_supported_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/exceptions/quotas_exception.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/extensions/list_quotas_extensions.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/state/get_quotas_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/use_case/get_quotas_interactor.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/presentation/quotas_interactor_bindings.dart';
|
||||||
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
|
|
||||||
|
extension ValidateStorageMenuVisibleExtension
|
||||||
|
on ManageAccountDashBoardController {
|
||||||
|
void injectQuotaBindings() {
|
||||||
|
if (isStorageCapabilitySupported) {
|
||||||
|
QuotasInteractorBindings().dependencies();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void getQuotas(AccountId? accountId) {
|
||||||
|
if (accountId == null) {
|
||||||
|
consumeState(
|
||||||
|
Stream.value(Left(GetQuotasFailure(NotFoundAccountIdException))),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
getQuotasInteractor = getBinding<GetQuotasInteractor>();
|
||||||
|
if (getQuotasInteractor == null || !isStorageCapabilitySupported) {
|
||||||
|
consumeState(
|
||||||
|
Stream.value(Left(GetQuotasFailure(QuotasNotSupportedException))),
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
consumeState(getQuotasInteractor!.execute(accountId));
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleGetQuotasSuccess(GetQuotasSuccess success) {
|
||||||
|
octetsQuota.value = success.quotas.octetsQuota;
|
||||||
|
}
|
||||||
|
|
||||||
|
void handleGetQuotasFailure() {
|
||||||
|
octetsQuota.value = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -9,6 +9,7 @@ import 'package:jmap_dart_client/jmap/account_id.dart';
|
|||||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
|
import 'package:jmap_dart_client/jmap/mail/vacation/vacation_response.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/quotas/quota.dart';
|
||||||
import 'package:model/model.dart';
|
import 'package:model/model.dart';
|
||||||
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||||
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
||||||
@@ -29,6 +30,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/email_rules/b
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/export_trace_log_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/export_trace_log_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_vacation_response_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/vacation_response_extension.dart';
|
||||||
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_storage_menu_visible_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/forward/bindings/forward_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/identities/identity_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/language_and_region/language_and_region_bindings.dart';
|
||||||
@@ -41,6 +43,8 @@ import 'package:tmail_ui_user/features/manage_account/presentation/preferences/b
|
|||||||
import 'package:tmail_ui_user/features/manage_account/presentation/storage/storage_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/storage/storage_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller_bindings.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_controller_bindings.dart';
|
||||||
import 'package:tmail_ui_user/features/paywall/presentation/paywall_controller.dart';
|
import 'package:tmail_ui_user/features/paywall/presentation/paywall_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/state/get_quotas_state.dart';
|
||||||
|
import 'package:tmail_ui_user/features/quotas/domain/use_case/get_quotas_interactor.dart';
|
||||||
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
import 'package:tmail_ui_user/main/error/capability_validator.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
||||||
@@ -55,14 +59,17 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
GetAllVacationInteractor? _getAllVacationInteractor;
|
GetAllVacationInteractor? _getAllVacationInteractor;
|
||||||
UpdateVacationInteractor? _updateVacationInteractor;
|
UpdateVacationInteractor? _updateVacationInteractor;
|
||||||
PaywallController? paywallController;
|
PaywallController? paywallController;
|
||||||
|
GetQuotasInteractor? getQuotasInteractor;
|
||||||
|
|
||||||
final accountId = Rxn<AccountId>();
|
final accountId = Rxn<AccountId>();
|
||||||
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
|
final accountMenuItemSelected = AccountMenuItem.profiles.obs;
|
||||||
final settingsPageLevel = SettingsPageLevel.universal.obs;
|
final settingsPageLevel = SettingsPageLevel.universal.obs;
|
||||||
final vacationResponse = Rxn<VacationResponse>();
|
final vacationResponse = Rxn<VacationResponse>();
|
||||||
final dashboardSettingAction = Rxn<UIAction>();
|
final dashboardSettingAction = Rxn<UIAction>();
|
||||||
|
final octetsQuota = Rxn<Quota>();
|
||||||
|
|
||||||
Uri? previousUri;
|
Uri? previousUri;
|
||||||
|
AccountMenuItem? selectedMenu;
|
||||||
int minInputLengthAutocomplete = AppConfig.defaultMinInputLengthAutocomplete;
|
int minInputLengthAutocomplete = AppConfig.defaultMinInputLengthAutocomplete;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -89,6 +96,8 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
_handleUpdateVacationSuccess(success);
|
_handleUpdateVacationSuccess(success);
|
||||||
} else if (success is ExportTraceLogSuccess) {
|
} else if (success is ExportTraceLogSuccess) {
|
||||||
handleExportTraceLogSuccess(success);
|
handleExportTraceLogSuccess(success);
|
||||||
|
} else if (success is GetQuotasSuccess) {
|
||||||
|
handleGetQuotasSuccess(success);
|
||||||
} else {
|
} else {
|
||||||
super.handleSuccessViewState(success);
|
super.handleSuccessViewState(success);
|
||||||
}
|
}
|
||||||
@@ -100,6 +109,8 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
handleExportTraceLogFailure(failure);
|
handleExportTraceLogFailure(failure);
|
||||||
} else if (failure is UpdateVacationFailure) {
|
} else if (failure is UpdateVacationFailure) {
|
||||||
setUpVacation(null);
|
setUpVacation(null);
|
||||||
|
} else if (failure is GetQuotasFailure) {
|
||||||
|
handleGetQuotasFailure();
|
||||||
} else {
|
} else {
|
||||||
super.handleFailureViewState(failure);
|
super.handleFailureViewState(failure);
|
||||||
}
|
}
|
||||||
@@ -108,7 +119,7 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
@override
|
@override
|
||||||
void handleReloaded(Session session) {
|
void handleReloaded(Session session) {
|
||||||
log('ManageAccountDashBoardController::handleReloaded:');
|
log('ManageAccountDashBoardController::handleReloaded:');
|
||||||
_setUpComponentsFromSession(session);
|
_setUpComponentsFromSession(session: session);
|
||||||
_getParametersRouter();
|
_getParametersRouter();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,16 +127,24 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
final arguments = Get.arguments;
|
final arguments = Get.arguments;
|
||||||
if (arguments is ManageAccountArguments) {
|
if (arguments is ManageAccountArguments) {
|
||||||
previousUri = arguments.previousUri;
|
previousUri = arguments.previousUri;
|
||||||
_setUpComponentsFromSession(arguments.session);
|
_setUpComponentsFromSession(
|
||||||
if (arguments.menuSettingCurrent != null) {
|
session: arguments.session,
|
||||||
selectAccountMenuItem(arguments.menuSettingCurrent!);
|
quota: arguments.quota,
|
||||||
|
);
|
||||||
|
selectedMenu = arguments.menuSettingCurrent;
|
||||||
|
if (selectedMenu != null && selectedMenu != AccountMenuItem.storage) {
|
||||||
|
selectAccountMenuItem(selectedMenu!);
|
||||||
}
|
}
|
||||||
} else if (PlatformInfo.isWeb) {
|
} else if (PlatformInfo.isWeb) {
|
||||||
|
selectedMenu = null;
|
||||||
reload();
|
reload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _setUpComponentsFromSession(Session? session) {
|
void _setUpComponentsFromSession({
|
||||||
|
Session? session,
|
||||||
|
Quota? quota,
|
||||||
|
}) {
|
||||||
sessionCurrent = session;
|
sessionCurrent = session;
|
||||||
accountId.value = session?.accountId;
|
accountId.value = session?.accountId;
|
||||||
synchronizeOwnEmailAddress(session?.getOwnEmailAddressOrEmpty() ?? '');
|
synchronizeOwnEmailAddress(session?.getOwnEmailAddressOrEmpty() ?? '');
|
||||||
@@ -136,6 +155,12 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
ownEmailAddress: ownEmailAddress.value,
|
ownEmailAddress: ownEmailAddress.value,
|
||||||
);
|
);
|
||||||
paywallController?.loadPaywallUrl();
|
paywallController?.loadPaywallUrl();
|
||||||
|
|
||||||
|
if (quota != null) {
|
||||||
|
octetsQuota.value = quota;
|
||||||
|
} else {
|
||||||
|
getQuotas(accountId.value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _getParametersRouter() {
|
void _getParametersRouter() {
|
||||||
@@ -149,7 +174,10 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
) {
|
) {
|
||||||
selectAccountMenuItem(AccountMenuItem.profiles);
|
selectAccountMenuItem(AccountMenuItem.profiles);
|
||||||
} else {
|
} else {
|
||||||
selectAccountMenuItem(navigationRouter.accountMenuItem);
|
selectedMenu = navigationRouter.accountMenuItem;
|
||||||
|
if (selectedMenu != null && selectedMenu != AccountMenuItem.storage) {
|
||||||
|
selectAccountMenuItem(selectedMenu!);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,6 +194,7 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
injectVacationBindings(session, accountId);
|
injectVacationBindings(session, accountId);
|
||||||
injectForwardBindings(session, accountId);
|
injectForwardBindings(session, accountId);
|
||||||
injectRuleFilterBindings(session, accountId);
|
injectRuleFilterBindings(session, accountId);
|
||||||
|
injectQuotaBindings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -432,6 +461,8 @@ class ManageAccountDashBoardController extends ReloadableController
|
|||||||
}
|
}
|
||||||
paywallController?.onClose();
|
paywallController?.onClose();
|
||||||
paywallController = null;
|
paywallController = null;
|
||||||
|
previousUri = null;
|
||||||
|
selectedMenu = null;
|
||||||
super.onClose();
|
super.onClose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,10 +1,8 @@
|
|||||||
|
|
||||||
import 'package:core/presentation/resources/image_paths.dart';
|
import 'package:core/presentation/resources/image_paths.dart';
|
||||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/contact_support_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_setting_capability_supported_extension.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';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
@@ -21,12 +19,23 @@ class ManageAccountMenuController extends GetxController with ContactSupportMixi
|
|||||||
AccountMenuItem.languageAndRegion,
|
AccountMenuItem.languageAndRegion,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
late Worker _quotaRxWorker;
|
||||||
|
|
||||||
void _registerObxStreamListener() {
|
void _registerObxStreamListener() {
|
||||||
ever(dashBoardController.accountId, (accountId) {
|
ever(dashBoardController.accountId, (accountId) {
|
||||||
if (accountId != null) {
|
if (accountId != null) {
|
||||||
_createListAccountMenu();
|
_createListAccountMenu();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
_quotaRxWorker = ever(
|
||||||
|
dashBoardController.octetsQuota,
|
||||||
|
(octetsQuota) {
|
||||||
|
if (octetsQuota != null) {
|
||||||
|
_addStorageToMenuList();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -49,8 +58,6 @@ class ManageAccountMenuController extends GetxController with ContactSupportMixi
|
|||||||
AccountMenuItem.mailboxVisibility,
|
AccountMenuItem.mailboxVisibility,
|
||||||
if (dashBoardController.isLanguageSettingDisplayed)
|
if (dashBoardController.isLanguageSettingDisplayed)
|
||||||
AccountMenuItem.languageAndRegion,
|
AccountMenuItem.languageAndRegion,
|
||||||
if (dashBoardController.isStorageCapabilitySupported)
|
|
||||||
AccountMenuItem.storage,
|
|
||||||
];
|
];
|
||||||
listAccountMenuItem.value = newListMenuSetting;
|
listAccountMenuItem.value = newListMenuSetting;
|
||||||
|
|
||||||
@@ -70,4 +77,20 @@ class ManageAccountMenuController extends GetxController with ContactSupportMixi
|
|||||||
void backToMailboxDashBoard(BuildContext context) {
|
void backToMailboxDashBoard(BuildContext context) {
|
||||||
dashBoardController.backToMailboxDashBoard(context: context);
|
dashBoardController.backToMailboxDashBoard(context: context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _addStorageToMenuList() {
|
||||||
|
listAccountMenuItem.add(AccountMenuItem.storage);
|
||||||
|
|
||||||
|
if (dashBoardController.selectedMenu != null) {
|
||||||
|
dashBoardController.selectAccountMenuItem(
|
||||||
|
dashBoardController.selectedMenu!,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void onClose() {
|
||||||
|
_quotaRxWorker.dispose();
|
||||||
|
super.onClose();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+1
-2
@@ -7,7 +7,6 @@ import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions
|
|||||||
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart';
|
import 'package:tmail_ui_user/features/mailbox/presentation/widgets/user_information_widget.dart';
|
||||||
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart';
|
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/profile_setting/profile_setting_action_type.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_profile_setting_action_type_click_extension.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/handle_profile_setting_action_type_click_extension.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/extensions/validate_setting_capability_supported_extension.dart';
|
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings/settings_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/setting_first_level_tile_builder.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/widgets/setting_first_level_tile_builder.dart';
|
||||||
@@ -171,7 +170,7 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
|||||||
]);
|
]);
|
||||||
}),
|
}),
|
||||||
Obx(() {
|
Obx(() {
|
||||||
if (controller.manageAccountDashboardController.isStorageCapabilitySupported) {
|
if (controller.manageAccountDashboardController.octetsQuota.value != null) {
|
||||||
return Column(children: [
|
return Column(children: [
|
||||||
Divider(
|
Divider(
|
||||||
color: AppColor.colorDividerHorizontal,
|
color: AppColor.colorDividerHorizontal,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
|
import 'package:jmap_dart_client/jmap/quotas/quota.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';
|
||||||
|
|
||||||
class ManageAccountArguments with EquatableMixin {
|
class ManageAccountArguments with EquatableMixin {
|
||||||
@@ -8,12 +8,14 @@ class ManageAccountArguments with EquatableMixin {
|
|||||||
final Session? session;
|
final Session? session;
|
||||||
final AccountMenuItem? menuSettingCurrent;
|
final AccountMenuItem? menuSettingCurrent;
|
||||||
final Uri? previousUri;
|
final Uri? previousUri;
|
||||||
|
final Quota? quota;
|
||||||
|
|
||||||
ManageAccountArguments(
|
ManageAccountArguments(
|
||||||
this.session,
|
this.session,
|
||||||
{
|
{
|
||||||
this.menuSettingCurrent,
|
this.menuSettingCurrent,
|
||||||
this.previousUri,
|
this.previousUri,
|
||||||
|
this.quota,
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -22,5 +24,6 @@ class ManageAccountArguments with EquatableMixin {
|
|||||||
session,
|
session,
|
||||||
menuSettingCurrent,
|
menuSettingCurrent,
|
||||||
previousUri,
|
previousUri,
|
||||||
|
quota,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,9 @@
|
|||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/storage/storage_controller.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/storage/storage_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/domain/use_case/get_quotas_interactor.dart';
|
|
||||||
import 'package:tmail_ui_user/features/quotas/presentation/quotas_interactor_bindings.dart';
|
|
||||||
|
|
||||||
class StorageBindings extends Bindings {
|
class StorageBindings extends Bindings {
|
||||||
@override
|
@override
|
||||||
void dependencies() {
|
void dependencies() {
|
||||||
QuotasInteractorBindings().dependencies();
|
Get.lazyPut(() => StorageController());
|
||||||
Get.lazyPut(() => StorageController(Get.find<GetQuotasInteractor>()));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +1,12 @@
|
|||||||
import 'package:core/presentation/state/failure.dart';
|
|
||||||
import 'package:core/presentation/state/success.dart';
|
|
||||||
import 'package:dartz/dartz.dart';
|
|
||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
|
||||||
import 'package:jmap_dart_client/jmap/quotas/quota.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/home/data/exceptions/session_exceptions.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/paywall/presentation/saas_premium_mixin.dart';
|
import 'package:tmail_ui_user/features/paywall/presentation/saas_premium_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/quotas/domain/extensions/list_quotas_extensions.dart';
|
|
||||||
import 'package:tmail_ui_user/features/quotas/domain/state/get_quotas_state.dart';
|
|
||||||
import 'package:tmail_ui_user/features/quotas/domain/use_case/get_quotas_interactor.dart';
|
|
||||||
|
|
||||||
class StorageController extends BaseController with SaaSPremiumMixin {
|
class StorageController extends BaseController with SaaSPremiumMixin {
|
||||||
final dashBoardController = Get.find<ManageAccountDashBoardController>();
|
final dashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||||
|
|
||||||
final GetQuotasInteractor _getQuotasInteractor;
|
|
||||||
|
|
||||||
final octetsQuota = Rxn<Quota>();
|
|
||||||
|
|
||||||
StorageController(this._getQuotasInteractor);
|
|
||||||
|
|
||||||
@override
|
|
||||||
void onReady() {
|
|
||||||
final accountId = dashBoardController.accountId.value;
|
|
||||||
if (accountId != null) {
|
|
||||||
_getQuotasAction(accountId);
|
|
||||||
} else {
|
|
||||||
consumeState(
|
|
||||||
Stream.value(
|
|
||||||
Left(GetQuotasFailure(NotFoundAccountIdException())),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
super.onReady();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _getQuotasAction(AccountId accountId) {
|
|
||||||
consumeState(_getQuotasInteractor.execute(accountId));
|
|
||||||
}
|
|
||||||
|
|
||||||
void _handleGetQuotasSuccess(GetQuotasSuccess success) {
|
|
||||||
octetsQuota.value = success.quotas.octetsQuota;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool validatePremiumIsAvailable() {
|
bool validatePremiumIsAvailable() {
|
||||||
final accountId = dashBoardController.accountId.value;
|
final accountId = dashBoardController.accountId.value;
|
||||||
final session = dashBoardController.sessionCurrent;
|
final session = dashBoardController.sessionCurrent;
|
||||||
@@ -58,25 +20,4 @@ class StorageController extends BaseController with SaaSPremiumMixin {
|
|||||||
void onUpgradeStorage(BuildContext context) {
|
void onUpgradeStorage(BuildContext context) {
|
||||||
dashBoardController.paywallController?.navigateToPaywall(context);
|
dashBoardController.paywallController?.navigateToPaywall(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get isLoading => viewState.value
|
|
||||||
.fold((failure) => false, (success) => success is GetQuotasLoading);
|
|
||||||
|
|
||||||
@override
|
|
||||||
void handleSuccessViewState(Success success) {
|
|
||||||
if (success is GetQuotasSuccess) {
|
|
||||||
_handleGetQuotasSuccess(success);
|
|
||||||
} else {
|
|
||||||
super.handleSuccessViewState(success);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void handleFailureViewState(Failure failure) {
|
|
||||||
if (failure is GetQuotasFailure) {
|
|
||||||
octetsQuota.value = null;
|
|
||||||
} else {
|
|
||||||
super.handleFailureViewState(failure);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ import 'package:core/utils/platform_info.dart';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||||
import 'package:tmail_ui_user/features/base/widget/circle_loading_widget.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/base/setting_detail_view_builder.dart';
|
||||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.dart';
|
import 'package:tmail_ui_user/features/manage_account/presentation/menu/settings_utils.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';
|
||||||
@@ -61,23 +60,13 @@ class StorageView extends GetWidget<StorageController> with AppLoaderMixin {
|
|||||||
isCenter: true,
|
isCenter: true,
|
||||||
textAlign: TextAlign.center,
|
textAlign: TextAlign.center,
|
||||||
),
|
),
|
||||||
Obx(() {
|
|
||||||
if (!controller.isLoading) {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
return Center(
|
|
||||||
child: Padding(
|
|
||||||
padding: SettingsUtils.getSettingProgressBarPadding(
|
|
||||||
context,
|
|
||||||
controller.responsiveUtils,
|
|
||||||
),
|
|
||||||
child: const CircleLoadingWidget(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}),
|
|
||||||
Expanded(
|
Expanded(
|
||||||
child: Obx(() {
|
child: Obx(() {
|
||||||
final octetsQuota = controller.octetsQuota.value;
|
final octetsQuota = controller
|
||||||
|
.dashBoardController
|
||||||
|
.octetsQuota
|
||||||
|
.value;
|
||||||
|
|
||||||
if (octetsQuota != null && octetsQuota.storageAvailable) {
|
if (octetsQuota != null && octetsQuota.storageAvailable) {
|
||||||
return SingleChildScrollView(
|
return SingleChildScrollView(
|
||||||
child: Padding(
|
child: Padding(
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
class NotFoundQuotasException implements Exception {
|
class NotFoundQuotasException implements Exception {}
|
||||||
NotFoundQuotasException();
|
|
||||||
}
|
class QuotasNotSupportedException implements Exception {}
|
||||||
|
|||||||
Reference in New Issue
Block a user