This commit is contained in:
Hillel Coren 2021-03-21 23:25:06 +02:00
parent 6237bc33c3
commit 28e68cf3dc
4 changed files with 96 additions and 13 deletions

View File

@ -81,6 +81,35 @@ class SettingsRepository {
return userResponse.data;
}
Future<UserEntity> connectGmailUser(
Credentials credentials,
String password,
String idToken,
String serverAuthCode,
) async {
dynamic response;
final url =
credentials.url + '/connected_account/gmail?include=company_user';
response = await webClient.post(
url,
credentials.token,
data: json.encode(
{
'id_token': idToken,
'server_auth_code': serverAuthCode,
},
),
password: password,
idToken: idToken,
);
final UserItemResponse userResponse =
serializers.deserializeWith(UserItemResponse.serializer, response);
return userResponse.data;
}
Future<UserCompanyEntity> saveUserSettings(
Credentials credentials, UserEntity user) async {
final data = serializers.serializeWith(UserEntity.serializer, user);

View File

@ -143,6 +143,33 @@ class ConnecOAuthUserFailure implements StopSaving {
final Object error;
}
class ConnecGmailUserRequest implements StartSaving {
ConnecGmailUserRequest({
@required this.serverAuthCode,
@required this.idToken,
this.completer,
this.password,
});
final Completer completer;
final String idToken;
final String password;
final String serverAuthCode;
}
class ConnecGmailUserSuccess
implements StopSaving, PersistData, PersistUI, UserVerifiedPassword {
ConnecGmailUserSuccess(this.user);
final UserEntity user;
}
class ConnecGmailUserFailure implements StopSaving {
ConnecGmailUserFailure(this.error);
final Object error;
}
class FilterSettings implements PersistUI {
FilterSettings(this.filter);

View File

@ -24,6 +24,7 @@ List<Middleware<AppState>> createStoreSettingsMiddleware([
final saveCompany = _saveCompany(repository);
final saveAuthUser = _saveAuthUser(repository);
final connectOAuthUser = _connectOAuthUser(repository);
final connectGmailUser = _connectGmailUser(repository);
final saveSettings = _saveSettings(repository);
final uploadLogo = _uploadLogo(repository);
final saveDocument = _saveDocument(repository);
@ -33,6 +34,7 @@ List<Middleware<AppState>> createStoreSettingsMiddleware([
TypedMiddleware<AppState, SaveCompanyRequest>(saveCompany),
TypedMiddleware<AppState, SaveAuthUserRequest>(saveAuthUser),
TypedMiddleware<AppState, ConnecOAuthUserRequest>(connectOAuthUser),
TypedMiddleware<AppState, ConnecGmailUserRequest>(connectGmailUser),
TypedMiddleware<AppState, SaveUserSettingsRequest>(saveSettings),
TypedMiddleware<AppState, UploadLogoRequest>(uploadLogo),
TypedMiddleware<AppState, SaveCompanyDocumentRequest>(saveDocument),
@ -130,8 +132,8 @@ Middleware<AppState> _connectOAuthUser(SettingsRepository settingsRepository) {
final action = dynamicAction as ConnecOAuthUserRequest;
settingsRepository
.connectOAuthUser(store.state.credentials, action.password,
action.idToken)
.connectOAuthUser(
store.state.credentials, action.password, action.idToken)
.then((user) {
store.dispatch(ConnecOAuthUserSuccess(user));
if (action.completer != null) {
@ -152,6 +154,33 @@ Middleware<AppState> _connectOAuthUser(SettingsRepository settingsRepository) {
};
}
Middleware<AppState> _connectGmailUser(SettingsRepository settingsRepository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as ConnecGmailUserRequest;
settingsRepository
.connectGmailUser(store.state.credentials, action.password,
action.idToken, action.serverAuthCode)
.then((user) {
store.dispatch(ConnecGmailUserSuccess(user));
if (action.completer != null) {
action.completer.complete();
}
}).catchError((Object error) {
print(error);
store.dispatch(ConnecGmailUserFailure(error));
if ('$error'.contains('412')) {
store.dispatch(UserUnverifiedPassword());
}
if (action.completer != null) {
action.completer.completeError(error);
}
});
next(action);
};
}
Middleware<AppState> _saveSettings(SettingsRepository settingsRepository) {
return (Store<AppState> store, dynamic dynamicAction, NextDispatcher next) {
final action = dynamicAction as SaveUserSettingsRequest;

View File

@ -52,6 +52,9 @@ class UserDetailsVM {
user: state.uiState.settingsUIState.user,
onChanged: (user) => store.dispatch(UpdateUserSettings(user: user)),
onConnectGmailPressed: (context) {
final completer = snackBarCompleter<Null>(
context, AppLocalization.of(context).connectedGmail);
passwordCallback(
context: context,
callback: (password, idToken) async {
@ -67,17 +70,12 @@ class UserDetailsVM {
message: AppLocalization.of(context)
.anErrorOccurredTryAgain);
} else {
print('## TODO...');
/*
store.dispatch(
ConnecOAuthUserRequest(
provider: UserEntity.OAUTH_PROVIDER_GOOGLE,
password: password,
idToken: idToken,
completer: completer,
),
);
*/
store.dispatch(ConnecGmailUserRequest(
serverAuthCode: serverAuthCode,
idToken: idToken,
completer: completer,
password: password,
));
}
});
if (!signedIn) {