TF-3712 Add SettingsCapability to hide language setting
This commit is contained in:
@@ -15,6 +15,7 @@ import 'package:jmap_dart_client/jmap/core/unsigned_int.dart';
|
||||
import 'package:model/download_all/download_all_capability.dart';
|
||||
import 'package:model/mailbox/mailbox_constants.dart';
|
||||
import 'package:model/model.dart';
|
||||
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
||||
import 'package:tmail_ui_user/features/home/data/model/session_hive_obj.dart';
|
||||
import 'package:tmail_ui_user/features/home/domain/converter/session_account_converter.dart';
|
||||
import 'package:tmail_ui_user/features/home/domain/converter/session_capabilities_converter.dart';
|
||||
@@ -29,6 +30,7 @@ extension SessionExtensions on Session {
|
||||
linagoraContactSupportCapability: ContactSupportCapability.deserialize,
|
||||
tmailContactCapabilityIdentifier: AutocompleteCapability.deserialize,
|
||||
linagoraDownloadAllCapability: DownloadAllCapability.deserialize,
|
||||
capabilityServerSettings: SettingsCapability.deserialize,
|
||||
};
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
@@ -139,4 +141,12 @@ extension SessionExtensions on Session {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool isLanguageReadOnly(AccountId accountId) {
|
||||
final settingsCapability = getCapabilityProperties<SettingsCapability>(
|
||||
accountId,
|
||||
capabilityServerSettings,
|
||||
);
|
||||
return settingsCapability?.readOnlyProperties?.contains('language') == true;
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import 'package:rule_filter/rule_filter/capability_rule_filter.dart';
|
||||
import 'package:server_settings/server_settings/capability_server_settings.dart';
|
||||
import 'package:tmail_ui_user/features/base/action/ui_action.dart';
|
||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
||||
import 'package:tmail_ui_user/features/home/domain/extensions/session_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/export_trace_log_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_all_vacation_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/update_vacation_state.dart';
|
||||
@@ -235,6 +236,16 @@ class ManageAccountDashBoardController extends ReloadableController {
|
||||
}
|
||||
}
|
||||
|
||||
bool get isLanguageSettingDisplayed {
|
||||
if (!isServerSettingsCapabilitySupported) return true;
|
||||
|
||||
if (accountId.value == null || sessionCurrent == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !sessionCurrent!.isLanguageReadOnly(accountId.value!);
|
||||
}
|
||||
|
||||
bool get isVacationCapabilitySupported {
|
||||
if (accountId.value != null && sessionCurrent != null) {
|
||||
return CapabilityIdentifier.jmapVacationResponse.isSupported(sessionCurrent!, accountId.value!);
|
||||
|
||||
@@ -119,7 +119,11 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
||||
case AccountMenuItem.profiles:
|
||||
return ProfilesView(responsiveUtils: controller.responsiveUtils);
|
||||
case AccountMenuItem.languageAndRegion:
|
||||
return const LanguageAndRegionView();
|
||||
if (controller.isLanguageSettingDisplayed) {
|
||||
return const LanguageAndRegionView();
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
case AccountMenuItem.emailRules:
|
||||
if (controller.isRuleFilterCapabilitySupported){
|
||||
return EmailRulesView();
|
||||
|
||||
@@ -46,7 +46,8 @@ class ManageAccountMenuController extends GetxController with ContactSupportMixi
|
||||
if (dashBoardController.isVacationCapabilitySupported)
|
||||
AccountMenuItem.vacation,
|
||||
AccountMenuItem.mailboxVisibility,
|
||||
AccountMenuItem.languageAndRegion
|
||||
if (dashBoardController.isLanguageSettingDisplayed)
|
||||
AccountMenuItem.languageAndRegion,
|
||||
];
|
||||
listAccountMenuItem.value = newListMenuSetting;
|
||||
|
||||
|
||||
+19
-11
@@ -128,17 +128,25 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
|
||||
subtitle: AppLocalizations.of(context).folderVisibilitySubtitle,
|
||||
() => controller.selectSettings(AccountMenuItem.mailboxVisibility)
|
||||
),
|
||||
Divider(
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
height: 1,
|
||||
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
|
||||
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
|
||||
),
|
||||
SettingFirstLevelTileBuilder(
|
||||
AccountMenuItem.languageAndRegion.getName(AppLocalizations.of(context)),
|
||||
AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths),
|
||||
() => controller.selectSettings(AccountMenuItem.languageAndRegion)
|
||||
),
|
||||
Obx(() {
|
||||
if (!controller.manageAccountDashboardController.isLanguageSettingDisplayed) {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
return Column(children: [
|
||||
Divider(
|
||||
color: AppColor.colorDividerHorizontal,
|
||||
height: 1,
|
||||
indent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils),
|
||||
endIndent: SettingsUtils.getHorizontalPadding(context, controller.responsiveUtils)
|
||||
),
|
||||
SettingFirstLevelTileBuilder(
|
||||
AccountMenuItem.languageAndRegion.getName(AppLocalizations.of(context)),
|
||||
AccountMenuItem.languageAndRegion.getIcon(controller.imagePaths),
|
||||
() => controller.selectSettings(AccountMenuItem.languageAndRegion)
|
||||
),
|
||||
]);
|
||||
}),
|
||||
Obx(() {
|
||||
if (controller.manageAccountDashboardController.isFcmCapabilitySupported && PlatformInfo.isMobile) {
|
||||
return Column(children: [
|
||||
|
||||
@@ -197,7 +197,11 @@ class SettingsView extends GetWidget<SettingsController> {
|
||||
case AccountMenuItem.profiles:
|
||||
return ProfilesView(responsiveUtils: controller.responsiveUtils);
|
||||
case AccountMenuItem.languageAndRegion:
|
||||
return const LanguageAndRegionView();
|
||||
if (controller.manageAccountDashboardController.isLanguageSettingDisplayed) {
|
||||
return const LanguageAndRegionView();
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
case AccountMenuItem.emailRules:
|
||||
if (controller.manageAccountDashboardController.isRuleFilterCapabilitySupported) {
|
||||
return EmailRulesView();
|
||||
|
||||
@@ -1,3 +1,26 @@
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_identifier.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/capability/capability_properties.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'capability_server_settings.g.dart';
|
||||
|
||||
final capabilityServerSettings = CapabilityIdentifier(Uri.parse('com:linagora:params:jmap:settings'));
|
||||
|
||||
@JsonSerializable()
|
||||
class SettingsCapability extends CapabilityProperties {
|
||||
SettingsCapability({this.readOnlyProperties});
|
||||
|
||||
final List<String>? readOnlyProperties;
|
||||
|
||||
factory SettingsCapability.fromJson(Map<String, dynamic> json) =>
|
||||
_$SettingsCapabilityFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$SettingsCapabilityToJson(this);
|
||||
|
||||
factory SettingsCapability.deserialize(Map<String, dynamic> json) {
|
||||
return SettingsCapability.fromJson(json);
|
||||
}
|
||||
|
||||
@override
|
||||
List<Object?> get props => [readOnlyProperties];
|
||||
}
|
||||
Reference in New Issue
Block a user