TF-2387 Add loading bar when click sign in saas
This commit is contained in:
@@ -36,7 +36,7 @@ abstract class ReloadableController extends BaseController {
|
|||||||
goToLogin();
|
goToLogin();
|
||||||
} else if (failure is GetSessionFailure) {
|
} else if (failure is GetSessionFailure) {
|
||||||
logError('$runtimeType::handleFailureViewState():Failure = $failure');
|
logError('$runtimeType::handleFailureViewState():Failure = $failure');
|
||||||
_handleGetSessionFailure(failure.exception);
|
handleGetSessionFailure(failure.exception);
|
||||||
} else if (failure is UpdateAccountCacheFailure) {
|
} else if (failure is UpdateAccountCacheFailure) {
|
||||||
logError('$runtimeType::handleFailureViewState():Failure = $failure');
|
logError('$runtimeType::handleFailureViewState():Failure = $failure');
|
||||||
_handleUpdateAccountCacheCompleted(
|
_handleUpdateAccountCacheCompleted(
|
||||||
@@ -127,7 +127,7 @@ abstract class ReloadableController extends BaseController {
|
|||||||
consumeState(_getSessionInteractor.execute());
|
consumeState(_getSessionInteractor.execute());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _handleGetSessionFailure(GetSessionFailure failure) {
|
void handleGetSessionFailure(GetSessionFailure failure) {
|
||||||
if (failure.exception is! BadCredentialsException) {
|
if (failure.exception is! BadCredentialsException) {
|
||||||
toastManager.showMessageFailure(failure);
|
toastManager.showMessageFailure(failure);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,11 @@
|
|||||||
import 'package:core/presentation/state/failure.dart';
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:model/account/authentication_type.dart';
|
import 'package:model/account/authentication_type.dart';
|
||||||
import 'package:model/account/personal_account.dart';
|
import 'package:model/account/personal_account.dart';
|
||||||
import 'package:model/oidc/oidc_configuration.dart';
|
import 'package:model/oidc/oidc_configuration.dart';
|
||||||
import 'package:model/oidc/token_oidc.dart';
|
import 'package:model/oidc/token_oidc.dart';
|
||||||
import 'package:rich_text_composer/views/commons/logger.dart';
|
import 'package:rich_text_composer/views/commons/logger.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/exceptions/login_exception.dart';
|
|
||||||
import 'package:tmail_ui_user/features/login/domain/repository/account_repository.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/authentication_oidc_repository.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
|
import 'package:tmail_ui_user/features/login/domain/repository/credential_repository.dart';
|
||||||
@@ -51,13 +49,6 @@ class SignInSaasInteractor {
|
|||||||
);
|
);
|
||||||
|
|
||||||
yield Right<Failure, Success>(SignInSaasSuccess(tokenOIDC, baseUri, oidcConfiguration));
|
yield Right<Failure, Success>(SignInSaasSuccess(tokenOIDC, baseUri, oidcConfiguration));
|
||||||
} on PlatformException catch (e) {
|
|
||||||
logError('SignInSaasInteractor::execute():PlatformException ${e.message} - ${e.stacktrace}');
|
|
||||||
if (NoSuitableBrowserForOIDCException.verifyException(e)) {
|
|
||||||
yield Left<Failure, Success>(SignInSaasFailure(NoSuitableBrowserForOIDCException()));
|
|
||||||
} else {
|
|
||||||
yield Left<Failure, Success>(SignInSaasFailure(e));
|
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError('SignInSaasInteractor::execute():Exception = $e');
|
logError('SignInSaasInteractor::execute():Exception = $e');
|
||||||
yield Left<Failure, Success>(SignInSaasFailure(e));
|
yield Left<Failure, Success>(SignInSaasFailure(e));
|
||||||
|
|||||||
+32
-1
@@ -1,14 +1,19 @@
|
|||||||
|
import 'package:core/presentation/state/failure.dart';
|
||||||
import 'package:core/presentation/state/success.dart';
|
import 'package:core/presentation/state/success.dart';
|
||||||
import 'package:dartz/dartz.dart';
|
import 'package:dartz/dartz.dart';
|
||||||
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
import 'package:jmap_dart_client/jmap/core/session/session.dart';
|
||||||
import 'package:model/oidc/oidc_configuration.dart';
|
import 'package:model/oidc/oidc_configuration.dart';
|
||||||
|
import 'package:tip_dialog/tip_dialog.dart';
|
||||||
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
import 'package:tmail_ui_user/features/base/reloadable/reloadable_controller.dart';
|
||||||
|
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
|
import 'package:tmail_ui_user/features/login/data/network/config/oidc_constant.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
|
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
|
||||||
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
|
import 'package:tmail_ui_user/features/login/presentation/login_form_type.dart';
|
||||||
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.dart';
|
import 'package:tmail_ui_user/features/login/presentation/model/login_arguments.dart';
|
||||||
import 'package:tmail_ui_user/features/starting_page/domain/state/sign_in_saas_state.dart';
|
import 'package:tmail_ui_user/features/starting_page/domain/state/sign_in_saas_state.dart';
|
||||||
import 'package:tmail_ui_user/features/starting_page/domain/usecase/sign_in_saas_interactor.dart';
|
import 'package:tmail_ui_user/features/starting_page/domain/usecase/sign_in_saas_interactor.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/app_routes.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
import 'package:tmail_ui_user/main/routes/route_navigation.dart';
|
||||||
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
import 'package:tmail_ui_user/main/routes/route_utils.dart';
|
||||||
@@ -31,7 +36,9 @@ class TwakeWelcomeController extends ReloadableController {
|
|||||||
AppUtils.launchLink(AppConfig.linagoraPrivacyUrl);
|
AppUtils.launchLink(AppConfig.linagoraPrivacyUrl);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onClickSignIn() {
|
void onClickSignIn(BuildContext context) {
|
||||||
|
TipDialogHelper.loading(AppLocalizations.of(context).loadingPleaseWait);
|
||||||
|
|
||||||
if (AppConfig.saasServerUrl.isEmpty) {
|
if (AppConfig.saasServerUrl.isEmpty) {
|
||||||
consumeState(Stream.value(Left(SignInSaasFailure(CanNotFoundSaasServerUrl()))));
|
consumeState(Stream.value(Left(SignInSaasFailure(CanNotFoundSaasServerUrl()))));
|
||||||
return;
|
return;
|
||||||
@@ -63,13 +70,31 @@ class TwakeWelcomeController extends ReloadableController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void handleFailureViewState(Failure failure) {
|
||||||
|
if (failure is SignInSaasFailure) {
|
||||||
|
_handleSignInSaasFailure(failure);
|
||||||
|
} else {
|
||||||
|
super.handleFailureViewState(failure);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void handleReloaded(Session session) {
|
void handleReloaded(Session session) {
|
||||||
|
TipDialogHelper.dismiss();
|
||||||
|
|
||||||
popAndPush(
|
popAndPush(
|
||||||
RouteUtils.generateNavigationRoute(AppRoutes.dashboard),
|
RouteUtils.generateNavigationRoute(AppRoutes.dashboard),
|
||||||
arguments: session);
|
arguments: session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void handleGetSessionFailure(GetSessionFailure failure) {
|
||||||
|
TipDialogHelper.dismiss();
|
||||||
|
|
||||||
|
toastManager.showMessageFailure(failure);
|
||||||
|
}
|
||||||
|
|
||||||
void _handleSignInSaasSuccess(SignInSaasSuccess success) {
|
void _handleSignInSaasSuccess(SignInSaasSuccess success) {
|
||||||
dynamicUrlInterceptors.setJmapUrl(success.baseUri.toString());
|
dynamicUrlInterceptors.setJmapUrl(success.baseUri.toString());
|
||||||
dynamicUrlInterceptors.changeBaseUrl(success.baseUri.toString());
|
dynamicUrlInterceptors.changeBaseUrl(success.baseUri.toString());
|
||||||
@@ -81,4 +106,10 @@ class TwakeWelcomeController extends ReloadableController {
|
|||||||
newConfig: success.oidcConfiguration);
|
newConfig: success.oidcConfiguration);
|
||||||
getSessionAction();
|
getSessionAction();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _handleSignInSaasFailure(SignInSaasFailure failure) {
|
||||||
|
TipDialogHelper.dismiss();
|
||||||
|
|
||||||
|
toastManager.showMessageFailure(failure);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -3,6 +3,7 @@ import 'package:flutter/services.dart';
|
|||||||
import 'package:flutter_svg/flutter_svg.dart';
|
import 'package:flutter_svg/flutter_svg.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:linagora_design_flutter/linagora_design_flutter.dart';
|
import 'package:linagora_design_flutter/linagora_design_flutter.dart';
|
||||||
|
import 'package:tip_dialog/tip_dialog.dart';
|
||||||
import 'package:tmail_ui_user/features/starting_page/presentation/twake_welcome/twake_welcome_controller.dart';
|
import 'package:tmail_ui_user/features/starting_page/presentation/twake_welcome/twake_welcome_controller.dart';
|
||||||
import 'package:tmail_ui_user/features/starting_page/presentation/twake_welcome/twake_welcome_view_style.dart';
|
import 'package:tmail_ui_user/features/starting_page/presentation/twake_welcome/twake_welcome_view_style.dart';
|
||||||
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
import 'package:tmail_ui_user/main/localizations/app_localizations.dart';
|
||||||
@@ -19,32 +20,45 @@ class TwakeWelcomeView extends GetWidget<TwakeWelcomeController> {
|
|||||||
DeviceOrientation.portraitDown
|
DeviceOrientation.portraitDown
|
||||||
]);
|
]);
|
||||||
|
|
||||||
return TwakeWelcomeScreen(
|
return Stack(
|
||||||
logo: Padding(
|
children: [
|
||||||
padding: const EdgeInsetsDirectional.only(bottom: 16),
|
TwakeWelcomeScreen(
|
||||||
child: SvgPicture.asset(
|
logo: Padding(
|
||||||
controller.imagePaths.icLogoTwakeWelcome,
|
padding: const EdgeInsetsDirectional.only(bottom: 16),
|
||||||
width: TwakeWelcomeViewStyle.logoWidth,
|
child: SvgPicture.asset(
|
||||||
height: TwakeWelcomeViewStyle.logoHeight,
|
controller.imagePaths.icLogoTwakeWelcome,
|
||||||
|
width: TwakeWelcomeViewStyle.logoWidth,
|
||||||
|
height: TwakeWelcomeViewStyle.logoHeight,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
focusColor: Colors.transparent,
|
||||||
|
hoverColor: Colors.transparent,
|
||||||
|
highlightColor: Colors.transparent,
|
||||||
|
overlayColor: WidgetStateProperty.all(Colors.transparent),
|
||||||
|
signInTitle: AppConfig.isSaasPlatForm
|
||||||
|
? AppLocalizations.of(context).signIn.capitalizeFirst ?? ''
|
||||||
|
: null,
|
||||||
|
onSignInOnTap: () => controller.onClickSignIn(context),
|
||||||
|
createTwakeIdTitle: AppConfig.isSaasPlatForm
|
||||||
|
? AppLocalizations.of(context).createTwakeId
|
||||||
|
: null,
|
||||||
|
useCompanyServerTitle: AppLocalizations.of(context).useCompanyServer,
|
||||||
|
description: AppLocalizations.of(context).descriptionWelcomeTo,
|
||||||
|
privacyPolicy: AppLocalizations.of(context).privacyPolicy,
|
||||||
|
descriptionPrivacyPolicy: AppLocalizations.of(context).byContinuingYouAreAgreeingToOur,
|
||||||
|
onPrivacyPolicyOnTap: controller.onClickPrivacyPolicy,
|
||||||
|
onUseCompanyServerOnTap: controller.handleUseCompanyServer,
|
||||||
),
|
),
|
||||||
),
|
TipDialogContainer(
|
||||||
focusColor: Colors.transparent,
|
duration: const Duration(seconds: 2),
|
||||||
hoverColor: Colors.transparent,
|
outsideTouchable: true,
|
||||||
highlightColor: Colors.transparent,
|
onOutsideTouch: (tipDialog) {
|
||||||
overlayColor: WidgetStateProperty.all(Colors.transparent),
|
if (tipDialog is TipDialog && tipDialog.type == TipDialogType.LOADING) {
|
||||||
signInTitle: AppConfig.isSaasPlatForm
|
TipDialogHelper.dismiss();
|
||||||
? AppLocalizations.of(context).signIn.capitalizeFirst ?? ''
|
}
|
||||||
: null,
|
}
|
||||||
onSignInOnTap: controller.onClickSignIn,
|
)
|
||||||
createTwakeIdTitle: AppConfig.isSaasPlatForm
|
],
|
||||||
? AppLocalizations.of(context).createTwakeId
|
|
||||||
: null,
|
|
||||||
useCompanyServerTitle: AppLocalizations.of(context).useCompanyServer,
|
|
||||||
description: AppLocalizations.of(context).descriptionWelcomeTo,
|
|
||||||
privacyPolicy: AppLocalizations.of(context).privacyPolicy,
|
|
||||||
descriptionPrivacyPolicy: AppLocalizations.of(context).byContinuingYouAreAgreeingToOur,
|
|
||||||
onPrivacyPolicyOnTap: controller.onClickPrivacyPolicy,
|
|
||||||
onUseCompanyServerOnTap: controller.handleUseCompanyServer,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4059,5 +4059,11 @@
|
|||||||
"type": "text",
|
"type": "text",
|
||||||
"placeholders_order": [],
|
"placeholders_order": [],
|
||||||
"placeholders": {}
|
"placeholders": {}
|
||||||
|
},
|
||||||
|
"sigInSaasFailed": "Login failed. Please check again.",
|
||||||
|
"@sigInSaasFailed": {
|
||||||
|
"type": "text",
|
||||||
|
"placeholders_order": [],
|
||||||
|
"placeholders": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4259,4 +4259,11 @@ class AppLocalizations {
|
|||||||
name: 'useCompanyServer',
|
name: 'useCompanyServer',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String get sigInSaasFailed {
|
||||||
|
return Intl.message(
|
||||||
|
'Login failed. Please check again.',
|
||||||
|
name: 'sigInSaasFailed',
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import 'package:tmail_ui_user/features/home/data/exceptions/session_exceptions.d
|
|||||||
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart';
|
import 'package:tmail_ui_user/features/home/domain/state/get_session_state.dart';
|
||||||
import 'package:tmail_ui_user/features/login/data/network/oidc_error.dart';
|
import 'package:tmail_ui_user/features/login/data/network/oidc_error.dart';
|
||||||
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
|
import 'package:tmail_ui_user/features/login/domain/exceptions/authentication_exception.dart';
|
||||||
|
import 'package:tmail_ui_user/features/starting_page/domain/state/sign_in_saas_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/empty_spam_folder_state.dart';
|
||||||
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
import 'package:tmail_ui_user/features/thread/domain/state/move_multiple_email_to_mailbox_state.dart';
|
||||||
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
import 'package:tmail_ui_user/main/exceptions/remote_exception.dart';
|
||||||
@@ -64,6 +65,8 @@ class ToastManager {
|
|||||||
&& failure.emailActionType == EmailActionType.moveToSpam
|
&& failure.emailActionType == EmailActionType.moveToSpam
|
||||||
&& failure.moveAction == MoveAction.moving) {
|
&& failure.moveAction == MoveAction.moving) {
|
||||||
message = AppLocalizations.of(currentContext!).markAsSpamFailed;
|
message = AppLocalizations.of(currentContext!).markAsSpamFailed;
|
||||||
|
} else if (failure is SignInSaasFailure) {
|
||||||
|
message = AppLocalizations.of(currentContext!).sigInSaasFailed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message?.isNotEmpty == true) {
|
if (message?.isNotEmpty == true) {
|
||||||
|
|||||||
@@ -1330,6 +1330,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
|
loading_view:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: loading_view
|
||||||
|
sha256: "3d31c2c5293c2e3518b7330ffdc2fab5c83daaa9218cc45d4406c875f08f0795"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
logging:
|
logging:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -2016,6 +2024,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.1"
|
||||||
|
tip_dialog:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: tip_dialog
|
||||||
|
sha256: edc1ebbb4b9f9575220c85206cf6986921c2b63d173744be0babac00c2e48bd0
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.0"
|
||||||
typed_data:
|
typed_data:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -255,6 +255,8 @@ dependencies:
|
|||||||
|
|
||||||
web_socket_channel: 2.4.3
|
web_socket_channel: 2.4.3
|
||||||
|
|
||||||
|
tip_dialog: 4.0.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|||||||
Reference in New Issue
Block a user