You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
2.6 KiB
98 lines
2.6 KiB
import React, { Component } from "react"; |
|
import { connect } from "react-redux"; |
|
import { Link, Redirect } from "react-router-dom"; |
|
import { Button, Container, Form, Header, Message } from "semantic-ui-react"; |
|
|
|
import { |
|
clearAuthRequestError, |
|
clearAuthRequestSuccess, |
|
setFormEmail |
|
} from "../../actions/auth/reducer.actions"; |
|
import { sendForgotPasswordRequest } from "../../actions/auth/saga.actions"; |
|
import Error from "../Shared/Error"; |
|
|
|
class ForgotPassword extends Component { |
|
componentWillMount() { |
|
this.props.dispatch(clearAuthRequestError()); |
|
this.props.dispatch(clearAuthRequestSuccess()); |
|
} |
|
|
|
changeEmail = event => { |
|
this.props.dispatch(setFormEmail(event.target.value)); |
|
}; |
|
|
|
onSubmitForgotPassword = event => { |
|
event.preventDefault(); |
|
const { dispatch, email } = this.props; |
|
dispatch(sendForgotPasswordRequest({ email })); |
|
}; |
|
|
|
render() { |
|
const { |
|
isSendingAuthRequest, |
|
authRequestError, |
|
authRequestSuccess, |
|
email, |
|
userToken |
|
} = this.props; |
|
if (userToken) return <Redirect to={"/"} />; |
|
return ( |
|
<ForgotPasswordView |
|
isSendingAuthRequest={isSendingAuthRequest} |
|
authRequestError={authRequestError} |
|
authRequestSuccess={authRequestSuccess} |
|
email={email} |
|
changeEmail={this.changeEmail} |
|
onSubmitForgotPassword={this.onSubmitForgotPassword} |
|
/> |
|
); |
|
} |
|
} |
|
|
|
function mapStateToProps(state) { |
|
return { ...state.auth }; |
|
} |
|
|
|
const ForgotPasswordView = ({ |
|
isSendingAuthRequest, |
|
authRequestError, |
|
authRequestSuccess, |
|
email, |
|
changeEmail, |
|
onSubmitForgotPassword |
|
}) => ( |
|
<Container> |
|
<Header>Forgot Password</Header> |
|
<p>Enter your email and we will send you a link to reset your password.</p> |
|
<Form |
|
loading={isSendingAuthRequest} |
|
onSubmit={onSubmitForgotPassword} |
|
error={!!authRequestError} |
|
success={!!authRequestSuccess} |
|
> |
|
<Form.Field> |
|
<label>Email</label> |
|
<input |
|
placeholder="bob@gmail.com" |
|
type="email" |
|
value={email} |
|
onChange={changeEmail} |
|
/> |
|
</Form.Field> |
|
<Error |
|
header="Forgot Password Request failed!" |
|
error={authRequestError} |
|
/> |
|
<Message success> |
|
<Message.Header>Password Reset Sent!</Message.Header> |
|
<p>If the email exists, a password reset link will be sent to it.</p> |
|
</Message> |
|
<Button.Group> |
|
<Button type="submit" primary>Request Password Reset</Button> |
|
<Button as={Link} to="/auth/login" secondary>Login</Button> |
|
</Button.Group> |
|
</Form> |
|
</Container> |
|
); |
|
|
|
export default connect(mapStateToProps)(ForgotPassword);
|
|
|