bulma-dashboard-theme-worona
Version:
Theme for the Worona Dashboard.
108 lines (98 loc) • 3.41 kB
JSX
import React from 'react';
import { connect } from 'react-redux';
import { translate } from 'react-i18next';
import { reduxForm, Field } from 'redux-form';
import { Link } from 'react-router';
import Input from '../../elements/Input';
import Button from '../../elements/Button';
import * as deps from '../../deps';
import { validate } from './validate';
const submit = (values, dispatch) => {
dispatch(deps.actions.loginRequested(values.email, values.password));
};
const LoginForm = ({ handleSubmit, waiting, statusMessage, errorMessage, t }) => (
<div className="container">
<div className="columns">
<div className="column is-half is-offset-one-quarter">
<div className="control">
<form onSubmit={handleSubmit(submit)}>
<Field
name="email"
label="Email"
component={Input}
type="text"
placeholder="account@email.com"
icon="envelope"
size="large"
/>
<Field
name="password"
label="Password"
component={Input}
type="password"
placeholder="●●●●●●●"
icon="lock"
size="large"
/>
<br />
<p className="control" />
{statusMessage ? (
<article className="message">
<div className="message-body has-text-centered">
<strong>{t(statusMessage)}</strong>
</div>
</article>
) : null}
{errorMessage ? (
<article className="message is-danger">
<div className="message-body has-text-centered">
<strong>{t(errorMessage)}</strong>
</div>
</article>
) : null}
<div className="level">
<div className="level-left">
<Button
color="primary"
center
size="large"
loading={waiting}
disabled={waiting}
type="submit"
>
<strong>Login</strong>
</Button>
</div>
{/* <div className="level-right">
<Link to="/register">
Don't have an account? Register
</Link>
</div> */}
<div className="level-right">
<Link to="/forgot-password">Forgot password?</Link>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
);
LoginForm.propTypes = {
handleSubmit: React.PropTypes.func.isRequired,
waiting: React.PropTypes.bool.isRequired,
statusMessage: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.bool]),
errorMessage: React.PropTypes.oneOfType([React.PropTypes.string, React.PropTypes.bool]),
t: React.PropTypes.func
};
const LoginTranslated = translate('accounts')(LoginForm);
const LoginWithForm = reduxForm({
form: 'login',
validate,
getFormState: state => state.theme.reduxForm
})(LoginTranslated);
export default connect(state => ({
waiting: deps.selectors.getIsLoggingIn(state),
statusMessage: deps.selectors.getLoginStatus(state),
errorMessage: deps.selectors.getLoginError(state)
}))(LoginWithForm);