TF-816: get list email forward
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
<svg width="20" height="21" viewBox="0 0 20 21" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.5567 7.10185C13.0528 7.13286 13.4298 7.56015 13.3988 8.05624L12.8988 16.0562C12.8678 16.5523 12.4405 16.9294 11.9444 16.8983C11.4484 16.8673 11.0713 16.44 11.1023 15.944L11.6023 7.94396C11.6333 7.44787 12.0606 7.07085 12.5567 7.10185Z" fill="#959DAD"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M7.44445 7.10185C6.94836 7.13286 6.57133 7.56015 6.60234 8.05624L7.10234 16.0562C7.13334 16.5523 7.56064 16.9294 8.05673 16.8983C8.55281 16.8673 8.92984 16.44 8.89883 15.944L8.39883 7.94396C8.36783 7.44787 7.94053 7.07085 7.44445 7.10185Z" fill="#959DAD"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.00059 3.1001C0.50353 3.1001 0.100586 3.50304 0.100586 4.0001C0.100586 4.49715 0.50353 4.9001 1.00059 4.9001H2.18101L3.33564 17.2161C3.38098 17.6999 3.41978 18.1139 3.47866 18.4534C3.54079 18.8117 3.6356 19.1568 3.82955 19.4828C4.12375 19.9773 4.55842 20.3732 5.07825 20.6199C5.42094 20.7826 5.77339 20.8448 6.13588 20.8732C6.47946 20.9001 6.89528 20.9001 7.38125 20.9001H12.6199C13.1059 20.9001 13.5217 20.9001 13.8653 20.8732C14.2278 20.8448 14.5802 20.7826 14.9229 20.6199C15.4427 20.3732 15.8774 19.9773 16.1716 19.4828C16.3656 19.1568 16.4604 18.8117 16.5225 18.4534C16.5814 18.1139 16.6202 17.6999 16.6655 17.2161L17.8202 4.9001H19.0006C19.4976 4.9001 19.9006 4.49715 19.9006 4.0001C19.9006 3.50304 19.4976 3.1001 19.0006 3.1001H13.7962C13.3899 1.38008 11.8447 0.100098 10.0006 0.100098C8.15644 0.100098 6.61124 1.38008 6.20495 3.1001H1.00059ZM5.12466 17.0148C5.174 17.541 5.20681 17.8842 5.25219 18.1459C5.29568 18.3966 5.34007 18.5013 5.3765 18.5625C5.48809 18.7501 5.65297 18.9002 5.85014 18.9938C5.91452 19.0244 6.02283 19.0588 6.27655 19.0787C6.54136 19.0995 6.88605 19.1001 7.41462 19.1001H12.5866C13.1151 19.1001 13.4598 19.0995 13.7246 19.0787C13.9783 19.0588 14.0867 19.0244 14.151 18.9938C14.3482 18.9002 14.5131 18.7501 14.6247 18.5625C14.6611 18.5013 14.7055 18.3966 14.749 18.1459C14.7944 17.8842 14.8272 17.541 14.8765 17.0148L16.0123 4.9001H3.98891L5.12466 17.0148ZM10.0006 1.9001C9.16287 1.9001 8.43971 2.39061 8.10268 3.1001H11.8985C11.5615 2.39061 10.8383 1.9001 10.0006 1.9001Z" fill="#959DAD"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.2 KiB |
@@ -133,6 +133,8 @@ extension AppColor on Color {
|
||||
static const colorBackgroundSnackBar = Color(0xFF343438);
|
||||
static const colorBackgroundHeaderListRuleFilter = Color(0xFFFAF7F7);
|
||||
static const colorBorderListRuleFilter = Color(0xFFE7E8EC);
|
||||
static const colorBackgroundHeaderListForwards = Color(0xFFFAF7F7);
|
||||
static const colorBorderListForwardsFilter = Color(0xFFE7E8EC);
|
||||
static const colorBackgroundFieldConditionRulesFilter = Color(0xFFF2F3F5);
|
||||
static const colorDividerRuleFilter = Color(0xFFE7E8EC);
|
||||
|
||||
|
||||
@@ -152,6 +152,7 @@ class ImagePaths {
|
||||
String get icOpenEditRule => _getImagePath('ic_open_edit_rule.svg');
|
||||
String get icEditRuleMobile => _getImagePath('ic_edit_rule_mobile.svg');
|
||||
String get icDeleteRuleMobile => _getImagePath('ic_delete_rule_mobile.svg');
|
||||
String get icDeleteEmailForward => _getImagePath('ic_delete_email_forward.svg');
|
||||
|
||||
String _getImagePath(String imageName) {
|
||||
return AssetsPaths.images + imageName;
|
||||
|
||||
@@ -14,8 +14,8 @@ part 'get_forward_response.g.dart';
|
||||
@AccountIdConverter()
|
||||
@IdConverter()
|
||||
@JsonSerializable()
|
||||
class GetForwardResponse extends GetResponse<TmailForward> {
|
||||
GetForwardResponse(AccountId accountId, State state, List<TmailForward> list, List<Id>? notFound) : super(accountId, state, list, notFound);
|
||||
class GetForwardResponse extends GetResponse<TMailForward> {
|
||||
GetForwardResponse(AccountId accountId, State state, List<TMailForward> list, List<Id>? notFound) : super(accountId, state, list, notFound);
|
||||
|
||||
factory GetForwardResponse.fromJson(Map<String, dynamic> json) => _$GetForwardResponseFromJson(json);
|
||||
|
||||
|
||||
@@ -1,27 +1,26 @@
|
||||
import 'package:forward/forward/converter/forward_id_coverter.dart';
|
||||
import 'package:forward/forward/forward.dart';
|
||||
import 'package:forward/forward/forward_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/mail/email/email_address.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'tmail_forward.g.dart';
|
||||
|
||||
@ForwardIdConverter()
|
||||
@JsonSerializable()
|
||||
class TmailForward extends Forward {
|
||||
class TMailForward extends Forward {
|
||||
final ForwardId id;
|
||||
final bool localCopy;
|
||||
final Set<String> forwards;
|
||||
TmailForward({
|
||||
TMailForward({
|
||||
required this.id,
|
||||
required this.localCopy,
|
||||
required this.forwards,
|
||||
});
|
||||
|
||||
factory TmailForward.fromJson(Map<String, dynamic> json) =>
|
||||
_$TmailForwardFromJson(json);
|
||||
factory TMailForward.fromJson(Map<String, dynamic> json) =>
|
||||
_$TMailForwardFromJson(json);
|
||||
|
||||
Map<String, dynamic> toJson() => _$TmailForwardToJson(this);
|
||||
Map<String, dynamic> toJson() => _$TMailForwardToJson(this);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
|
||||
@@ -12,7 +12,7 @@ import 'package:jmap_dart_client/jmap/jmap_request.dart';
|
||||
|
||||
void main() {
|
||||
group('test to json get forward method', () {
|
||||
final expectRuleFilter1 = TmailForward(
|
||||
final expectRuleFilter1 = TMailForward(
|
||||
id: ForwardIdSingleton.forwardIdSingleton,
|
||||
localCopy: true,
|
||||
forwards: {"bob@domain.org", "alice@domain.org"},
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:forward/forward/tmail_forward.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
@@ -29,4 +30,7 @@ abstract class ManageAccountDataSource {
|
||||
Future<List<TMailRule>> createNewEmailRuleFilter(AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest);
|
||||
|
||||
Future<List<TMailRule>> editEmailRuleFilter(AccountId accountId, EditEmailRuleFilterRequest ruleFilterRequest);
|
||||
|
||||
Future<TMailForward> getForward(AccountId accountId);
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:forward/forward/tmail_forward.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
@@ -106,4 +107,13 @@ class ManageAccountDataSourceImpl extends ManageAccountDataSource {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
Future<TMailForward> getForward(AccountId accountId) {
|
||||
return Future.sync(() async {
|
||||
return await manageAccountAPI.getForward(accountId);
|
||||
}).catchError((error) {
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,9 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:forward/forward/forward_id.dart';
|
||||
import 'package:forward/forward/get/get_forward_method.dart';
|
||||
import 'package:forward/forward/get/get_forward_response.dart';
|
||||
import 'package:forward/forward/tmail_forward.dart';
|
||||
import 'package:jmap_dart_client/http/http_client.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/id.dart';
|
||||
@@ -17,6 +21,7 @@ import 'package:rule_filter/rule_filter/rule_filter_id.dart';
|
||||
import 'package:rule_filter/rule_filter/set/set_rule_filter_method.dart';
|
||||
import 'package:rule_filter/rule_filter/tmail_rule.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/data/extensions/list_tmail_rule_extensions.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/exceptions/forward_exception.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/create_new_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/edit_identity_request.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/model/identities_response.dart';
|
||||
@@ -180,4 +185,31 @@ class ManageAccountAPI {
|
||||
|
||||
return result?.list.first.rules ?? <TMailRule>[];
|
||||
}
|
||||
|
||||
Future<TMailForward> getForward(AccountId accountId) async {
|
||||
final processingInvocation = ProcessingInvocation();
|
||||
final requestBuilder = JmapRequestBuilder(_httpClient, processingInvocation);
|
||||
|
||||
final getForwardMethod = GetForwardMethod(
|
||||
accountId,
|
||||
)..addIds({ForwardIdSingleton.forwardIdSingleton.id});
|
||||
|
||||
final getForwardInvocation = requestBuilder.invocation(getForwardMethod);
|
||||
final response = await (requestBuilder
|
||||
..usings(getForwardMethod.requiredCapabilities))
|
||||
.build()
|
||||
.execute();
|
||||
|
||||
final result = response.parse<GetForwardResponse>(
|
||||
getForwardInvocation.methodCallId,
|
||||
GetForwardResponse.deserialize);
|
||||
|
||||
final tMailForwardResult = result?.list.first;
|
||||
if (tMailForwardResult == null) {
|
||||
throw NotFoundForwardException();
|
||||
}
|
||||
|
||||
return tMailForwardResult;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:forward/forward/tmail_forward.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
@@ -63,4 +64,9 @@ class ManageAccountRepositoryImpl extends ManageAccountRepository {
|
||||
Future<List<TMailRule>> editEmailRuleFilter(AccountId accountId, EditEmailRuleFilterRequest ruleFilterRequest) {
|
||||
return dataSource.editEmailRuleFilter(accountId, ruleFilterRequest);
|
||||
}
|
||||
|
||||
@override
|
||||
Future<TMailForward> getForward(AccountId accountId) {
|
||||
return dataSource.getForward(accountId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
class NotFoundForwardException implements Exception {
|
||||
NotFoundForwardException();
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:forward/forward/tmail_forward.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/properties/properties.dart';
|
||||
import 'package:jmap_dart_client/jmap/identities/identity.dart';
|
||||
@@ -29,4 +30,6 @@ abstract class ManageAccountRepository {
|
||||
Future<List<TMailRule>> createNewEmailRuleFilter(AccountId accountId, CreateNewEmailRuleFilterRequest ruleFilterRequest);
|
||||
|
||||
Future<List<TMailRule>> editEmailRuleFilter(AccountId accountId, EditEmailRuleFilterRequest ruleFilterRequest);
|
||||
|
||||
Future<TMailForward> getForward(AccountId accountId);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:forward/forward/tmail_forward.dart';
|
||||
|
||||
class GetForwardSuccess extends UIState {
|
||||
final TMailForward forward;
|
||||
|
||||
GetForwardSuccess(this.forward);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [forward];
|
||||
}
|
||||
|
||||
class GetForwardFailure extends FeatureFailure {
|
||||
final dynamic exception;
|
||||
|
||||
GetForwardFailure(this.exception);
|
||||
|
||||
@override
|
||||
List<Object> get props => [exception];
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
import 'dart:core';
|
||||
|
||||
import 'package:core/core.dart';
|
||||
import 'package:dartz/dartz.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_forward_state.dart';
|
||||
|
||||
class GetForwardInteractor {
|
||||
final ManageAccountRepository manageAccountRepository;
|
||||
|
||||
GetForwardInteractor(this.manageAccountRepository);
|
||||
|
||||
Stream<Either<Failure, Success>> execute(AccountId accountId) async* {
|
||||
try {
|
||||
yield Right<Failure, Success>(LoadingState());
|
||||
final response = await manageAccountRepository.getForward(accountId);
|
||||
yield Right(GetForwardSuccess(response));
|
||||
} catch (exception) {
|
||||
yield Left(GetForwardFailure(exception));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,7 +55,7 @@ class EmailRulesView extends GetWidget<EmailRulesController> with AppLoaderMixin
|
||||
_responsiveUtils.isTablet(context)) {
|
||||
return const EdgeInsets.only(right: 32, top: 16, bottom: 16);
|
||||
} else {
|
||||
return const EdgeInsets.only(right: 32, top: 16, bottom: 16);
|
||||
return const EdgeInsets.only(top: 16, bottom: 16, right: 28, left: 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_bindings.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/repository/manage_account_repository.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_forward_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_controller.dart';
|
||||
|
||||
class ForwardBindings extends BaseBindings {
|
||||
|
||||
@override
|
||||
void bindingsController() {
|
||||
Get.lazyPut(() => ForwardController(
|
||||
Get.find<GetForwardInteractor>(),
|
||||
));
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsDataSource() {}
|
||||
|
||||
@override
|
||||
void bindingsDataSourceImpl() {}
|
||||
|
||||
@override
|
||||
void bindingsInteractor() {
|
||||
Get.lazyPut(() => GetForwardInteractor(Get.find<ManageAccountRepository>()));
|
||||
}
|
||||
|
||||
@override
|
||||
void bindingsRepository() {}
|
||||
|
||||
@override
|
||||
void bindingsRepositoryImpl() {}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/base_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/state/get_forward_state.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/domain/usecases/get_forward_interactor.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
|
||||
class ForwardController extends BaseController {
|
||||
|
||||
final GetForwardInteractor _getForwardInteractor;
|
||||
|
||||
final _accountDashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||
|
||||
final listForwards = <String>[].obs;
|
||||
|
||||
ForwardController(
|
||||
this._getForwardInteractor,
|
||||
);
|
||||
|
||||
@override
|
||||
void onDone() {
|
||||
viewState.value.fold((failure) {}, (success) {
|
||||
if (success is GetForwardSuccess) {
|
||||
if (success.forward.forwards.isNotEmpty) {
|
||||
listForwards.addAll(success.forward.forwards);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void onError(error) {}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
_getForward();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
void _getForward() {
|
||||
consumeState(_getForwardInteractor.execute(_accountDashBoardController.accountId.value!));
|
||||
}
|
||||
|
||||
void deleteEmailForward(String emailForward) {
|
||||
//TODO: deleteEmailForward
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/base/mixin/app_loader_mixin.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/widgets/list_email_forward_widget.dart';
|
||||
|
||||
class ForwardView extends GetWidget<ForwardController> with AppLoaderMixin {
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
ForwardView({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: _responsiveUtils.isWebDesktop(context)
|
||||
? AppColor.colorBgDesktop
|
||||
: Colors.white,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
margin: _getMarginView(context),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
SizedBox(height: _responsiveUtils.isWebDesktop(context) ? 24 : 16),
|
||||
_buildLoadingView(),
|
||||
const Expanded(child: ListEmailForwardsWidget())
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
EdgeInsets _getMarginView(BuildContext context) {
|
||||
if (BuildUtils.isWeb) {
|
||||
if (_responsiveUtils.isDesktop(context)) {
|
||||
return const EdgeInsets.only(left: 16, top: 16, right: 24, bottom: 24);
|
||||
} else if (_responsiveUtils.isTabletLarge(context) ||
|
||||
_responsiveUtils.isTablet(context)) {
|
||||
return const EdgeInsets.only(right: 32, top: 16, bottom: 16);
|
||||
} else {
|
||||
return const EdgeInsets.only(right: 32, top: 16, bottom: 16);
|
||||
}
|
||||
} else {
|
||||
if (_responsiveUtils.isDesktop(context) ||
|
||||
_responsiveUtils.isLandscapeTablet(context) ||
|
||||
_responsiveUtils.isTabletLarge(context) ||
|
||||
_responsiveUtils.isTablet(context)) {
|
||||
return const EdgeInsets.only(right: 32, top: 16, bottom: 16);
|
||||
} else {
|
||||
return const EdgeInsets.only(top: 16, bottom: 16, right: 28, left: 20);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Widget _buildLoadingView() {
|
||||
return Obx(() => controller.viewState.value.fold(
|
||||
(failure) => const SizedBox.shrink(),
|
||||
(success) => success is LoadingState
|
||||
? Padding(
|
||||
padding: const EdgeInsets.only(bottom: 24),
|
||||
child: loadingWidget)
|
||||
: const SizedBox.shrink()
|
||||
));
|
||||
}
|
||||
}
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
import 'package:core/core.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/forward/forward_controller.dart';
|
||||
|
||||
class EmailForwardItemWidget extends StatelessWidget {
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
final _imagePaths = Get.find<ImagePaths>();
|
||||
final _emailForwardController = Get.find<ForwardController>();
|
||||
|
||||
final String emailForward;
|
||||
|
||||
EmailForwardItemWidget({
|
||||
Key? key,
|
||||
required this.emailForward,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
padding: EdgeInsets.only(
|
||||
top: 15,
|
||||
bottom: 15,
|
||||
left: _responsiveUtils.isMobile(context) ? 16 : 24,
|
||||
right: _responsiveUtils.isMobile(context) ? 0 : 24
|
||||
),
|
||||
color: Colors.white,
|
||||
child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [
|
||||
Text(emailForward,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Colors.black)),
|
||||
const Spacer(),
|
||||
if (!_responsiveUtils.isMobile(context))
|
||||
buildIconWeb(
|
||||
icon: SvgPicture.asset(
|
||||
_imagePaths.icDeleteEmailForward,
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
onTap: () {
|
||||
_emailForwardController.deleteEmailForward(emailForward);
|
||||
}),
|
||||
]),
|
||||
);
|
||||
}
|
||||
}
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
import 'package:core/presentation/extensions/color_extension.dart';
|
||||
import 'package:core/utils/app_logger.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/forward_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/forward/widgets/email_forward_item_widget.dart';
|
||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||
|
||||
class ListEmailForwardsWidget extends GetWidget<ForwardController> {
|
||||
const ListEmailForwardsWidget({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
decoration: BoxDecoration(
|
||||
color: AppColor.colorBackgroundWrapIconStyleCode,
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
border: Border.all(
|
||||
width: 1,
|
||||
color: AppColor.colorBorderListForwardsFilter)
|
||||
),
|
||||
child: ClipRRect(
|
||||
borderRadius: BorderRadius.circular(16),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Container(
|
||||
width: double.infinity,
|
||||
decoration: const BoxDecoration(
|
||||
color: AppColor.colorBackgroundHeaderListForwards,
|
||||
borderRadius: BorderRadius.only(
|
||||
topLeft: Radius.circular(16),
|
||||
topRight: Radius.circular(16)),
|
||||
),
|
||||
padding: const EdgeInsets.symmetric(
|
||||
vertical: 28,
|
||||
horizontal: 24,
|
||||
),
|
||||
child: Text(AppLocalizations.of(context).headerEmailsForward,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: AppColor.colorTextButtonHeaderThread)),
|
||||
),
|
||||
const Divider(
|
||||
color: AppColor.lineItemListColor,
|
||||
height: 1,
|
||||
thickness: 0.2,
|
||||
),
|
||||
Expanded(
|
||||
child: Obx(() {
|
||||
log('ListEmailForwardsWidget::build(): ${controller.listForwards}');
|
||||
return ListView.separated(
|
||||
shrinkWrap: true,
|
||||
itemCount: controller.listForwards.length,
|
||||
itemBuilder: (context, index) {
|
||||
final emailForward = controller.listForwards[index];
|
||||
log('ListEmailForwardsWidget::build(): $emailForward');
|
||||
return EmailForwardItemWidget(emailForward: emailForward);
|
||||
},
|
||||
separatorBuilder: (context, index) => const Divider(
|
||||
color: AppColor.lineItemListColor,
|
||||
height: 1,
|
||||
thickness: 0.2,
|
||||
),
|
||||
);
|
||||
}),
|
||||
),
|
||||
]),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
import 'package:core/core.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:forward/forward/capability_forward.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:jmap_dart_client/jmap/account_id.dart';
|
||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||
@@ -14,6 +15,7 @@ import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_a
|
||||
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/presentation/email_rules/email_rules_bindings.dart';
|
||||
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/routes/app_routes.dart';
|
||||
@@ -110,6 +112,9 @@ class ManageAccountDashBoardController extends ReloadableController {
|
||||
if(newAccountMenuItem == AccountMenuItem.emailRules) {
|
||||
EmailRulesBindings().dependencies();
|
||||
}
|
||||
if(newAccountMenuItem == AccountMenuItem.forward) {
|
||||
ForwardBindings().dependencies();
|
||||
}
|
||||
accountMenuItemSelected.value = newAccountMenuItem;
|
||||
if (currentContext != null && !_responsiveUtils.isDesktop(currentContext!)) {
|
||||
closeMenuDrawer();
|
||||
@@ -135,4 +140,6 @@ class ManageAccountDashBoardController extends ReloadableController {
|
||||
|
||||
bool checkAvailableRuleFilterInSession() => sessionCurrent.value?.capabilities.containsKey(capabilityRuleFilter) ?? false;
|
||||
|
||||
bool checkAvailableForwardInSession() => sessionCurrent.value?.capabilities.containsKey(capabilityForward) ?? false;
|
||||
|
||||
}
|
||||
@@ -4,8 +4,8 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.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/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/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/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/menu/manage_account_menu_view.dart';
|
||||
@@ -154,6 +154,12 @@ class ManageAccountDashBoardView extends GetWidget<ManageAccountDashBoardControl
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
case AccountMenuItem.forward:
|
||||
if(controller.checkAvailableForwardInSession()){
|
||||
return ForwardView();
|
||||
} else {
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
default:
|
||||
return const SizedBox.shrink();
|
||||
}
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
|
||||
import 'package:core/presentation/utils/responsive_utils.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/material.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/manage_account/presentation/manage_account_dashboard_controller.dart';
|
||||
import 'package:tmail_ui_user/features/manage_account/presentation/model/account_menu_item.dart';
|
||||
@@ -11,7 +8,6 @@ import 'package:tmail_ui_user/features/manage_account/presentation/model/account
|
||||
class ManageAccountMenuController extends BaseController {
|
||||
|
||||
final dashBoardController = Get.find<ManageAccountDashBoardController>();
|
||||
final _responsiveUtils = Get.find<ResponsiveUtils>();
|
||||
|
||||
late Worker sessionWorker;
|
||||
|
||||
@@ -22,7 +18,7 @@ class ManageAccountMenuController extends BaseController {
|
||||
|
||||
void _initWorker() {
|
||||
sessionWorker = ever(dashBoardController.sessionCurrent, (_) {
|
||||
_createListAccountMenuItemWithEmailRule();
|
||||
_createListAccountMenu();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -33,19 +29,28 @@ class ManageAccountMenuController extends BaseController {
|
||||
@override
|
||||
void onInit() {
|
||||
_initWorker();
|
||||
_createListAccountMenuItemWithEmailRule();
|
||||
_createListAccountMenu();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
_createListAccountMenuItemWithEmailRule(){
|
||||
_createListAccountMenu(){
|
||||
listAccountMenuItem.clear();
|
||||
listAccountMenuItem.add(
|
||||
AccountMenuItem.profiles,
|
||||
);
|
||||
if (dashBoardController.checkAvailableRuleFilterInSession()) {
|
||||
listAccountMenuItem.clear();
|
||||
listAccountMenuItem.addAll([
|
||||
AccountMenuItem.profiles,
|
||||
listAccountMenuItem.add(
|
||||
AccountMenuItem.emailRules,
|
||||
AccountMenuItem.languageAndRegion,
|
||||
]);
|
||||
);
|
||||
}
|
||||
if (dashBoardController.checkAvailableForwardInSession()) {
|
||||
listAccountMenuItem.add(
|
||||
AccountMenuItem.forward,
|
||||
);
|
||||
}
|
||||
listAccountMenuItem.add(
|
||||
AccountMenuItem.languageAndRegion,
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -7,6 +7,7 @@ enum AccountMenuItem {
|
||||
profiles,
|
||||
languageAndRegion,
|
||||
emailRules,
|
||||
forward,
|
||||
}
|
||||
|
||||
extension AccountMenuItemExtension on AccountMenuItem {
|
||||
@@ -19,6 +20,8 @@ extension AccountMenuItemExtension on AccountMenuItem {
|
||||
return imagePaths.icLanguage;
|
||||
case AccountMenuItem.emailRules:
|
||||
return imagePaths.icEmailRules;
|
||||
case AccountMenuItem.forward:
|
||||
return imagePaths.icForward;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +33,8 @@ extension AccountMenuItemExtension on AccountMenuItem {
|
||||
return AppLocalizations.of(context).languageAndRegion;
|
||||
case AccountMenuItem.emailRules:
|
||||
return AppLocalizations.of(context).emailRules;
|
||||
case AccountMenuItem.forward:
|
||||
return AppLocalizations.of(context).forwarding;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"@@last_modified": "2022-08-12T09:07:20.482325",
|
||||
"@@last_modified": "2022-08-18T10:12:35.405050",
|
||||
"initializing_data": "Initializing data...",
|
||||
"@initializing_data": {
|
||||
"type": "text",
|
||||
@@ -1891,5 +1891,17 @@
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"headerEmailsForward": "Emails forward",
|
||||
"@headerEmailsForward": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
},
|
||||
"forwarding": "Forwarding",
|
||||
"@forwarding": {
|
||||
"type": "text",
|
||||
"placeholders_order": [],
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
@@ -1945,4 +1945,18 @@ class AppLocalizations {
|
||||
'Your filter has been updated',
|
||||
name: 'yourFilterHasBeenUpdated');
|
||||
}
|
||||
|
||||
String get headerEmailsForward {
|
||||
return Intl.message(
|
||||
'Emails forward',
|
||||
name: 'headerEmailsForward',
|
||||
);
|
||||
}
|
||||
|
||||
String get forwarding {
|
||||
return Intl.message(
|
||||
'Forwarding',
|
||||
name: 'forwarding',
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user