/* global localStorage */ var React = require('react/addons') var ReactRouter = require('react-router') var Navigation = ReactRouter.Navigation var State = ReactRouter.State var Link = ReactRouter.Link var Reflux = require('reflux') var Modal = require('../Mixins/Modal') var UserStore = require('../Stores/UserStore') var PreferencesModal = require('./PreferencesModal') var PlanetCreateModal = require('./PlanetCreateModal') var TeamCreateModal = require('./TeamCreateModal') var LogoutModal = require('./LogoutModal') var ProfileImage = require('./ProfileImage') module.exports = React.createClass({ mixins: [Navigation, State, Reflux.listenTo(UserStore, 'onUserChange'), Modal], getInitialState: function () { return { isPlanetCreateModalOpen: false, currentUser: JSON.parse(localStorage.getItem('currentUser')) } }, onUserChange: function (res) { switch (res.status) { case 'userUpdated': var user = res.data var currentUser = this.state.currentUser if (currentUser.id === user.id) { this.setState({currentUser: user}) return } if (user.userType === 'team') { var isMyTeam = user.Members.some(function (member) { if (currentUser.id === member.id) { return true } return false }) if (isMyTeam) { var isNew = !currentUser.Teams.some(function (team, index) { if (user.id === team.id) { currentUser.Teams.splice(index, 1, user) return true } return false }) if (isNew) { currentUser.Teams.push(user) } this.setState({currentUser: currentUser}) } } break } }, openTeamCreateModal: function () { this.openModal(TeamCreateModal, {user: this.state.currentUser, transitionTo: this.transitionTo}) }, openPreferencesModal: function () { this.openModal(PreferencesModal) }, openPlanetCreateModal: function () { this.openModal(PlanetCreateModal, {transitionTo: this.transitionTo}) }, toggleProfilePopup: function () { this.openProfilePopup() }, openProfilePopup: function () { this.setState({isProfilePopupOpen: true}, function () { document.addEventListener('click', this.closeProfilePopup) }) }, closeProfilePopup: function () { document.removeEventListener('click', this.closeProfilePopup) this.setState({isProfilePopupOpen: false}) }, handleLogoutClick: function () { this.openModal(LogoutModal, {transitionTo: this.transitionTo}) }, switchPlanetByIndex: function (index) { var planetProps = this.refs.planets.props.children[index - 1].props this.transitionTo('planet', {userName: planetProps.userName, planetName: planetProps.planetName}) }, render: function () { var params = this.getParams() if (this.state.currentUser == null) { return null } var planets = this.state.currentUser.Planets.map(function (planet) { planet.userName = this.state.currentUser.name return planet }.bind(this)).concat(this.state.currentUser.Teams.reduce(function (_planets, team) { return _planets.concat(team.Planets == null ? [] : team.Planets.map(function (planet) { planet.userName = team.name return planet })) }, [])).map(function (planet, index) { return (