summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorErik Larkö <erik@mullvad.net>2017-10-02 07:42:14 +0200
committerErik Larkö <erik@mullvad.net>2017-10-02 07:42:14 +0200
commit284f3dd5a8526a4292c2ce8ecab3491d576c4ac2 (patch)
treec99db0836e279287b19fdd3299192b6f7ea0aa75
parentbe7250fade3c007132a69304d1cc68bc819d3e06 (diff)
parent5ace2e6a5db0be1024aad18606313d7aab1ffa27 (diff)
downloadmullvadvpn-284f3dd5a8526a4292c2ce8ecab3491d576c4ac2.tar.xz
mullvadvpn-284f3dd5a8526a4292c2ce8ecab3491d576c4ac2.zip
Merge branch 'partial-account-token-in-redux'
-rw-r--r--app/components/Login.js15
-rw-r--r--app/containers/LoginPage.js3
-rw-r--r--app/redux/account/actions.js24
-rw-r--r--app/redux/account/reducers.js4
-rw-r--r--test/components/Login.spec.js6
5 files changed, 37 insertions, 15 deletions
diff --git a/app/components/Login.js b/app/components/Login.js
index 1e1d7dbb5f..784d92daa8 100644
--- a/app/components/Login.js
+++ b/app/components/Login.js
@@ -13,6 +13,7 @@ export type LoginPropTypes = {
onSettings: ?(() => void),
onFirstChangeAfterFailure: () => void,
onExternalLink: (type: string) => void,
+ onAccountTokenChange: (string) => void,
};
export default class Login extends Component {
@@ -20,19 +21,15 @@ export default class Login extends Component {
state = {
notifyOnFirstChangeAfterFailure: false,
isActive: false,
- unsubmittedAccountToken: '',
};
onCreateAccount = () => this.props.onExternalLink('createAccount');
onFocus = () => this.setState({ isActive: true });
onBlur = () => this.setState({ isActive: false });
onLogin = () => {
- const accountToken = this.state.unsubmittedAccountToken;
+ const accountToken = this.props.account.accountToken;
if(accountToken && accountToken.length > 0) {
this.props.onLogin(accountToken);
- this.setState({
- unsubmittedAccountToken: '',
- });
}
}
@@ -42,9 +39,7 @@ export default class Login extends Component {
this.setState({ notifyOnFirstChangeAfterFailure: false });
this.props.onFirstChangeAfterFailure();
}
- this.setState({
- unsubmittedAccountToken: val,
- });
+ this.props.onAccountTokenChange(val);
}
formTitle(s: LoginState): string {
@@ -168,9 +163,7 @@ export default class Login extends Component {
_createLoginForm(): React.Element<*> {
const { status, error } = this.props.account;
- const accountToken = status === 'logging in'
- ? this.props.account.accountToken
- : this.state.unsubmittedAccountToken;
+ const accountToken = this.props.account.accountToken;
const inputDisabled = status === 'logging in';
diff --git a/app/containers/LoginPage.js b/app/containers/LoginPage.js
index ef4698fad1..457be7a6f2 100644
--- a/app/containers/LoginPage.js
+++ b/app/containers/LoginPage.js
@@ -14,7 +14,8 @@ const mapDispatchToProps = (dispatch, props) => {
onSettings: () => dispatch(push('/settings')),
onLogin: (account) => login(backend, account),
onFirstChangeAfterFailure: () => dispatch(accountActions.resetLoginError()),
- onExternalLink: (type) => shell.openExternal(links[type])
+ onExternalLink: (type) => shell.openExternal(links[type]),
+ onAccountTokenChange: (token) => dispatch(accountActions.updateAccountToken(token)),
};
};
diff --git a/app/redux/account/actions.js b/app/redux/account/actions.js
index 30089b1d56..d528f4f3d0 100644
--- a/app/redux/account/actions.js
+++ b/app/redux/account/actions.js
@@ -23,6 +23,11 @@ type ResetLoginErrorAction = {
type: 'RESET_LOGIN_ERROR',
};
+type UpdateAccountTokenAction = {
+ type: 'UPDATE_ACCOUNT_TOKEN',
+ token: string,
+};
+
export type AccountAction = StartLoginAction
| LoginSuccessfulAction
| LoginFailedAction
@@ -66,7 +71,24 @@ function resetLoginError(): ResetLoginErrorAction {
};
}
+function updateAccountToken(token: string): UpdateAccountTokenAction {
+ return {
+ type: 'UPDATE_ACCOUNT_TOKEN',
+ token: token,
+ };
+}
+
const login = (backend: Backend, account: string) => () => backend.login(account);
const logout = (backend: Backend) => () => backend.logout();
-export default { login, logout, startLogin, loginSuccessful, loginFailed, loggedOut, autoLoginFailed, resetLoginError };
+export default {
+ login,
+ logout,
+ startLogin,
+ loginSuccessful,
+ loginFailed,
+ loggedOut,
+ autoLoginFailed,
+ resetLoginError,
+ updateAccountToken,
+};
diff --git a/app/redux/account/reducers.js b/app/redux/account/reducers.js
index 6107f08195..27530499c9 100644
--- a/app/redux/account/reducers.js
+++ b/app/redux/account/reducers.js
@@ -53,6 +53,10 @@ export default function(state: AccountReduxState = initialState, action: ReduxAc
status: 'none',
error: null,
}};
+ case 'UPDATE_ACCOUNT_TOKEN':
+ return { ...state, ...{
+ accountToken: action.token,
+ }};
}
return state;
diff --git a/test/components/Login.spec.js b/test/components/Login.spec.js
index d3d38be410..9918dc6e1c 100644
--- a/test/components/Login.spec.js
+++ b/test/components/Login.spec.js
@@ -67,6 +67,9 @@ describe('components/Login', () => {
it('logs in with the entered account number when clicking the login icon', (done) => {
const component = renderNotLoggedIn();
component.setProps({
+ account: {
+ accountToken: '12345',
+ },
onLogin: (an) => {
try {
expect(an).to.equal('12345');
@@ -76,8 +79,6 @@ describe('components/Login', () => {
}
},
});
- const accountInput = component.find(AccountInput);
- setInputText(accountInput, '12345');
component.find('.login-form__submit').simulate('click');
});
@@ -97,6 +98,7 @@ const defaultProps = {
onChange: () => {},
onFirstChangeAfterFailure: () => {},
onExternalLink: () => {},
+ onAccountTokenChange: () => {},
};
function renderLoggedIn() {