/* global localStorage */ var React = require('react/addons') var ReactRouter = require('react-router') var RouteHandler = ReactRouter.RouteHandler var Link = ReactRouter.Link var request = require('superagent') var UserNavigator = require('../Components/UserNavigator') var AuthStore = require('../Stores/AuthStore') var PlanetStore = require('../Stores/PlanetStore') module.exports = React.createClass({ mixins: [React.addons.LinkedStateMixin, ReactRouter.Navigation, ReactRouter.State], propTypes: { params: React.PropTypes.shape({ userName: React.PropTypes.string, planetName: React.PropTypes.string }) }, getInitialState: function () { return { currentUser: AuthStore.getUser(), isUserFetched: false, user: null } }, componentDidMount: function () { this.unsubscribePlanet = PlanetStore.listen(this.onListen) this.unsubscribeAuth = AuthStore.listen(this.onListen) if (this.isActive('userHome')) { this.fetchUser(this.props.params.userName) } }, componentWillUnmount: function () { this.unsubscribePlanet() this.unsubscribeAuth() }, componentDidUpdate: function () { if (this.isActive('userHome') && (this.state.user == null || this.state.user.name !== this.props.params.userName)) { this.fetchUser(this.props.params.userName) } }, fetchUser: function (userName) { request .get('http://localhost:8000/' + userName) .send() .end(function (err, res) { if (err) { console.error(err) return } this.setState({user: res.body, isUserFetched: true}) }.bind(this)) }, onListen: function (res) { if (res.status == null) return if (res.status === 'planetCreated') { var currentUser = this.state.currentUser currentUser.Planets.push(res.data) localStorage.setItem('user', JSON.stringify(currentUser)) this.setState({currentUser: currentUser}) } if (res.status === 'nameChanged') { this.setState({currentUser: AuthStore.getUser()}) } if (res.status === 'userProfileUpdated') { this.setState({currentUser: AuthStore.getUser()}) } }, render: function () { var currentPlanetName = this.props.params.planetName var currentUser = this.state.currentUser var user = this.state.user // user must be logged in if (currentUser == null) return (
) var currentPlanet = null currentUser.Planets.some(function (planet) { if (planet.name === currentPlanetName) { currentPlanet = planet return true } return false }) var content if (this.isActive('userHome')) { if (this.state.isUserFetched === false) { content = (