1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-28 16:48:04 +02:00
onion/js/components/login_container.js

120 lines
3.8 KiB
JavaScript
Raw Normal View History

2015-06-20 16:43:18 +02:00
'use strict';
import React from 'react';
import Router from 'react-router';
import GlobalNotificationModel from '../models/global_notification_model';
import GlobalNotificationActions from '../actions/global_notification_actions';
import UserStore from '../stores/user_store';
2015-06-20 16:43:18 +02:00
import Form from './ascribe_forms/form';
import Property from './ascribe_forms/property';
import apiUrls from '../constants/api_urls';
2015-06-25 15:25:34 +02:00
import AppConstants from '../constants/application_constants';
2015-06-20 16:43:18 +02:00
2015-06-30 14:46:28 +02:00
let Link = Router.Link;
2015-06-20 16:43:18 +02:00
let LoginContainer = React.createClass({
mixins: [Router.Navigation],
getInitialState() {
return UserStore.getState();
},
componentDidMount() {
UserStore.listen(this.onChange);
},
componentWillUnmount() {
UserStore.unlisten(this.onChange);
},
onChange(state) {
this.setState(state);
// if user is already logged in, redirect him to piece list
if(this.state.currentUser && this.state.currentUser.email) {
this.transitionTo('pieces');
}
},
2015-06-20 16:43:18 +02:00
render() {
return (
<div className="ascribe-login-wrapper">
<br/>
<div className="ascribe-login-text ascribe-login-header">
Log in to ascribe...
</div>
<LoginForm />
</div>
);
}
});
let LoginForm = React.createClass({
handleSuccess(){
let notification = new GlobalNotificationModel('Login successsful', 'success', 10000);
GlobalNotificationActions.appendGlobalNotification(notification);
/*Taken from http://stackoverflow.com/a/14916411 */
2015-06-25 23:25:03 +02:00
/*
We actually have to trick the Browser into showing the "save password" dialog
as Chrome expects the login page to be reloaded after the login.
Users on Stack Overflow claim this is a bug in chrome and should be fixed in the future.
Until then, we redirect the HARD way, but reloading the whole page using window.location
*/
2015-06-25 15:30:47 +02:00
window.location = AppConstants.baseUrl + 'collection';
2015-06-20 16:43:18 +02:00
},
2015-06-20 16:43:18 +02:00
render() {
return (
<Form
ref="loginForm"
2015-06-20 16:43:18 +02:00
url={apiUrls.users_login}
2015-06-22 10:50:22 +02:00
handleSuccess={this.handleSuccess}
buttons={
<button
type="submit"
className="btn ascribe-btn ascribe-btn-login">
2015-06-22 10:50:22 +02:00
Log in to ascribe
</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>
}>
2015-06-20 16:43:18 +02:00
<Property
name='email'
label="Email">
<input
type="email"
placeholder="Enter your email"
autoComplete="on"
name="username"
2015-06-20 16:43:18 +02:00
required/>
</Property>
<Property
name='password'
label="Password">
<input
type="password"
placeholder="Enter your password"
autoComplete="on"
name="password"
2015-06-20 16:43:18 +02:00
required/>
</Property>
<hr />
<div className="ascribe-login-text">
2015-06-30 14:46:28 +02:00
Not an ascribe user&#63; <Link to="signup">Sign up...</Link><br/>
Forgot my password&#63; <Link to="password_reset">Rescue me...</Link>
2015-06-20 16:43:18 +02:00
</div>
</Form>
);
}
});
export default LoginContainer;