frontend/smart-hut/src/views/Login.js

126 lines
3.1 KiB
JavaScript
Raw Normal View History

2020-05-12 13:18:33 +00:00
import React, { Component } from 'react';
2020-03-23 20:24:17 +00:00
import {
Button,
Form,
Grid,
Header,
Image,
Message,
Icon,
Input,
2020-05-12 13:18:33 +00:00
} from 'semantic-ui-react';
import { withRouter } from 'react-router-dom';
import { connect } from 'react-redux';
import { RemoteService } from '../remote';
class Login extends Component {
constructor(props) {
super(props);
this.state = {
2020-05-12 13:18:33 +00:00
user: '',
password: '',
2020-03-02 15:59:32 +00:00
fireRedirect: false,
2020-05-12 13:18:33 +00:00
error: { state: false, message: '' },
};
}
handleLogin = (e) => {
2020-03-02 15:59:32 +00:00
e.preventDefault();
2020-03-23 20:24:17 +00:00
this.props
.login(this.state.user, this.state.password)
2020-05-12 13:18:33 +00:00
.then(() => this.props.history.push('/dashboard'))
2020-03-23 20:24:17 +00:00
.catch((err) => {
this.setState({
2020-05-12 13:18:33 +00:00
error: { state: true, message: err.messages.join(' - ') },
});
2020-03-23 20:24:17 +00:00
});
};
onChangeHandler = (event) => {
2020-05-12 13:18:33 +00:00
const nam = event.target.name;
const val = event.target.value;
2020-03-23 20:24:17 +00:00
this.setState({ [nam]: val });
};
2020-05-12 13:18:33 +00:00
toggle = () => this.setState((prevState) => ({ rememberme: !prevState.rememberme }));
render() {
return (
2020-05-12 13:18:33 +00:00
<>
<Button circular style={{ margin: '2em' }} href="/">
2020-03-23 20:24:17 +00:00
<Icon name="arrow alternate circle left" />
Go Home
2020-03-04 17:49:56 +00:00
</Button>
2020-03-23 20:24:17 +00:00
<Grid
textAlign="center"
2020-05-12 13:18:33 +00:00
style={{ height: '70vh' }}
2020-03-23 20:24:17 +00:00
verticalAlign="middle"
>
<Grid.Column style={{ maxWidth: 450 }}>
<Header as="h2" color="blue" textAlign="center">
2020-05-12 13:18:33 +00:00
<Image src="img/logo.png" />
{' '}
Log-in to SmartHut
</Header>
2020-03-23 20:24:17 +00:00
<Form
size="large"
2020-05-12 13:18:33 +00:00
style={{ marginTop: '2em' }}
2020-03-23 20:24:17 +00:00
error={this.state.error.state}
>
<Message
error
header="Login Error"
content={this.state.error.message}
/>
<Form.Input
control={Input}
type="text"
icon="user"
name="user"
iconPosition="left"
placeholder="Username or E-mail"
onChange={this.onChangeHandler}
/>
<Form.Input
icon="lock"
iconPosition="left"
placeholder="Password"
name="password"
type="password"
onChange={this.onChangeHandler}
/>
2020-03-23 20:24:17 +00:00
<Button
color="blue"
fluid
size="large"
2020-04-09 12:48:24 +00:00
onClick={this.handleLogin}
2020-03-23 20:24:17 +00:00
>
Login
</Button>
</Form>
<Message>
2020-03-23 20:24:17 +00:00
<p>
<a href="/forgot-password">Forgot Password?</a>
</p>
<p>
2020-05-12 13:18:33 +00:00
New to us?
{' '}
<a href="/signup"> Sign Up</a>
2020-03-23 20:24:17 +00:00
</p>
</Message>
</Grid.Column>
</Grid>
2020-05-12 13:18:33 +00:00
</>
2020-03-23 20:24:17 +00:00
);
}
}
const mapStateToProps = (state, _) => ({ loggedIn: state.login.loggedIn });
2020-04-09 12:48:24 +00:00
const LoginContainer = connect(
mapStateToProps,
2020-05-12 13:18:33 +00:00
RemoteService,
2020-04-09 12:48:24 +00:00
)(withRouter(Login));
export default LoginContainer;