2015-06-15 16:56:17 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
import React from 'react';
|
|
|
|
import Router from 'react-router';
|
|
|
|
|
2015-06-30 14:46:28 +02:00
|
|
|
import Form from './ascribe_forms/form';
|
|
|
|
import Property from './ascribe_forms/property';
|
|
|
|
|
|
|
|
import apiUrls from '../constants/api_urls';
|
2015-06-15 16:56:17 +02:00
|
|
|
|
|
|
|
import GlobalNotificationModel from '../models/global_notification_model';
|
|
|
|
import GlobalNotificationActions from '../actions/global_notification_actions';
|
|
|
|
|
|
|
|
let PasswordResetContainer = React.createClass({
|
|
|
|
mixins: [Router.Navigation],
|
2015-06-30 14:46:28 +02:00
|
|
|
getInitialState() {
|
|
|
|
return {isRequested: false};
|
|
|
|
},
|
|
|
|
handleRequestSuccess(email){
|
|
|
|
this.setState({isRequested: email});
|
|
|
|
},
|
|
|
|
render() {
|
|
|
|
if (this.props.query.email && this.props.query.token) {
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
<div className="ascribe-login-text ascribe-login-header">
|
|
|
|
Reset the password for {this.props.query.email}
|
|
|
|
</div>
|
|
|
|
<PasswordResetForm
|
|
|
|
email={this.props.query.email}
|
|
|
|
token={this.props.query.token}/>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
if (this.state.isRequested === false) {
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
<div className="ascribe-login-text ascribe-login-header">
|
|
|
|
Reset your ascribe password
|
|
|
|
</div>
|
|
|
|
<PasswordRequestResetForm
|
|
|
|
handleRequestSuccess={this.handleRequestSuccess}/>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
else if (this.state.isRequested) {
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
<div className="ascribe-login-text ascribe-login-header">
|
|
|
|
An email has been sent to "{this.state.isRequested}"
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return <span />;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
2015-06-15 16:56:17 +02:00
|
|
|
|
2015-06-30 14:46:28 +02:00
|
|
|
let PasswordRequestResetForm = React.createClass({
|
|
|
|
handleSuccess() {
|
|
|
|
let notificationText = 'Request succesfully sent, check your email';
|
|
|
|
let notification = new GlobalNotificationModel(notificationText, 'success', 50000);
|
|
|
|
GlobalNotificationActions.appendGlobalNotification(notification);
|
|
|
|
this.props.handleRequestSuccess(this.refs.form.refs.email.state.value);
|
|
|
|
},
|
|
|
|
render() {
|
|
|
|
return (
|
|
|
|
<Form
|
|
|
|
ref="form"
|
|
|
|
url={apiUrls.users_password_reset_request}
|
|
|
|
handleSuccess={this.handleSuccess}
|
|
|
|
buttons={
|
|
|
|
<button
|
|
|
|
type="submit"
|
|
|
|
className="btn ascribe-btn ascribe-btn-login">
|
|
|
|
Reset your password
|
|
|
|
</button>}
|
|
|
|
spinner={
|
|
|
|
<button className="btn ascribe-btn ascribe-btn-login ascribe-btn-login-spinner">
|
|
|
|
<img src="https://s3-us-west-2.amazonaws.com/ascribe0/media/thumbnails/ascribe_animated_medium.gif" />
|
|
|
|
</button>
|
|
|
|
}>
|
|
|
|
<Property
|
|
|
|
name='email'
|
|
|
|
label="Email">
|
|
|
|
<input
|
|
|
|
type="email"
|
|
|
|
placeholder="Enter your email and we'll send a link"
|
|
|
|
name="email"
|
|
|
|
required/>
|
|
|
|
</Property>
|
|
|
|
<hr />
|
|
|
|
</Form>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
|
|
|
let PasswordResetForm = React.createClass({
|
|
|
|
mixins: [Router.Navigation],
|
|
|
|
|
|
|
|
getFormData(){
|
|
|
|
let data = {};
|
|
|
|
for (let ref in this.refs.form.refs){
|
|
|
|
data[this.refs.form.refs[ref].props.name] = this.refs.form.refs[ref].state.value;
|
|
|
|
}
|
|
|
|
data.email = this.props.email;
|
|
|
|
data.token = this.props.token;
|
|
|
|
return data;
|
|
|
|
},
|
|
|
|
handleSuccess() {
|
2015-06-15 16:56:17 +02:00
|
|
|
this.transitionTo('pieces');
|
|
|
|
let notification = new GlobalNotificationModel('password succesfully updated', 'success', 10000);
|
|
|
|
GlobalNotificationActions.appendGlobalNotification(notification);
|
|
|
|
},
|
|
|
|
render() {
|
|
|
|
return (
|
2015-06-30 14:46:28 +02:00
|
|
|
<Form
|
|
|
|
ref="form"
|
|
|
|
url={apiUrls.users_password_reset}
|
2015-06-15 16:56:17 +02:00
|
|
|
handleSuccess={this.handleSuccess}
|
2015-06-30 14:46:28 +02:00
|
|
|
getFormData={this.getFormData}
|
|
|
|
buttons={
|
|
|
|
<button
|
|
|
|
type="submit"
|
|
|
|
className="btn ascribe-btn ascribe-btn-login">
|
|
|
|
Reset your password
|
|
|
|
</button>}
|
|
|
|
spinner={
|
|
|
|
<button className="btn ascribe-btn ascribe-btn-login ascribe-btn-login-spinner">
|
|
|
|
<img src="https://s3-us-west-2.amazonaws.com/ascribe0/media/thumbnails/ascribe_animated_medium.gif" />
|
|
|
|
</button>
|
|
|
|
}>
|
|
|
|
<Property
|
|
|
|
name='password'
|
|
|
|
label="Password">
|
|
|
|
<input
|
|
|
|
type="password"
|
|
|
|
placeholder="Enter a new password"
|
|
|
|
name="password"
|
|
|
|
required/>
|
|
|
|
</Property>
|
|
|
|
<Property
|
|
|
|
name='password_confirm'
|
|
|
|
label="Confirm password">
|
|
|
|
<input
|
|
|
|
type="password"
|
|
|
|
placeholder="Enter your password once again"
|
|
|
|
name="password"
|
|
|
|
required/>
|
|
|
|
</Property>
|
|
|
|
<hr />
|
|
|
|
</Form>
|
|
|
|
);
|
|
|
|
}
|
2015-06-15 16:56:17 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
export default PasswordResetContainer;
|