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 (
User Loading...
) } else if (user.userType === 'team') { return this.renderTeamHome() } else { return this.renderUserHome() } } else { return (
) } }, renderTeamHome: function () { var user = this.state.user var userPlanets = user.Planets.map(function (planet) { return (
  • {planet.userName}/{planet.name}
  • ) }) var members = user.Members == null ? [] : user.Members.map(function (member) { return (
  • {member.profileName} ({member.name})
  • ) }) return (
    {user.profileName}
    {user.name}
    {members.length} {members.length > 0 ? 'Members' : 'Member'}
    {userPlanets.length} {userPlanets.length > 0 ? 'Planets' : 'Planet'}
      {userPlanets}
    ) }, renderUserHome: function () { var user = this.state.user var userPlanets = user.Planets.map(function (planet) { return (
  • {planet.userName}/{planet.name}  {!planet.public ? () : null}
  • ) }) var teams = user.Teams == null ? [] : user.Teams.map(function (team) { return (
  • {team.profileName} ({team.name})
  • ) }) var teamPlanets = user.Teams == null ? [] : user.Teams.map(function (team) { var planets = team.Planets.map(function (planet) { return (
  • {planet.userName}/{planet.name}  {!planet.public ? () : null}
  • ) }) return (
    {team.name}
      {planets}
    ) }) return (
    {user.profileName}
    {user.name}
    {teams.length} {teams.length > 0 ? 'Teams' : 'Team'}
      {teams}
    {userPlanets.length} {userPlanets.length > 0 ? 'Planets' : 'Planet'}
    {user.profileName}
      {userPlanets}
    {teamPlanets}
    ) } })