import React, { PureComponent, SyntheticEvent, ChangeEvent } from 'react'; import { FormModel } from './LoginCtrl'; interface Props { displayForgotPassword: boolean; onChange?: (valid: boolean) => void; onSubmit: (data: FormModel) => void; isLoggingIn: boolean; passwordHint: string; loginHint: string; } interface State { user: string; password: string; email: string; valid: boolean; } export class LoginForm extends PureComponent { private userInput: HTMLInputElement; constructor(props: Props) { super(props); this.state = { user: '', password: '', email: '', valid: false, }; } componentDidMount() { this.userInput.focus(); } onSubmit = (e: SyntheticEvent) => { e.preventDefault(); const { user, password, email } = this.state; if (this.state.valid) { this.props.onSubmit({ user, password, email }); } }; onChangePassword = (e: ChangeEvent) => { this.setState({ password: e.target.value, valid: this.validate(this.state.user, e.target.value), }); }; onChangeUsername = (e: ChangeEvent) => { this.setState({ user: e.target.value, valid: this.validate(e.target.value, this.state.password), }); }; validate(user: string, password: string) { return user.length > 0 && password.length > 0; } render() { return (
{ this.userInput = input; }} type="text" name="user" className="gf-form-input login-form-input" required placeholder={this.props.loginHint} aria-label="Username input field" onChange={this.onChangeUsername} />
{!this.props.isLoggingIn ? ( ) : ( )} {this.props.displayForgotPassword ? ( ) : null}
); } }