TF-2134 Add MailtoURLView page

(cherry picked from commit 7bb895470d300178ddccf493d0a6927e3d81e811)
This commit is contained in:
dab246
2023-09-12 02:15:58 +07:00
committed by Dat Vu
parent b1d86de5d9
commit c4b9caab3f
4 changed files with 169 additions and 0 deletions
@@ -0,0 +1,69 @@
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/base/base_bindings.dart';
import 'package:tmail_ui_user/features/login/data/datasource/authentication_oidc_datasource.dart';
import 'package:tmail_ui_user/features/login/data/datasource_impl/authentication_oidc_datasource_impl.dart';
import 'package:tmail_ui_user/features/login/data/local/oidc_configuration_cache_manager.dart';
import 'package:tmail_ui_user/features/login/data/local/token_oidc_cache_manager.dart';
import 'package:tmail_ui_user/features/login/data/network/authentication_client/authentication_client_base.dart';
import 'package:tmail_ui_user/features/login/data/network/oidc_http_client.dart';
import 'package:tmail_ui_user/features/login/data/repository/authentication_oidc_repository_impl.dart';
import 'package:tmail_ui_user/features/login/domain/repository/account_repository.dart';
import 'package:tmail_ui_user/features/login/domain/repository/authentication_oidc_repository.dart';
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.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_credential_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_stored_token_oidc_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/mailto/presentation/mailto_url_controller.dart';
import 'package:tmail_ui_user/main/exceptions/remote_exception_thrower.dart';
class MailtoUrlBindings extends BaseBindings {
@override
void bindingsController() {
Get.lazyPut(() => MailtoUrlController(
Get.find<GetAuthenticatedAccountInteractor>(),
Get.find<UpdateAuthenticationAccountInteractor>(),
));
}
@override
void bindingsDataSource() {
Get.lazyPut<AuthenticationOIDCDataSource>(() => Get.find<AuthenticationOIDCDataSourceImpl>());
}
@override
void bindingsDataSourceImpl() {
Get.lazyPut(() => AuthenticationOIDCDataSourceImpl(
Get.find<OIDCHttpClient>(),
Get.find<AuthenticationClientBase>(),
Get.find<TokenOidcCacheManager>(),
Get.find<OidcConfigurationCacheManager>(),
Get.find<RemoteExceptionThrower>(),
));
}
@override
void bindingsInteractor() {
Get.lazyPut(() => GetStoredTokenOidcInteractor(
Get.find<AuthenticationOIDCRepository>(),
Get.find<CredentialRepository>(),
));
Get.lazyPut(() => GetAuthenticatedAccountInteractor(
Get.find<AccountRepository>(),
Get.find<GetCredentialInteractor>(),
Get.find<GetStoredTokenOidcInteractor>(),
));
Get.lazyPut(() => UpdateAuthenticationAccountInteractor(Get.find<AccountRepository>()));
}
@override
void bindingsRepository() {
Get.lazyPut<AuthenticationOIDCRepository>(() => Get.find<AuthenticationOIDCRepositoryImpl>());
}
@override
void bindingsRepositoryImpl() {
Get.lazyPut(() => AuthenticationOIDCRepositoryImpl(Get.find<AuthenticationOIDCDataSource>()));
}
}
@@ -0,0 +1,55 @@
import 'package:core/utils/app_logger.dart';
import 'package:get/get.dart';
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/get_authenticated_account_interactor.dart';
import 'package:tmail_ui_user/features/login/domain/usecases/update_authentication_account_interactor.dart';
import 'package:tmail_ui_user/features/mailto/presentation/model/mailto_arguments.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/navigation_router.dart';
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
import 'package:tmail_ui_user/main/routes/route_utils.dart';
class MailtoUrlController extends ReloadableController {
MailtoUrlController(
GetAuthenticatedAccountInteractor getAuthenticatedAccountInteractor,
UpdateAuthenticationAccountInteractor updateAuthenticationAccountInteractor,
) : super(
getAuthenticatedAccountInteractor,
updateAuthenticationAccountInteractor
);
@override
void onReady() {
super.onReady();
final parameters = Get.parameters;
log('MailtoUrlController::onReady():parameters: $parameters');
if (parameters.containsKey('uri')) {
reload();
} else {
popAndPush(AppRoutes.unknownRoutePage);
}
}
@override
void handleReloaded(Session session) {
final parameters = Get.parameters;
log('MailtoUrlController::handleReloaded():parameters: $parameters');
if (parameters.containsKey('uri')) {
final mailtoArgument = MailtoArguments(
session: session,
emailAddress: parameters['uri']
);
popAndPush(
RouteUtils.generateNavigationRoute(
AppRoutes.dashboard,
NavigationRouter.initial()
),
arguments: mailtoArgument
);
} else {
popAndPush(AppRoutes.unknownRoutePage);
}
}
}
@@ -0,0 +1,23 @@
import 'package:core/presentation/extensions/color_extension.dart';
import 'package:core/presentation/utils/theme_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:tmail_ui_user/features/mailto/presentation/mailto_url_controller.dart';
class MailtoUrlView extends GetWidget<MailtoUrlController> {
const MailtoUrlView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
ThemeUtils.setSystemDarkUIStyle();
return Container(
color: AppColor.primaryLightColor,
child: const SizedBox(
width: 100,
height: 100,
child: CupertinoActivityIndicator(),
),
);
}
}
@@ -0,0 +1,22 @@
import 'package:jmap_dart_client/jmap/core/session/session.dart';
import 'package:tmail_ui_user/main/routes/app_routes.dart';
import 'package:tmail_ui_user/main/routes/router_arguments.dart';
class MailtoArguments extends RouterArguments {
final Session session;
final String? emailAddress;
MailtoArguments({required this.session, this.emailAddress});
Map<String, String?> toMapRouter() {
return {
'routeName': AppRoutes.mailtoURL,
'emailAddress': emailAddress
};
}
@override
List<Object?> get props => [session, emailAddress];
}