var React = require('react/addons')
var RouteHandler = require('react-router').RouteHandler
var ReactRouter = require('react-router')
var ModalBase = require('../Components/ModalBase')
var LaunchModal = require('../Components/LaunchModal')
var CodeViewer = require('../Components/CodeViewer')
var AuthStore = require('../Stores/AuthStore')
var PlanetStore = require('../Stores/PlanetStore')
var fetchPlanet = require('../Actions/fetchPlanet')
var PlanetHeader = React.createClass({
propTypes: {
currentPlanet: React.PropTypes.object,
currentUser: React.PropTypes.object
},
getInitialState: function () {
return {
isMenuDropDownOpen: false
}
},
toggleMenuDropDown: function () {
this.setState({isMenuDropDownOpen: !this.state.isMenuDropDownOpen}, function () {
if (this.state.isMenuDropDownOpen) {
document.body.onclick = function () {
this.setState({isMenuDropDownOpen: false}, function () {
document.body.onclick = null
})
}.bind(this)
}
})
},
interceptClick: function (e) {
e.stopPropagation()
},
render: function () {
var currentPlanetName = this.props.currentPlanet.name
return (
)
}
})
var PlanetNavigator = React.createClass({
propTypes: {
currentPlanet: React.PropTypes.shape({
name: React.PropTypes.string
}),
currentUser: React.PropTypes.shape({
name: React.PropTypes.string
})
},
getInitialState: function () {
return {
isLaunchModalOpen: false
}
},
openLaunchModal: function () {
console.log('and...OPEN!!')
this.setState({isLaunchModalOpen: true})
},
closeLaunchModal: function () {
this.setState({isLaunchModalOpen: false})
},
submitLaunchModal: function (ret) {
console.log(ret)
this.setState({isLaunchModalOpen: false})
},
render: function () {
return (
)
}
})
var PlanetArticleList = React.createClass({
mixins: [ReactRouter.Navigation, ReactRouter.State],
propTypes: {
planet: React.PropTypes.shape({
Snippets: React.PropTypes.array,
Blueprints: React.PropTypes.array
})
},
render: function () {
var articles = this.props.planet.Snippets.map(function (snippet) {
var tags = snippet.Tags.map(function (tag) {
return (
#{tag.name}
)
})
var params = this.getParams()
var isActive = parseInt(params.localId, 10) === snippet.localId
var handleClick = function () {
this.transitionTo('snippets', {
userName: params.userName,
planetName: params.planetName,
localId: snippet.localId
})
}.bind(this)
return (
{snippet.callSign}
{snippet.description}
{snippet.updatedAt}
{tags}
)
}.bind(this))
return (
)
}
})
var PlanetArticleDetail = React.createClass({
propTypes: {
snippet: React.PropTypes.object
},
render: function () {
var snippet = this.props.snippet
var tags = snippet.Tags.map(function (tag) {
return (
#{tag.name}
)
})
return (
{snippet.callSign} {snippet.updatedAt}
{snippet.description}
{tags}
)
}
})
module.exports = React.createClass({
mixins: [ReactRouter.Navigation, ReactRouter.State],
propTypes: {
params: React.PropTypes.object,
planetName: React.PropTypes.string
},
getInitialState: function () {
return {
currentPlanet: null
}
},
componentDidMount: function () {
this.unsubscribe = PlanetStore.listen(this.onFetched)
fetchPlanet(this.props.params.userName + '/' + this.props.params.planetName)
},
componentWillUnmount: function () {
this.unsubscribe()
},
onFetched: function (planet) {
this.setState({currentPlanet: planet}, function () {
if (planet.Snippets.length > 0) {
this.transitionTo('snippets', {
userName: this.props.params.userName,
planetName: this.props.params.planetName,
localId: planet.Snippets[0].localId})
}
})
},
render: function () {
var user = AuthStore.getUser()
if (user == null) return ()
if (this.state.currentPlanet == null) return ()
var content = (No selected
)
if (this.isActive('snippets')) {
var localId = parseInt(this.props.params.localId, 10)
this.state.currentPlanet.Snippets.some(function (_snippet) {
if (localId === _snippet.localId) {
content = (
)
return true
}
return false
})
}
return (
)
}
})