1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-14 10:16:26 +00:00

refactor hotkeys

This commit is contained in:
Rokt33r
2015-07-19 15:06:36 +09:00
parent 16b60ada50
commit e9308bdd69
10 changed files with 233 additions and 115 deletions

View File

@@ -9,6 +9,7 @@ var BlueprintDeleteModal = React.createClass({
}, },
componentDidMount: function () { componentDidMount: function () {
this.unsubscribe = PlanetStore.listen(this.onListen) this.unsubscribe = PlanetStore.listen(this.onListen)
React.findDOMNode(this.refs.submit).focus()
}, },
componentWillUnmount: function () { componentWillUnmount: function () {
this.unsubscribe() this.unsubscribe()
@@ -23,12 +24,18 @@ var BlueprintDeleteModal = React.createClass({
stopPropagation: function (e) { stopPropagation: function (e) {
e.stopPropagation() e.stopPropagation()
}, },
handleKeyDown: function (e) {
if ((e.keyCode === 13 && e.metaKey)) {
e.preventDefault()
this.submit()
}
},
submit: function () { submit: function () {
PlanetActions.deleteBlueprint(this.props.blueprint.id) PlanetActions.deleteBlueprint(this.props.blueprint.id)
}, },
render: function () { render: function () {
return ( return (
<div onClick={this.stopPropagation} className='BlueprintDeleteModal modal'> <div onKeyDown={this.handleKeyDown} onClick={this.stopPropagation} className='BlueprintDeleteModal modal'>
<div className='modal-header'> <div className='modal-header'>
<h1>Delete Blueprint</h1> <h1>Delete Blueprint</h1>
</div> </div>
@@ -37,8 +44,8 @@ var BlueprintDeleteModal = React.createClass({
</div> </div>
<div className='modal-footer'> <div className='modal-footer'>
<div className='modal-control'> <div className='modal-control'>
<button onClick={this.props.close} className='btn-default'>Cancle</button> <button onClick={this.props.close} className='btn-default'>Cancel</button>
<button onClick={this.submit} className='btn-primary'>Delete</button> <button ref='submit' onClick={this.submit} className='btn-primary'>Delete</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -94,6 +94,7 @@ var BlueprintForm = React.createClass({
handleKeyDown: function (e) { handleKeyDown: function (e) {
if (e.keyCode === 13 && e.metaKey) { if (e.keyCode === 13 && e.metaKey) {
this.submit() this.submit()
e.stopPropagation()
} }
}, },
render: function () { render: function () {

View File

@@ -9,7 +9,7 @@ var ModalBase = React.createClass({
render: function () { render: function () {
if (this.props.isOpen) { if (this.props.isOpen) {
return ( return (
<div onClick={this.props.close} className='ModalBase'> <div ref='modal' onClick={this.props.close} className='ModalBase'>
{this.props.children} {this.props.children}
</div> </div>
) )

View File

@@ -2,11 +2,6 @@ var React = require('react/addons')
var moment = require('moment') var moment = require('moment')
var CodeViewer = require('../Components/CodeViewer') var CodeViewer = require('../Components/CodeViewer')
var ModalBase = require('../Components/ModalBase')
var SnippetEditModal = require('../Components/SnippetEditModal')
var SnippetDeleteModal = require('../Components/SnippetDeleteModal')
var BlueprintEditModal = require('../Components/BlueprintEditModal')
var BlueprintDeleteModal = require('../Components/BlueprintDeleteModal')
var ForceUpdate = require('../Mixins/ForceUpdate') var ForceUpdate = require('../Mixins/ForceUpdate')
var Markdown = require('../Mixins/Markdown') var Markdown = require('../Mixins/Markdown')
@@ -14,31 +9,15 @@ var Markdown = require('../Mixins/Markdown')
var PlanetArticleDetail = React.createClass({ var PlanetArticleDetail = React.createClass({
mixins: [ForceUpdate(60000), Markdown], mixins: [ForceUpdate(60000), Markdown],
propTypes: { propTypes: {
article: React.PropTypes.object article: React.PropTypes.object,
onOpenEditModal: React.PropTypes.func,
onOpenDeleteModal: React.PropTypes.func
}, },
getInitialState: function () { getInitialState: function () {
return { return {
isEditModalOpen: false isEditModalOpen: false
} }
}, },
openEditModal: function () {
this.setState({isEditModalOpen: true})
},
closeEditModal: function () {
this.setState({isEditModalOpen: false})
},
submitEditModal: function () {
this.setState({isEditModalOpen: false})
},
openDeleteModal: function () {
this.setState({isDeleteModalOpen: true})
},
closeDeleteModal: function () {
this.setState({isDeleteModalOpen: false})
},
submitDeleteModal: function () {
this.setState({isDeleteModalOpen: false})
},
render: function () { render: function () {
var article = this.props.article var article = this.props.article
@@ -55,17 +34,9 @@ var PlanetArticleDetail = React.createClass({
<div className='viewer-header'> <div className='viewer-header'>
<i className='fa fa-code fa-fw'></i> {article.callSign} <small className='updatedAt'>{moment(article.updatedAt).fromNow()}</small> <i className='fa fa-code fa-fw'></i> {article.callSign} <small className='updatedAt'>{moment(article.updatedAt).fromNow()}</small>
<span className='control-group'> <span className='control-group'>
<button onClick={this.openEditModal} className='btn-default btn-square btn-sm'><i className='fa fa-edit fa-fw'></i></button> <button onClick={this.props.onOpenEditModal} className='btn-default btn-square btn-sm'><i className='fa fa-edit fa-fw'></i></button>
<button onClick={this.openDeleteModal} className='btn-default btn-square btn-sm'><i className='fa fa-trash fa-fw'></i></button> <button onClick={this.props.onOpenDeleteModal} className='btn-default btn-square btn-sm'><i className='fa fa-trash fa-fw'></i></button>
</span> </span>
<ModalBase isOpen={this.state.isEditModalOpen} close={this.closeEditModal}>
<SnippetEditModal snippet={article} submit={this.submitEditModal} close={this.closeEditModal}/>
</ModalBase>
<ModalBase isOpen={this.state.isDeleteModalOpen} close={this.closeDeleteModal}>
<SnippetDeleteModal snippet={article} submit={this.submitDeleteModal} close={this.closeDeleteModal}/>
</ModalBase>
</div> </div>
<div className='viewer-body'> <div className='viewer-body'>
<div className='viewer-detail'> <div className='viewer-detail'>
@@ -84,17 +55,9 @@ var PlanetArticleDetail = React.createClass({
<div className='viewer-header'> <div className='viewer-header'>
<i className='fa fa-file-text-o fa-fw'></i> {article.title} <small className='updatedAt'>{moment(article.updatedAt).fromNow()}</small> <i className='fa fa-file-text-o fa-fw'></i> {article.title} <small className='updatedAt'>{moment(article.updatedAt).fromNow()}</small>
<span className='control-group'> <span className='control-group'>
<button onClick={this.openEditModal} className='btn-default btn-square btn-sm'><i className='fa fa-edit fa-fw'></i></button> <button onClick={this.props.onOpenEditModal} className='btn-default btn-square btn-sm'><i className='fa fa-edit fa-fw'></i></button>
<button onClick={this.openDeleteModal} className='btn-default btn-square btn-sm'><i className='fa fa-trash fa-fw'></i></button> <button onClick={this.props.onOpenDeleteModal} className='btn-default btn-square btn-sm'><i className='fa fa-trash fa-fw'></i></button>
</span> </span>
<ModalBase isOpen={this.state.isEditModalOpen} close={this.closeEditModal}>
<BlueprintEditModal blueprint={article} submit={this.submitEditModal} close={this.closeEditModal}/>
</ModalBase>
<ModalBase isOpen={this.state.isDeleteModalOpen} close={this.closeDeleteModal}>
<BlueprintDeleteModal blueprint={article} submit={this.submitDeleteModal} close={this.closeDeleteModal}/>
</ModalBase>
</div> </div>
<div className='viewer-body'> <div className='viewer-body'>
<div className='tags'><i className='fa fa-tags'/>{tags}</div> <div className='tags'><i className='fa fa-tags'/>{tags}</div>

View File

@@ -8,20 +8,10 @@ var Markdown = require('../Mixins/Markdown')
var PlanetArticleList = React.createClass({ var PlanetArticleList = React.createClass({
mixins: [ReactRouter.Navigation, ReactRouter.State, ForceUpdate(60000), Markdown], mixins: [ReactRouter.Navigation, ReactRouter.State, ForceUpdate(60000), Markdown],
propTypes: { propTypes: {
articles: React.PropTypes.array, articles: React.PropTypes.array
onPressDown: React.PropTypes.func,
onPressUp: React.PropTypes.func
}, },
handleKeyDown: function (e) { handleKeyDown: function (e) {
switch (e.keyCode) {
case 38:
e.preventDefault() e.preventDefault()
this.props.onPressUp()
break
case 40:
e.preventDefault()
this.props.onPressDown()
}
}, },
render: function () { render: function () {
var articles = this.props.articles.map(function (article) { var articles = this.props.articles.map(function (article) {

View File

@@ -8,7 +8,8 @@ var PlanetHeader = React.createClass({
}, },
getInitialState: function () { getInitialState: function () {
return { return {
isMenuDropDownOpen: false isMenuDropDownOpen: false,
search: ''
} }
}, },
componentDidMount: function () { componentDidMount: function () {
@@ -32,6 +33,11 @@ var PlanetHeader = React.createClass({
this.setState({search: e.target.value}) this.setState({search: e.target.value})
this.props.onSearchChange(e.target.value) this.props.onSearchChange(e.target.value)
}, },
handleKeyDown: function (e) {
if (e.keyCode === 27) {
React.findDOMNode(this.refs.search).blur()
}
},
render: function () { render: function () {
var currentPlanetName = this.props.currentPlanet.name var currentPlanetName = this.props.currentPlanet.name
@@ -48,7 +54,7 @@ var PlanetHeader = React.createClass({
</div> </div>
<span className='searchInput'> <span className='searchInput'>
<i className='fa fa-search'/> <i className='fa fa-search'/>
<input onChange={this.handleChange} value={this.state.search} ref='search' tabIndex='1' type='text' className='inline-input circleInput' placeholder='Search...'/> <input onKeyDown={this.handleKeyDown} onChange={this.handleChange} value={this.state.search} ref='search' tabIndex='1' type='text' className='inline-input circleInput' placeholder='Search...'/>
</span> </span>
<a className='downloadBtn btn-primary'>Download Mac app</a> <a className='downloadBtn btn-primary'>Download Mac app</a>
</div> </div>

View File

@@ -1,8 +1,5 @@
var React = require('react/addons') var React = require('react/addons')
var ModalBase = require('../Components/ModalBase')
var LaunchModal = require('../Components/LaunchModal')
var PlanetNavigator = React.createClass({ var PlanetNavigator = React.createClass({
propTypes: { propTypes: {
currentPlanet: React.PropTypes.shape({ currentPlanet: React.PropTypes.shape({
@@ -10,31 +7,14 @@ var PlanetNavigator = React.createClass({
}), }),
currentUser: React.PropTypes.shape({ currentUser: React.PropTypes.shape({
name: React.PropTypes.string name: React.PropTypes.string
}) }),
onOpenLaunchModal: React.PropTypes.func
}, },
getInitialState: function () { getInitialState: function () {
return { return {
isLaunchModalOpen: false isLaunchModalOpen: false
} }
}, },
handleKeyDown: function (e) {
if (e.keyCode === 13 && e.metaKey) {
e.preventDefault()
this.openLaunchModal()
}
},
componentDidMount: function () {
document.addEventListener('keydown', this.handleKeyDown, false)
},
componentWillUnmount: function () {
document.removeEventListener('keydown', this.handleKeyDown, false)
},
openLaunchModal: function () {
this.setState({isLaunchModalOpen: true})
},
closeLaunchModal: function () {
this.setState({isLaunchModalOpen: false})
},
submitLaunchModal: function (ret) { submitLaunchModal: function (ret) {
console.log(ret) console.log(ret)
this.setState({isLaunchModalOpen: false}) this.setState({isLaunchModalOpen: false})
@@ -42,12 +22,9 @@ var PlanetNavigator = React.createClass({
render: function () { render: function () {
return ( return (
<div className='PlanetNavigator'> <div className='PlanetNavigator'>
<button onClick={this.openLaunchModal} className='btn-primary btn-block'> <button onClick={this.props.onOpenLaunchModal} className='btn-primary btn-block'>
<i className='fa fa-rocket fa-fw'/> Launch <i className='fa fa-rocket fa-fw'/> Launch
</button> </button>
<ModalBase isOpen={this.state.isLaunchModalOpen} close={this.closeLaunchModal}>
<LaunchModal submit={this.submitLaunchModal} close={this.closeLaunchModal}/>
</ModalBase>
<nav> <nav>
<a> <a>
<i className='fa fa-home fa-fw'/> Home <i className='fa fa-home fa-fw'/> Home

View File

@@ -9,6 +9,7 @@ var SnippetDeleteModal = React.createClass({
}, },
componentDidMount: function () { componentDidMount: function () {
this.unsubscribe = PlanetStore.listen(this.onListen) this.unsubscribe = PlanetStore.listen(this.onListen)
React.findDOMNode(this.refs.submit).focus()
}, },
componentWillUnmount: function () { componentWillUnmount: function () {
this.unsubscribe() this.unsubscribe()
@@ -23,12 +24,18 @@ var SnippetDeleteModal = React.createClass({
stopPropagation: function (e) { stopPropagation: function (e) {
e.stopPropagation() e.stopPropagation()
}, },
handleKeyDown: function (e) {
if ((e.keyCode === 13 && e.metaKey)) {
e.preventDefault()
this.submit()
}
},
submit: function () { submit: function () {
PlanetActions.deleteSnippet(this.props.snippet.id) PlanetActions.deleteSnippet(this.props.snippet.id)
}, },
render: function () { render: function () {
return ( return (
<div onClick={this.stopPropagation} className='SnippetDeleteModal modal'> <div onKeyDown={this.handleKeyDown} onClick={this.stopPropagation} className='SnippetDeleteModal modal'>
<div className='modal-header'> <div className='modal-header'>
<h1>Delete Snippet</h1> <h1>Delete Snippet</h1>
</div> </div>
@@ -37,8 +44,8 @@ var SnippetDeleteModal = React.createClass({
</div> </div>
<div className='modal-footer'> <div className='modal-footer'>
<div className='modal-control'> <div className='modal-control'>
<button onClick={this.props.close} className='btn-default'>Cancle</button> <button onClick={this.props.close} className='btn-default'>Cancel</button>
<button onClick={this.submit} className='btn-primary'>Delete</button> <button ref='submit' onClick={this.submit} className='btn-primary'>Delete</button>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -86,6 +86,7 @@ var SnippetForm = React.createClass({
handleKeyDown: function (e) { handleKeyDown: function (e) {
if (e.keyCode === 13 && e.metaKey) { if (e.keyCode === 13 && e.metaKey) {
this.submit() this.submit()
e.stopPropagation()
} }
}, },
render: function () { render: function () {

View File

@@ -5,6 +5,12 @@ var PlanetHeader = require('../Components/PlanetHeader')
var PlanetNavigator = require('../Components/PlanetNavigator') var PlanetNavigator = require('../Components/PlanetNavigator')
var PlanetArticleList = require('../Components/PlanetArticleList') var PlanetArticleList = require('../Components/PlanetArticleList')
var PlanetArticleDetail = require('../Components/PlanetArticleDetail') var PlanetArticleDetail = require('../Components/PlanetArticleDetail')
var ModalBase = require('../Components/ModalBase')
var LaunchModal = require('../Components/LaunchModal')
var SnippetEditModal = require('../Components/SnippetEditModal')
var SnippetDeleteModal = require('../Components/SnippetDeleteModal')
var BlueprintEditModal = require('../Components/BlueprintEditModal')
var BlueprintDeleteModal = require('../Components/BlueprintDeleteModal')
var PlanetActions = require('../Actions/PlanetActions') var PlanetActions = require('../Actions/PlanetActions')
@@ -27,11 +33,13 @@ module.exports = React.createClass({
this.unsubscribe = PlanetStore.listen(this.onFetched) this.unsubscribe = PlanetStore.listen(this.onFetched)
PlanetActions.fetchPlanet(this.props.params.userName + '/' + this.props.params.planetName) PlanetActions.fetchPlanet(this.props.params.userName + '/' + this.props.params.planetName)
document.addEventListener('keydown', this.handleKeyDown)
}, },
componentWillUnmount: function () { componentWillUnmount: function () {
this.unsubscribe() this.unsubscribe()
document.removeEventListener('keydown', this.handleKeyDown)
}, },
getIndexOfCurrentArticle: function () { getFilteredIndexOfCurrentArticle: function () {
var params = this.props.params var params = this.props.params
var index = 0 var index = 0
@@ -53,12 +61,35 @@ module.exports = React.createClass({
return index return index
}, },
getIndexOfCurrentArticle: function () {
var params = this.props.params
var index = 0
if (this.isActive('snippets')) {
this.state.currentPlanet.Articles.some(function (_article, _index) {
if (_article.type === 'snippet' && _article.localId === parseInt(params.localId, 10)) {
index = _index
}
})
} else if (this.isActive('blueprints')) {
this.state.currentPlanet.Articles.some(function (_article, _index) {
if (_article.type === 'blueprint' && _article.localId === parseInt(params.localId, 10)) {
index = _index
return true
}
return false
})
}
return index
},
selectArticleByIndex: function (index) { selectArticleByIndex: function (index) {
var article = this.state.filteredArticles[index] var article = this.state.filteredArticles[index]
var params = this.props.params var params = this.props.params
if (article == null) { if (article == null) {
this.transitionTo('planetHome', params) this.transitionTo('planetHome', params)
return
} }
if (article.type === 'snippet') { if (article.type === 'snippet') {
@@ -76,28 +107,42 @@ module.exports = React.createClass({
selectNextArticle: function () { selectNextArticle: function () {
if (this.state.currentPlanet == null || this.state.filteredArticles.length === 0) return if (this.state.currentPlanet == null || this.state.filteredArticles.length === 0) return
var index = this.getIndexOfCurrentArticle() var index = this.getFilteredIndexOfCurrentArticle()
if (index < this.state.filteredArticles.length - 1) { if (index < this.state.filteredArticles.length - 1) {
this.selectArticleByIndex(index + 1) this.selectArticleByIndex(index + 1)
} }
}, },
selectPriorArticle: function () { selectPriorArticle: function () {
if (this.state.currentPlanet == null || this.state.filteredArticles.length === 0) return if (this.state.currentPlanet == null || this.state.filteredArticles.length === 0) {
return
var index = this.getIndexOfCurrentArticle() }
var index = this.getFilteredIndexOfCurrentArticle()
if (index > 0) { if (index > 0) {
this.selectArticleByIndex(index - 1) this.selectArticleByIndex(index - 1)
} else {
React.findDOMNode(this).querySelector('.PlanetHeader .searchInput input').focus()
} }
}, },
onFetched: function (res) { onFetched: function (res) {
var articles = this.state.currentPlanet == null ? null : this.state.currentPlanet.Articles var articles = this.state.currentPlanet == null ? null : this.state.currentPlanet.Articles
var filteredArticles = this.state.filteredArticles
if (res.status === 'planetFetched') { if (res.status === 'planetFetched') {
var planet = res.data var planet = res.data
this.setState({currentPlanet: planet, filteredArticles: planet.Articles}, function () { this.setState({currentPlanet: planet, filteredArticles: planet.Articles}, function () {
if (planet.Articles.length > 0) { if (this.state.filteredArticles.length > 0) {
if (this.props.params.localId == null) {
var article = this.state.filteredArticles[0]
if (article == null) return
this.transitionTo(article.type === 'snippet' ? 'snippets' : 'blueprints', {
userName: this.props.params.userName,
planetName: this.props.params.planetName,
localId: planet.Articles[0].localId
})
return
}
if (this.isActive('snippets')) { if (this.isActive('snippets')) {
this.transitionTo('snippets', { this.transitionTo('snippets', {
userName: this.props.params.userName, userName: this.props.params.userName,
@@ -117,6 +162,7 @@ module.exports = React.createClass({
} }
var article = res.data var article = res.data
var filteredIndex = this.getFilteredIndexOfCurrentArticle()
var index = this.getIndexOfCurrentArticle() var index = this.getIndexOfCurrentArticle()
if (article.PlanetId === this.state.currentPlanet.id) { if (article.PlanetId === this.state.currentPlanet.id) {
@@ -124,7 +170,7 @@ module.exports = React.createClass({
case 'articleCreated': case 'articleCreated':
articles.unshift(article) articles.unshift(article)
this.setState({planet: this.state.currentPlanet}, function () { this.setState({planet: this.state.currentPlanet, filteredArticles: filteredArticles}, function () {
this.selectArticleByIndex(0) this.selectArticleByIndex(0)
}) })
break break
@@ -132,16 +178,17 @@ module.exports = React.createClass({
articles.splice(index, 1) articles.splice(index, 1)
articles.unshift(article) articles.unshift(article)
this.setState({planet: this.state.currentPlanet}) this.setState({planet: this.state.currentPlanet, filteredArticles: filteredArticles})
break break
case 'articleDeleted': case 'articleDeleted':
articles.splice(index, 1) articles.splice(index, 1)
this.setState({planet: this.state.currentPlanet}, function () { this.setState({planet: this.state.currentPlanet, filteredArticles: filteredArticles}, function () {
this.closeDeleteModal()
if (index > 0) { if (index > 0) {
this.selectArticleByIndex(index - 1) this.selectArticleByIndex(filteredIndex - 1)
} else { } else {
this.selectArticleByIndex(index) this.selectArticleByIndex(filteredIndex)
} }
}) })
} }
@@ -178,40 +225,159 @@ module.exports = React.createClass({
this.selectArticleByIndex(0) this.selectArticleByIndex(0)
}) })
}, },
openLaunchModal: function () {
this.setState({isLaunchModalOpen: true})
},
closeLaunchModal: function () {
this.setState({isLaunchModalOpen: false})
},
openEditModal: function () {
this.setState({isEditModalOpen: true})
},
closeEditModal: function () {
this.setState({isEditModalOpen: false})
},
submitEditModal: function () {
this.setState({isEditModalOpen: false})
},
openDeleteModal: function () {
this.setState({isDeleteModalOpen: true})
},
closeDeleteModal: function () {
this.setState({isDeleteModalOpen: false})
},
submitDeleteModal: function () {
this.setState({isDeleteModalOpen: false})
},
handleKeyDown: function (e) {
console.log(e.keyCode)
if (this.state.isLaunchModalOpen) {
if (e.keyCode === 27) this.closeLaunchModal()
return
}
if (this.state.isEditModalOpen) {
if (e.keyCode === 27) this.closeEditModal()
return
}
if (this.state.isDeleteModalOpen) {
if (e.keyCode === 27) this.closeDeleteModal()
return
}
if ((e.keyCode === 13 && e.metaKey)) {
e.preventDefault()
this.openLaunchModal()
}
var searchInput = React.findDOMNode(this).querySelector('.PlanetHeader .searchInput input')
if (document.activeElement === searchInput) {
switch (e.keyCode) {
case 38:
e.preventDefault()
break
case 40:
e.preventDefault()
searchInput.blur()
break
case 27:
searchInput.blur()
break
}
return
}
if (document.activeElement !== searchInput) {
switch (e.keyCode) {
case 38:
e.preventDefault()
this.selectPriorArticle()
break
case 40:
e.preventDefault()
this.selectNextArticle()
break
case 27:
searchInput.focus()
break
}
switch (e.keyCode) {
case 65:
e.preventDefault()
this.openLaunchModal()
break
case 68:
e.preventDefault()
this.openDeleteModal()
break
case 69:
e.preventDefault()
this.openEditModal()
}
}
},
render: function () { render: function () {
var user = AuthStore.getUser() var user = AuthStore.getUser()
if (user == null) return (<div/>) if (user == null) return (<div/>)
if (this.state.currentPlanet == null) return (<div/>) if (this.state.currentPlanet == null) return (<div/>)
var content = (<div>Nothing selected</div>)
var localId = parseInt(this.props.params.localId, 10) var localId = parseInt(this.props.params.localId, 10)
var article
if (this.isActive('snippets')) { if (this.isActive('snippets')) {
this.state.currentPlanet.Articles.some(function (article) { this.state.currentPlanet.Articles.some(function (_article) {
if (article.type === 'snippet' && localId === article.localId) { if (_article.type === 'snippet' && localId === _article.localId) {
content = ( article = _article
<PlanetArticleDetail article={article}/>
)
return true return true
} }
return false return false
}) })
} else if (this.isActive('blueprints')) { } else if (this.isActive('blueprints')) {
this.state.currentPlanet.Articles.some(function (article) { this.state.currentPlanet.Articles.some(function (_article) {
if (article.type === 'blueprint' && localId === article.localId) { if (_article.type === 'blueprint' && localId === _article.localId) {
content = ( article = _article
<PlanetArticleDetail article={article}/>
)
return true return true
} }
return false return false
}) })
} }
var content = article != null ? (
<PlanetArticleDetail article={article} onOpenEditModal={this.openEditModal} onOpenDeleteModal={this.openDeleteModal}/>
) : (
<div>Nothing selected</div>
)
var editModal = article != null ? (article.type === 'snippet' ? (
<SnippetEditModal snippet={article} submit={this.submitEditModal} close={this.closeEditModal}/>
) : (
<BlueprintEditModal blueprint={article} submit={this.submitEditModal} close={this.closeEditModal}/>
)) : null
var deleteModal = article != null ? (article.type === 'snippet' ? (
<SnippetDeleteModal snippet={article} close={this.closeDeleteModal}/>
) : (
<BlueprintDeleteModal blueprint={article} close={this.closeDeleteModal}/>
)) : null
return ( return (
<div className='PlanetContainer'> <div className='PlanetContainer'>
<ModalBase isOpen={this.state.isLaunchModalOpen} close={this.closeLaunchModal}>
<LaunchModal submit={this.submitLaunchModal} close={this.closeLaunchModal}/>
</ModalBase>
<ModalBase isOpen={this.state.isEditModalOpen} close={this.closeEditModal}>
{editModal}
</ModalBase>
<ModalBase isOpen={this.state.isDeleteModalOpen} close={this.closeDeleteModal}>
{deleteModal}
</ModalBase>
<PlanetHeader onSearchChange={this.handleSearchChange} currentPlanet={this.state.currentPlanet} currentUser={user}/> <PlanetHeader onSearchChange={this.handleSearchChange} currentPlanet={this.state.currentPlanet} currentUser={user}/>
<PlanetNavigator currentPlanet={this.state.currentPlanet} currentUser={user}/> <PlanetNavigator onOpenLaunchModal={this.openLaunchModal} currentPlanet={this.state.currentPlanet} currentUser={user}/>
<PlanetArticleList onPressUp={this.selectPriorArticle} onPressDown={this.selectNextArticle} articles={this.state.filteredArticles}/> <PlanetArticleList articles={this.state.filteredArticles}/>
{content} {content}
</div> </div>
) )