UNPKG

appirio-tech-react-components-test10

Version:

Topcoder UI Kit library of components for our React apps.

129 lines (114 loc) 4.27 kB
import React, { Component } from 'react' import PropTypes from 'prop-types' import Formsy from 'formsy-react' import TextInput from '../Formsy/TextInput' import PasswordInput from '../Formsy/PasswordInput' import ConnectLogo from '../Icons/ConnectLogoWhite' import Loader from '../Loader/Loader' require('./style.scss') class LoginScreen extends Component { constructor(props) { super(props) this.submit = this.submit.bind(this) this.enableButton = this.enableButton.bind(this) this.disableButton = this.disableButton.bind(this) this.reRender = this.reRender.bind(this) this.getErrorMessageForUsername = this.getErrorMessageForUsername.bind(this) this.getErrorMessageForPassword = this.getErrorMessageForPassword.bind(this) this.state = { update: true, canSubmit: false } props.vm.reRender = this.reRender } reRender() { this.setState({update: true}) } enableButton() { this.setState({ canSubmit: true }) } disableButton() { this.setState({ canSubmit: false }) } submit(form) { const {vm} = this.props vm.username = form.username vm.password = form.password vm.submit() } getErrorMessageForPassword() { const {vm} = this.props if (vm && vm.loginErrors && vm.loginErrors.WRONG_PASSWORD) { return 'That password is incorrect. Please check that you entered the right one.' } return null } getErrorMessageForUsername() { const {vm} = this.props if (vm && vm.loginErrors && vm.loginErrors.USERNAME_NONEXISTANT) { return 'We couldn\'t find a member with that "username". Please check that you entered it correctly.' } else if (vm && vm.loginErrors && vm.loginErrors.ACCOUNT_INACTIVE) { return 'Your account is inactive, please contact support for activating it.' } return null } render() { const {vm} = this.props return ( <div className="LoginScreen flex column middle center tc-ui"> <div className="top-login-button flex middle center wrap"> <span className="text">Don’t have an account?</span> <a className="tc-btn tc-btn-sm tc-btn-default flex center middle" href={vm.registrationUrl} >Register for free</a> </div> <ConnectLogo fill="#47474F" wrapperClass="top-logo with-text" title=" CONNECT" /> <ConnectLogo fill="#47474F" wrapperClass="top-logo no-text" /> <div className="container flex column middle center"> <Formsy.Form onValidSubmit={this.submit} onValid={this.enableButton} onInvalid={this.disableButton} className="form flex column middle center"> <div className="title">Log in to Topcoder</div> {vm.loading && (<Loader />)} {vm.passwordReset && (<div className="confirmation-block confirmation-block-md ng-scope">Your password has been updated. Please log in.</div>)} <TextInput wrapperClass={'input-container'} label="Username or email" type="text" name="username" validationErrors={{ isDefaultRequiredValue: 'Please enter name' }} forceErrorMessage={this.getErrorMessageForUsername()} required /> <PasswordInput wrapperClass={'input-container'} label="Password" type="password" name="password" validationError="Please enter password" forceErrorMessage={this.getErrorMessageForPassword()} required /> <a href={vm.forgotPasswordUrl} className="bottom-link">Forgot your password?</a> <button type="submit" className="tc-btn tc-btn-sm tc-btn-primary flex middle center" disabled={vm.loading || !this.state.canSubmit}>Log in</button> { vm.ssoLoginUrl && ( <a className="sso-link" href={vm.ssoLoginUrl}> <span>Single Sign On</span> </a>) } </Formsy.Form> <p className="copyright">© Topcoder 2018</p> </div> </div> ) } } LoginScreen.defaultProps = { vm: {} } LoginScreen.propTypes = { vm: PropTypes.any } export default LoginScreen