From b55a46cb267c3ec879c92edf376dae0f41c950f1 Mon Sep 17 00:00:00 2001 From: uzairr Date: Mon, 1 Feb 2021 19:35:19 +0500 Subject: [PATCH] fix scroll on login page errors --- src/login/LoginFailure.jsx | 1 - src/login/LoginPage.jsx | 5 ++++- src/login/tests/LoginPage.test.jsx | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/login/LoginFailure.jsx b/src/login/LoginFailure.jsx index a3a2cc23..135ff010 100644 --- a/src/login/LoginFailure.jsx +++ b/src/login/LoginFailure.jsx @@ -16,7 +16,6 @@ import messages from './messages'; const LoginFailureMessage = (props) => { const { intl } = props; const { context, errorCode, value } = props.loginError; - let errorList; switch (errorCode) { diff --git a/src/login/LoginPage.jsx b/src/login/LoginPage.jsx index c5bd6b20..108b0e8f 100644 --- a/src/login/LoginPage.jsx +++ b/src/login/LoginPage.jsx @@ -46,6 +46,7 @@ class LoginPage extends React.Component { passwordValid: false, formValid: false, institutionLogin: false, + isSubmitted: false, }; } @@ -69,6 +70,7 @@ class LoginPage extends React.Component { handleSubmit = (e) => { e.preventDefault(); + this.setState({ isSubmitted: true }); const params = (new URL(document.location)).searchParams; const payload = { email: this.state.email, @@ -87,7 +89,6 @@ class LoginPage extends React.Component { this.validateInput('password', payload.password); return; } - this.props.loginRequest(payload); } @@ -118,6 +119,7 @@ class LoginPage extends React.Component { handleOnChange(e) { this.setState({ [e.target.name]: e.target.value, + isSubmitted: false, }); this.validateInput(e.target.name, e.target.value); } @@ -191,6 +193,7 @@ class LoginPage extends React.Component { /> )} {this.props.loginError ? : null} + {this.state.isSubmitted ? window.scrollTo({ left: 0, top: 0, behavior: 'smooth' }) : null} {activationMsgType && } {this.props.forgotPassword.status === 'complete' ? : null}
diff --git a/src/login/tests/LoginPage.test.jsx b/src/login/tests/LoginPage.test.jsx index 28861251..f18cbcd3 100644 --- a/src/login/tests/LoginPage.test.jsx +++ b/src/login/tests/LoginPage.test.jsx @@ -12,6 +12,10 @@ import LoginPage from '../LoginPage'; import { RenderInstitutionButton } from '../../common-components'; import { PENDING_STATE } from '../../data/constants'; +import LoginFailureMessage from '../LoginFailure'; + +const IntlLoginFailureMessage = injectIntl(LoginFailureMessage); + jest.mock('@edx/frontend-platform/analytics'); analytics.sendTrackEvent = jest.fn(); @@ -320,4 +324,14 @@ describe('LoginPage', () => { const loginPage = mount(reduxWrapper()); expect(loginPage.find()).toBeTruthy(); }); + + it('form only be scrollable on submission', () => { + const loginPage = mount(reduxWrapper()); + + loginPage.find('input#loginPassword').simulate('change', { target: { value: 'test@example.com', name: 'password' } }); + loginPage.find('button.btn-brand').simulate('click'); + + expect(loginPage.find()).toBeTruthy(); + expect(loginPage.find('LoginPage').state('isSubmitted')).toEqual(true); + }); });