var React = require('react/addons')
var ReactRouter = require('react-router')
var ModalBase = require('../Components/ModalBase')
var LaunchModal = require('../Components/LaunchModal')
var CodeViewer = require('../Components/CodeViewer')
var SnippetEditModal = require('../Components/SnippetEditModal')
var AuthStore = require('../Stores/AuthStore')
var PlanetStore = require('../Stores/PlanetStore')
var PlanetActions = require('../Actions/PlanetActions')
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
},
getInitialState: function () {
return {
isEditModalOpen: false
}
},
openEditModal: function () {
this.setState({isEditModalOpen: true})
},
closeEditModal: function () {
this.setState({isEditModalOpen: false})
},
submitEditModal: function () {
this.setState({isEditModalOpen: false})
},
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)
PlanetActions.fetchPlanet(this.props.params.userName + '/' + this.props.params.planetName)
},
componentWillUnmount: function () {
this.unsubscribe()
},
onFetched: function (res) {
var snippets = this.state.currentPlanet == null ? null : this.state.currentPlanet.Snippets
var snippet = res.data
switch (res.status) {
case 'planetFetched':
var planet = res.data
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})
}
})
break
case 'snippetCreated':
if (snippet.PlanetId === this.state.currentPlanet.id) {
snippets.unshift(snippet)
this.setState({planet: this.state.currentPlanet}, function () {
var params = this.getParams()
params.localId = snippet.localId
this.transitionTo('snippets', params)
})
}
break
case 'snippetUpdated':
if (snippet.PlanetId === this.state.currentPlanet.id) {
snippets.some(function (_snippet, index) {
if (_snippet.id === snippet.id) {
snippets[index] = snippet
this.setState({snippets: snippets})
return true
}
return false
}.bind(this))
}
}
},
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 (
)
}
})