j-toker
Version:
Simple, secure token authentication for jQuery.
133 lines (112 loc) • 3.45 kB
JSX
var React = require('react'),
BS = require('react-bootstrap'),
Input = BS.Input,
Button = BS.Button,
Modal = BS.Modal,
Panel = BS.Panel,
Auth = require('../../../../src/j-toker.js'),
ResponseModalMixin = require('../mixins/response-modal.jsx'),
Highlight = require('react-highlight'),
_ = require('lodash');
module.exports = React.createClass({
mixins: [ResponseModalMixin],
propTypes: function() {
return {
signedIn: React.PropTypes.bool,
config: React.PropTypes.string
}
},
getDefaultProps: function() {
return {
signedIn: false,
config: 'default'
}
},
getInitialState: function() {
return {
email: '',
password: '',
isModalOpen: false,
errors: null
};
},
handleInputChange: function(ev) {
var nextState = _.cloneDeep(this.state);
nextState[ev.target.name] = ev.target.value;
this.setState(nextState);
},
handleSignInClick: function(ev) {
Auth.emailSignIn({
email: this.state.email,
password: this.state.password,
config: this.props.config
})
.then(function(resp) {
this.setState({
email: '',
password: '',
errors: null,
isModalOpen: true
});
}.bind(this))
.fail(function(resp) {
this.setState({
errors: resp.data.errors,
isModalOpen: true
});
}.bind(this));
},
successModalTitle: 'Email Sign In Success',
errorModalTitle: 'Email Sign In Error',
renderSuccessMessage: function() {
return (
<p>Welcome {Auth.user.email}!</p>
);
},
renderErrorMessage: function() {
return (
<p>There was an error: {this.state.errors.join(', ')}</p>
);
},
render: function() {
var configParam = <span></span>;
if (this.props.config !== 'default') {
configParam = <span> config: '{this.props.config}',<br /></span>;
}
var sourceLink = <a href='https://github.com/lynndylanhurley/j-toker/blob/master/demo/src/scripts/components/login-form.jsx' target='blank'>View component source</a>;
return (
<Panel header='Email Sign In' bsStyle='info' footer={sourceLink}>
<form>
<Input type='email'
name='email'
label='Email'
placeholder='Enter email...'
disabled={this.props.signedIn}
value={this.state.email}
onChange={this.handleInputChange} />
<Input type='password'
name='password'
label='Password'
placeholder='Enter password...'
disabled={this.props.signedIn}
value={this.state.password}
onChange={this.handleInputChange} />
<Button className='btn btn-primary'
onClick={this.handleSignInClick}
disabled={this.props.signedIn}>
Sign In
</Button>
</form>
<br />
<label>Example</label>
<Highlight className='javascript'>
$.auth.emailSignIn({'{'}<br />
{configParam}
email: 'xxx',<br />
password: 'yyy'<br />
{'}'});
</Highlight>
</Panel>
);
}
});