69 lines
2.6 KiB
Dart
69 lines
2.6 KiB
Dart
import 'package:core/core.dart';
|
|
import 'package:dartz/dartz.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:model/model.dart';
|
|
import 'package:tmail_ui_user/features/login/domain/state/authentication_user_state.dart';
|
|
import 'package:tmail_ui_user/features/login/domain/usecases/authentication_user_interactor.dart';
|
|
import 'package:tmail_ui_user/features/login/presentation/state/login_state.dart';
|
|
import 'package:tmail_ui_user/main/routes/app_routes.dart';
|
|
|
|
class LoginController extends GetxController {
|
|
|
|
final AuthenticationInteractor _authenticationInteractor;
|
|
final DynamicUrlInterceptors _dynamicUrlInterceptors;
|
|
final AuthorizationInterceptors _authorizationInterceptors;
|
|
|
|
LoginController(
|
|
this._authenticationInteractor,
|
|
this._dynamicUrlInterceptors,
|
|
this._authorizationInterceptors,
|
|
);
|
|
|
|
var loginState = LoginState(Right(LoginInitAction())).obs;
|
|
|
|
String? _urlText;
|
|
String? _userNameText;
|
|
String? _passwordText;
|
|
|
|
void setUrlText(String url) => _urlText = url.formatURLValid();
|
|
|
|
void setUserNameText(String userName) => _userNameText = userName;
|
|
|
|
void setPasswordText(String password) => _passwordText = password;
|
|
|
|
Uri? _parseUri(String? url) => url != null ? Uri.parse(url) : null;
|
|
|
|
UserName? _parseUserName(String? userName) => userName != null ? UserName(userName) : null;
|
|
|
|
Password? _parsePassword(String? password) => password != null ? Password(password) : null;
|
|
|
|
void handleLoginPressed() {
|
|
final baseUri = _parseUri(_urlText);
|
|
final userName = _parseUserName(_userNameText);
|
|
final password = _parsePassword(_passwordText);
|
|
if (baseUri != null && userName != null && password != null) {
|
|
_loginAction(baseUri, userName, password);
|
|
} else {
|
|
loginState.value = LoginState(Left(LoginMissPropertiesAction()));
|
|
}
|
|
}
|
|
|
|
void _loginAction(Uri baseUrl, UserName userName, Password password) async {
|
|
loginState.value = LoginState(Right(LoginLoadingAction()));
|
|
await _authenticationInteractor.execute(baseUrl, userName, password)
|
|
.then((response) => response.fold(
|
|
(failure) => failure is AuthenticationUserFailure ? _loginFailureAction(failure) : null,
|
|
(success) => success is AuthenticationUserViewState ? _loginSuccessAction(success) : null));
|
|
}
|
|
|
|
void _loginSuccessAction(AuthenticationUserViewState success) {
|
|
loginState.value = LoginState(Right(success));
|
|
_dynamicUrlInterceptors.changeBaseUrl(_urlText);
|
|
_authorizationInterceptors.changeAuthorization(_userNameText, _passwordText);
|
|
Get.offNamed(AppRoutes.MAILBOX_DASHBOARD);
|
|
}
|
|
|
|
void _loginFailureAction(AuthenticationUserFailure failure) {
|
|
loginState.value = LoginState(Left(failure));
|
|
}
|
|
} |