TF-788 Integrate Vacation settings to Settings screen

This commit is contained in:
Dat PHAM HOANG
2022-08-24 15:48:07 +07:00
committed by Dat H. Pham
parent 38a1b6e642
commit 998aa23958
5 changed files with 48 additions and 4 deletions
@@ -24,8 +24,8 @@ import 'package:tmail_ui_user/features/manage_account/presentation/extensions/va
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_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/localizations/app_localizations.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.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/route_navigation.dart';
@@ -200,4 +200,8 @@ class ManageAccountDashBoardController extends ReloadableController {
log('ManageAccountDashBoardController::_handleUpdateVacationSuccess(): $vacationResponse');
}
}
bool inVacationSettings() {
return accountMenuItemSelected.value == AccountMenuItem.vacation;
}
}
@@ -15,6 +15,7 @@ class SettingsController extends GetxController {
void backToUniversalSettings() {
log('SettingsController::backToUniversalSettings()');
manageAccountDashboardController.selectAccountMenuItem(AccountMenuItem.none);
manageAccountDashboardController.settingsPageLevel.value = SettingsPageLevel.universal;
}
}
@@ -106,6 +106,11 @@ class SettingsFirstLevelView extends GetWidget<SettingsController> {
indent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils),
endIndent: SettingsUtils.getHorizontalPadding(context, _responsiveUtils)
),
SettingFirstLevelTileBuilder(
AppLocalizations.of(context).sign_out,
_imagePaths.icSignOut,
controller.manageAccountDashboardController.logoutAction
),
]);
}
}
@@ -3,12 +3,12 @@ import 'package:core/presentation/resources/image_paths.dart';
import 'package:core/presentation/utils/responsive_utils.dart';
import 'package:core/presentation/utils/style_utils.dart';
import 'package:core/presentation/views/button/icon_button_web.dart';
import 'package:core/utils/app_logger.dart';
import 'package:core/utils/build_utils.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:get/get.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/extensions/vacation_response_extension.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_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/menu/settings/settings_controller.dart';
@@ -18,6 +18,7 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account
import 'package:tmail_ui_user/features/manage_account/presentation/model/settings_page_level.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/profiles/profiles_view.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/vacation_view.dart';
import 'package:tmail_ui_user/features/manage_account/presentation/vacation/widgets/vacation_notification_message_widget.dart';
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
typedef CloseSettingsViewAction = void Function();
@@ -31,7 +32,6 @@ class SettingsView extends GetWidget<SettingsController> {
@override
Widget build(BuildContext context) {
log('SettingsView::build(): ${controller.manageAccountDashboardController.userProfile.value}');
return SafeArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
@@ -42,6 +42,35 @@ class SettingsView extends GetWidget<SettingsController> {
padding: SettingsUtils.getPaddingInFirstLevel(context, _responsiveUtils),
child: _buildAppbar(context))),
const Divider(color: AppColor.colorDividerComposer, height: 1),
Obx(() {
if (controller.manageAccountDashboardController.vacationResponse.value?.vacationResponderIsValid == true) {
return VacationNotificationMessageWidget(
margin: const EdgeInsets.only(
left: BuildUtils.isWeb ? 24 : 16,
right: BuildUtils.isWeb ? 24 : 16,
top: 16),
vacationResponse: controller.manageAccountDashboardController.vacationResponse.value!,
action: () => controller.manageAccountDashboardController.disableVacationResponder());
} else if ((controller.manageAccountDashboardController.vacationResponse.value?.vacationResponderIsWaiting == true
|| controller.manageAccountDashboardController.vacationResponse.value?.vacationResponderIsStopped == true)
&& controller.manageAccountDashboardController.inVacationSettings()) {
return VacationNotificationMessageWidget(
margin: const EdgeInsets.only(
left: BuildUtils.isWeb ? 24 : 16,
right: BuildUtils.isWeb ? 24 : 16,
top: 16),
vacationResponse: controller.manageAccountDashboardController.vacationResponse.value!,
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 16),
fontWeight: FontWeight.normal,
backgroundColor: Colors.yellow,
leadingIcon: const Padding(
padding: EdgeInsets.only(right: 16),
child: Icon(Icons.timer, size: 20),
));
} else {
return const SizedBox.shrink();
}
}),
Expanded(child: Padding(
padding: !BuildUtils.isWeb && _responsiveUtils.isPortraitMobile(context)
? const EdgeInsets.only(left: 8)
@@ -8,7 +8,8 @@ enum AccountMenuItem {
languageAndRegion,
emailRules,
forward,
vacation;
vacation,
none;
String getIcon(ImagePaths imagePaths) {
switch(this) {
@@ -22,6 +23,8 @@ enum AccountMenuItem {
return imagePaths.icForward;
case AccountMenuItem.vacation:
return imagePaths.icVacation;
case AccountMenuItem.none:
return imagePaths.icProfiles;
}
}
@@ -37,6 +40,8 @@ enum AccountMenuItem {
return AppLocalizations.of(context).forwarding;
case AccountMenuItem.vacation:
return AppLocalizations.of(context).vacation;
case AccountMenuItem.none:
return AppLocalizations.of(context).profiles;
}
}
}