var React = require('react/addons') var ReactRouter = require('react-router') var RouteHandler = ReactRouter.RouteHandler var Link = ReactRouter.Link var Reflux = require('reflux') var LinkedState = require('../Mixins/LinkedState') var Modal = require('../Mixins/Modal') var Hq = require('../Services/Hq') var ProfileImage = require('../Components/ProfileImage') var EditProfileModal = require('../Components/EditProfileModal') var UserStore = require('../Stores/UserStore') module.exports = React.createClass({ mixins: [LinkedState, ReactRouter.State, Modal, Reflux.listenTo(UserStore, 'onUserChange')], propTypes: { params: React.PropTypes.shape({ userName: React.PropTypes.string, planetName: React.PropTypes.string }) }, getInitialState: function () { return { user: null } }, componentDidMount: function () { this.fetchUser() }, componentWillReceiveProps: function (nextProps) { if (this.state.user == null) { this.fetchUser(nextProps.params.userName) return } if (nextProps.params.userName !== this.state.user.name) { this.setState({ user: null }, function () { this.fetchUser(nextProps.params.userName) }) } }, onUserChange: function (res) { if (this.state.user == null) return switch (res.status) { case 'userUpdated': if (this.state.user.id === res.data.id) { this.setState({user: res.data}) } break } }, fetchUser: function (userName) { if (userName == null) userName = this.props.params.userName Hq.fetchUser(userName) .then(function (res) { this.setState({user: res.body}) }.bind(this)) .catch(function (err) { console.error(err) }) }, openEditProfileModal: function () { this.openModal(EditProfileModal, {targetUser: this.state.user}) }, render: function () { var user = this.state.user if (this.isActive('userHome')) { if (user == null) { return (