diff --git a/lib/redux/auth/auth_actions.dart b/lib/redux/auth/auth_actions.dart index b67f501ac..f2641287b 100644 --- a/lib/redux/auth/auth_actions.dart +++ b/lib/redux/auth/auth_actions.dart @@ -85,6 +85,8 @@ class UserSignUpRequest implements StartLoading { this.email, this.password, this.platform, + this.photoUrl, + this.oauthId, }); final Completer completer; @@ -93,4 +95,6 @@ class UserSignUpRequest implements StartLoading { final String email; final String password; final String platform; + final String photoUrl; + final String oauthId; } diff --git a/lib/ui/auth/login_vm.dart b/lib/ui/auth/login_vm.dart index 141ffe40e..e903d7544 100644 --- a/lib/ui/auth/login_vm.dart +++ b/lib/ui/auth/login_vm.dart @@ -7,6 +7,7 @@ import 'package:invoiceninja_flutter/redux/app/app_actions.dart'; import 'package:invoiceninja_flutter/redux/dashboard/dashboard_actions.dart'; import 'package:invoiceninja_flutter/ui/app/app_builder.dart'; import 'package:invoiceninja_flutter/utils/platforms.dart'; +import 'package:invoiceninja_flutter/utils/strings.dart'; import 'package:redux/redux.dart'; import 'package:invoiceninja_flutter/redux/app/app_state.dart'; import 'package:invoiceninja_flutter/redux/auth/auth_actions.dart'; @@ -41,6 +42,7 @@ class LoginVM { @required this.onLoginPressed, @required this.onSignUpPressed, @required this.onGoogleLoginPressed, + @required this.onGoogleSignUpPressed, }); bool isLoading; @@ -67,6 +69,7 @@ class LoginVM { final Function(BuildContext, Completer completer, {String url, String secret, String oneTimePassword}) onGoogleLoginPressed; + final Function(BuildContext, Completer completer) onGoogleSignUpPressed; static LoginVM fromStore(Store store) { final GoogleSignIn _googleSignIn = GoogleSignIn( @@ -118,6 +121,28 @@ class LoginVM { print(error); } }, + onGoogleSignUpPressed: + (BuildContext context, Completer completer) async { + try { + final account = await _googleSignIn.signIn(); + + if (account != null) { + account.authentication.then((GoogleSignInAuthentication value) { + store.dispatch(UserSignUpRequest( + completer: completer, + email: account.email, + firstName: getFirstName(account.displayName), + lastName: getLastName(account.displayName), + photoUrl: account.photoUrl, + oauthId: account.id, + )); + completer.future.then((_) => _handleLogin(context)); + }); + } + } catch (error) { + print(error); + } + }, onSignUpPressed: ( BuildContext context, Completer completer, { diff --git a/lib/utils/strings.dart b/lib/utils/strings.dart index 1d5f6371b..b7d2c64c9 100644 --- a/lib/utils/strings.dart +++ b/lib/utils/strings.dart @@ -2,3 +2,19 @@ String toSnakeCase(String value) { return value.replaceAllMapped( RegExp(r'[A-Z]'), (Match match) => '_' + match[0].toLowerCase()); } + +String getFirstName(String value) { + final parts = value.split(' '); + if (parts.length > 1) { + parts.removeLast(); + } + return parts.join(' '); +} + +String getLastName(String value) { + final parts = value.split(' '); + if (parts.length <= 1) { + return ''; + } + return parts.last; +}