//@flow import React from "react"; import { Redirect, withRouter } from "react-router-dom"; import injectSheet from "react-jss"; import { translate } from "react-i18next"; import { login, isAuthenticated, isLoginPending, getLoginFailure } from "../modules/auth"; import { connect } from "react-redux"; import { InputField } from "../components/forms"; import { SubmitButton } from "../components/buttons"; import classNames from "classnames"; import ErrorNotification from "../components/ErrorNotification"; import Image from "../components/Image"; const styles = { avatar: { marginTop: "-70px", paddingBottom: "20px" }, avatarImage: { border: "1px solid lightgray", padding: "5px", background: "#fff", borderRadius: "50%", width: "128px", height: "128px" }, avatarSpacing: { marginTop: "5rem" } }; type Props = { authenticated: boolean, loading: boolean, error: Error, // dispatcher props login: (username: string, password: string) => void, // context props t: string => string, classes: any, from: any, location: any }; type State = { username: string, password: string }; class Login extends React.Component { constructor(props: Props) { super(props); this.state = { username: "", password: "" }; } handleUsernameChange = (value: string) => { this.setState({ username: value }); }; handlePasswordChange = (value: string) => { this.setState({ password: value }); }; handleSubmit = (event: Event) => { event.preventDefault(); if (this.isValid()) { this.props.login(this.state.username, this.state.password); } }; isValid() { return this.state.username && this.state.password; } isInValid() { return !this.isValid(); } renderRedirect = () => { const { from } = this.props.location.state || { from: { pathname: "/" } }; return ; }; render() { const { authenticated, loading, error, t, classes } = this.props; if (authenticated) { return this.renderRedirect(); } return (

{t("login.title")}

{t("login.subtitle")}

{t("login.logo-alt")}
); } } const mapStateToProps = state => { const authenticated = isAuthenticated(state); const loading = isLoginPending(state); const error = getLoginFailure(state); return { authenticated, loading, error }; }; const mapDispatchToProps = dispatch => { return { login: (username: string, password: string) => dispatch(login(username, password)) }; }; const StyledLogin = injectSheet(styles)( connect( mapStateToProps, mapDispatchToProps )(translate("commons")(Login)) ); export default withRouter(StyledLogin);