/* global localStorage */ var React = require('react/addons') var ReactRouter = require('react-router') var Link = ReactRouter.Link var AuthFilter = require('../Mixins/AuthFilter') var LinkedState = require('../Mixins/LinkedState') var ExternalLink = require('../Mixins/ExternalLink') var Hq = require('../Services/Hq') var socket = require('../Services/socket') module.exports = React.createClass({ mixins: [LinkedState, ReactRouter.Navigation, AuthFilter.OnlyGuest, ExternalLink], getInitialState: function () { return { user: {}, connectionFailed: false, emailConflicted: false, nameConflicted: false, validationFailed: false, isSending: false } }, handleSubmit: function (e) { this.setState({ connectionFailed: false, emailConflicted: false, nameConflicted: false, validationFailed: false, isSending: true }, function () { Hq.signup(this.state.user) .then(function (res) { localStorage.setItem('token', res.body.token) localStorage.setItem('currentUser', JSON.stringify(res.body.user)) socket.reconnect() this.transitionTo('userHome', {userName: res.body.user.name}) }.bind(this)) .catch(function (err) { console.error(err) var res = err.response if (err.status === 409) { // Confliction var emailConflicted = res.body.errors[0].path === 'email' var nameConflicted = res.body.errors[0].path === 'name' this.setState({ connectionFailed: false, emailConflicted: emailConflicted, nameConflicted: nameConflicted, validationFailed: false, isSending: false }) return } if (err.status === 422) { // Validation Failed this.setState({ connectionFailed: false, emailConflicted: false, nameConflicted: false, validationFailed: { errors: res.body.errors.map(function (error) { return error.path }) }, isSending: false }) return } // Connection Failed or Whatever this.setState({ connectionFailed: true, emailConflicted: false, nameConflicted: false, validationFailed: false, isSending: false }) return }.bind(this)) }) e.preventDefault() }, render: function () { return (
{this.state.isSending ? (

Signing up...

) : null} {this.state.connectionFailed ? (

Please try again.

) : null} {this.state.emailConflicted ? (

E-mail already exists.

) : null} {this.state.nameConflicted ? (

Username already exists.

) : null} {this.state.validationFailed ? (

Please fill every field correctly: {this.state.validationFailed.errors.join(', ')}

) : null}

会員登録することで、当サイトの利用規約及びCookieの使用を含むデータに関するポリシーに同意するものとします。

) } })