From cbf8e446afb0fa3bae3c65ebca77bfa117a02db0 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Sun, 9 Apr 2023 21:10:24 +0300 Subject: [PATCH] Change to disconnect_mailer route --- .../repositories/settings_repository.dart | 22 +++++++++++ lib/redux/company/company_reducer.dart | 2 +- lib/redux/settings/settings_actions.dart | 4 +- lib/redux/settings/settings_middleware.dart | 37 ++++++++++++++++++- lib/redux/settings/settings_reducer.dart | 8 +++- lib/redux/user/user_reducer.dart | 4 +- 6 files changed, 70 insertions(+), 7 deletions(-) diff --git a/lib/data/repositories/settings_repository.dart b/lib/data/repositories/settings_repository.dart index f18117285..f4b44b0c7 100644 --- a/lib/data/repositories/settings_repository.dart +++ b/lib/data/repositories/settings_repository.dart @@ -87,6 +87,28 @@ class SettingsRepository { return userResponse.data; } + Future disconnectOAuthMailer( + Credentials credentials, + String password, + String idToken, + String userId, + ) async { + dynamic response; + + final url = credentials.url + + '/users/$userId/disconnect_mailer?include=company_user'; + response = await webClient.post( + url, + credentials.token, + password: password, + ); + + final UserItemResponse userResponse = + serializers.deserializeWith(UserItemResponse.serializer, response); + + return userResponse.data; + } + Future connectGmailUser( Credentials credentials, String password, diff --git a/lib/redux/company/company_reducer.dart b/lib/redux/company/company_reducer.dart index 7d5f157a6..c5178a786 100644 --- a/lib/redux/company/company_reducer.dart +++ b/lib/redux/company/company_reducer.dart @@ -135,7 +135,7 @@ Reducer userCompanyEntityReducer = combineReducers([ ..user.replace(action.user) ..settings.replace(action.user.userCompany.settings)), ), - TypedReducer( + TypedReducer( (userCompany, action) => userCompany.rebuild((b) => b..user.replace(action.user)), ), diff --git a/lib/redux/settings/settings_actions.dart b/lib/redux/settings/settings_actions.dart index d6539f19b..3ea2648a9 100644 --- a/lib/redux/settings/settings_actions.dart +++ b/lib/redux/settings/settings_actions.dart @@ -150,9 +150,9 @@ class ConnecOAuthUserRequest implements StartSaving { final String accessToken; } -class ConnecOAuthUserSuccess +class ConnectOAuthUserSuccess implements StopSaving, PersistData, PersistUI, UserVerifiedPassword { - ConnecOAuthUserSuccess(this.user); + ConnectOAuthUserSuccess(this.user); final UserEntity user; } diff --git a/lib/redux/settings/settings_middleware.dart b/lib/redux/settings/settings_middleware.dart index d454e1920..b7089c377 100644 --- a/lib/redux/settings/settings_middleware.dart +++ b/lib/redux/settings/settings_middleware.dart @@ -29,6 +29,7 @@ List> createStoreSettingsMiddleware([ final saveCompany = _saveCompany(repository); final saveAuthUser = _saveAuthUser(repository); final connectOAuthUser = _connectOAuthUser(repository); + final disconnectOAuthMailer = _disconnectOAuthMailer(repository); final connectGmailUser = _connectGmailUser(repository); final saveSettings = _saveSettings(repository); final uploadLogo = _uploadLogo(repository); @@ -40,6 +41,8 @@ List> createStoreSettingsMiddleware([ TypedMiddleware(saveCompany), TypedMiddleware(saveAuthUser), TypedMiddleware(connectOAuthUser), + TypedMiddleware( + disconnectOAuthMailer), TypedMiddleware(connectGmailUser), TypedMiddleware(disableTwoFactor), TypedMiddleware(saveSettings), @@ -146,7 +149,7 @@ Middleware _connectOAuthUser(SettingsRepository settingsRepository) { action.accessToken, ) .then((user) { - store.dispatch(ConnecOAuthUserSuccess(user)); + store.dispatch(ConnectOAuthUserSuccess(user)); if (action.completer != null) { action.completer.complete(); } @@ -165,6 +168,38 @@ Middleware _connectOAuthUser(SettingsRepository settingsRepository) { }; } +Middleware _disconnectOAuthMailer( + SettingsRepository settingsRepository) { + return (Store store, dynamic dynamicAction, NextDispatcher next) { + final action = dynamicAction as DisconnectOAuthMailerRequest; + + settingsRepository + .disconnectOAuthMailer( + store.state.credentials, + action.password, + action.idToken, + action.user.id, + ) + .then((user) { + store.dispatch(DisconnectOAuthMailerSuccess(user)); + if (action.completer != null) { + action.completer.complete(); + } + }).catchError((Object error) { + print(error); + store.dispatch(DisconnectOAuthMailerFailure(error)); + if ('$error'.contains('412')) { + store.dispatch(UserUnverifiedPassword()); + } + if (action.completer != null) { + action.completer.completeError(error); + } + }); + + next(action); + }; +} + Middleware _connectGmailUser(SettingsRepository settingsRepository) { return (Store store, dynamic dynamicAction, NextDispatcher next) { final action = dynamicAction as ConnecGmailUserRequest; diff --git a/lib/redux/settings/settings_reducer.dart b/lib/redux/settings/settings_reducer.dart index ae847eb11..7e4739b5e 100644 --- a/lib/redux/settings/settings_reducer.dart +++ b/lib/redux/settings/settings_reducer.dart @@ -98,7 +98,13 @@ Reducer settingsUIReducer = combineReducers([ ..origUser.replace(action.user) ..isChanged = false); }), - TypedReducer((state, action) { + TypedReducer((state, action) { + return state.rebuild((b) => b + ..user.replace(action.user) + ..origUser.replace(action.user) + ..isChanged = false); + }), + TypedReducer((state, action) { return state.rebuild((b) => b ..user.replace(action.user) ..origUser.replace(action.user) diff --git a/lib/redux/user/user_reducer.dart b/lib/redux/user/user_reducer.dart index 6485eb33f..01c789739 100644 --- a/lib/redux/user/user_reducer.dart +++ b/lib/redux/user/user_reducer.dart @@ -195,7 +195,7 @@ ListUIState _clearListMultiselect( final usersReducer = combineReducers([ TypedReducer(_updateUser), TypedReducer(_updateAuthUser), - TypedReducer(_connectOAuthUser), + TypedReducer(_connectOAuthUser), TypedReducer(_connectGmailUser), TypedReducer(_addUser), TypedReducer(_setLoadedUsers), @@ -252,7 +252,7 @@ UserState _updateAuthUser(UserState userState, SaveAuthUserSuccess action) { } UserState _connectOAuthUser( - UserState userState, ConnecOAuthUserSuccess action) { + UserState userState, ConnectOAuthUserSuccess action) { return userState.rebuild((b) => b..map[action.user.id] = action.user); }