mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-15 18:56:22 +00:00
add SnippetDeleteModal & fix some bugs
This commit is contained in:
@@ -5,9 +5,9 @@ module.exports = Reflux.createActions([
|
|||||||
|
|
||||||
'createSnippet',
|
'createSnippet',
|
||||||
'updateSnippet',
|
'updateSnippet',
|
||||||
'destroySnippet',
|
'deleteSnippet',
|
||||||
|
|
||||||
'createBlueprint',
|
'createBlueprint',
|
||||||
'updateBlueprint',
|
'updateBlueprint',
|
||||||
'destroyBlueprint'
|
'deleteBlueprint'
|
||||||
])
|
])
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ var CodeEditor = React.createClass({
|
|||||||
editor.setValue(this.props.code)
|
editor.setValue(this.props.code)
|
||||||
editor.renderer.setShowGutter(true)
|
editor.renderer.setShowGutter(true)
|
||||||
editor.setTheme('ace/theme/xcode')
|
editor.setTheme('ace/theme/xcode')
|
||||||
|
editor.clearSelection()
|
||||||
|
|
||||||
var session = editor.getSession()
|
var session = editor.getSession()
|
||||||
session.setMode('ace/mode/' + this.props.mode)
|
session.setMode('ace/mode/' + this.props.mode)
|
||||||
|
|||||||
49
browser/main/Components/SnippetDeleteModal.jsx
Normal file
49
browser/main/Components/SnippetDeleteModal.jsx
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
var React = require('react')
|
||||||
|
var PlanetStore = require('../Stores/PlanetStore')
|
||||||
|
var PlanetActions = require('../Actions/PlanetActions')
|
||||||
|
|
||||||
|
var SnippetDeleteModal = React.createClass({
|
||||||
|
propTypes: {
|
||||||
|
close: React.PropTypes.func,
|
||||||
|
snippet: React.PropTypes.object
|
||||||
|
},
|
||||||
|
componentDidMount: function () {
|
||||||
|
this.unsubscribe = PlanetStore.listen(this.onListen)
|
||||||
|
},
|
||||||
|
componentWillUnmount: function () {
|
||||||
|
this.unsubscribe()
|
||||||
|
},
|
||||||
|
onListen: function (res) {
|
||||||
|
switch (res.status) {
|
||||||
|
case 'snippetDeleted':
|
||||||
|
this.props.close()
|
||||||
|
break
|
||||||
|
}
|
||||||
|
},
|
||||||
|
stopPropagation: function (e) {
|
||||||
|
e.stopPropagation()
|
||||||
|
},
|
||||||
|
submit: function () {
|
||||||
|
PlanetActions.deleteSnippet(this.props.snippet.id)
|
||||||
|
},
|
||||||
|
render: function () {
|
||||||
|
return (
|
||||||
|
<div onClick={this.stopPropagation} className='SnippetDeleteModal modal'>
|
||||||
|
<div className='modal-header'>
|
||||||
|
<h1>Delete Snippet</h1>
|
||||||
|
</div>
|
||||||
|
<div className='modal-body'>
|
||||||
|
<p>Are you sure to delete it?</p>
|
||||||
|
</div>
|
||||||
|
<div className='modal-footer'>
|
||||||
|
<div className='modal-control'>
|
||||||
|
<button onClick={this.props.close} className='btn-default'>Cancle</button>
|
||||||
|
<button onClick={this.submit} className='btn-primary'>Delete</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
module.exports = SnippetDeleteModal
|
||||||
@@ -42,6 +42,12 @@ var SnippetForm = React.createClass({
|
|||||||
callSign: '',
|
callSign: '',
|
||||||
Tags: []
|
Tags: []
|
||||||
}, this.props.snippet)
|
}, this.props.snippet)
|
||||||
|
snippet.Tags = snippet.Tags.map(function (tag) {
|
||||||
|
return {
|
||||||
|
label: tag.name,
|
||||||
|
value: tag.name
|
||||||
|
}
|
||||||
|
})
|
||||||
return {
|
return {
|
||||||
snippet: snippet
|
snippet: snippet
|
||||||
}
|
}
|
||||||
@@ -110,7 +116,7 @@ var SnippetForm = React.createClass({
|
|||||||
<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'>Cancle</button>
|
||||||
<button onClick={this.submit} className='btn-primary'>Launch</button>
|
<button onClick={this.submit} className='btn-primary'>{this.props.snippet == null ? 'Launch' : 'Relaunch'}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ var ModalBase = require('../Components/ModalBase')
|
|||||||
var LaunchModal = require('../Components/LaunchModal')
|
var LaunchModal = require('../Components/LaunchModal')
|
||||||
var CodeViewer = require('../Components/CodeViewer')
|
var CodeViewer = require('../Components/CodeViewer')
|
||||||
var SnippetEditModal = require('../Components/SnippetEditModal')
|
var SnippetEditModal = require('../Components/SnippetEditModal')
|
||||||
|
var SnippetDeleteModal = require('../Components/SnippetDeleteModal')
|
||||||
|
|
||||||
var AuthStore = require('../Stores/AuthStore')
|
var AuthStore = require('../Stores/AuthStore')
|
||||||
var PlanetStore = require('../Stores/PlanetStore')
|
var PlanetStore = require('../Stores/PlanetStore')
|
||||||
@@ -175,6 +176,15 @@ var PlanetArticleDetail = React.createClass({
|
|||||||
submitEditModal: function () {
|
submitEditModal: function () {
|
||||||
this.setState({isEditModalOpen: false})
|
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 snippet = this.props.snippet
|
var snippet = this.props.snippet
|
||||||
|
|
||||||
@@ -190,12 +200,16 @@ var PlanetArticleDetail = React.createClass({
|
|||||||
<i className='fa fa-code'></i> {snippet.callSign} <small className='updatedAt'>{snippet.updatedAt}</small>
|
<i className='fa fa-code'></i> {snippet.callSign} <small className='updatedAt'>{snippet.updatedAt}</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.openEditModal} className='btn-default btn-square btn-sm'><i className='fa fa-edit fa-fw'></i></button>
|
||||||
<button className='btn-default btn-square btn-sm'><i className='fa fa-trash fa-fw'></i></button>
|
<button onClick={this.openDeleteModal} 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}>
|
<ModalBase isOpen={this.state.isEditModalOpen} close={this.closeEditModal}>
|
||||||
<SnippetEditModal snippet={snippet} submit={this.submitEditModal} close={this.closeEditModal}/>
|
<SnippetEditModal snippet={snippet} submit={this.submitEditModal} close={this.closeEditModal}/>
|
||||||
</ModalBase>
|
</ModalBase>
|
||||||
|
|
||||||
|
<ModalBase isOpen={this.state.isDeleteModalOpen} close={this.closeDeleteModal}>
|
||||||
|
<SnippetDeleteModal snippet={snippet} 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'>
|
||||||
@@ -242,7 +256,7 @@ module.exports = React.createClass({
|
|||||||
this.transitionTo('snippets', {
|
this.transitionTo('snippets', {
|
||||||
userName: this.props.params.userName,
|
userName: this.props.params.userName,
|
||||||
planetName: this.props.params.planetName,
|
planetName: this.props.params.planetName,
|
||||||
localId: planet.Snippets[0].localId})
|
localId: this.props.params.localId == null ? planet.Snippets[0].localId : this.props.params.localId})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
@@ -260,13 +274,41 @@ module.exports = React.createClass({
|
|||||||
if (snippet.PlanetId === this.state.currentPlanet.id) {
|
if (snippet.PlanetId === this.state.currentPlanet.id) {
|
||||||
snippets.some(function (_snippet, index) {
|
snippets.some(function (_snippet, index) {
|
||||||
if (_snippet.id === snippet.id) {
|
if (_snippet.id === snippet.id) {
|
||||||
snippets[index] = snippet
|
snippets.splice(index, 1)
|
||||||
|
snippets.unshift(snippet)
|
||||||
this.setState({snippets: snippets})
|
this.setState({snippets: snippets})
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
}
|
}
|
||||||
|
break
|
||||||
|
case 'snippetDeleted':
|
||||||
|
if (snippet.PlanetId === this.state.currentPlanet.id) {
|
||||||
|
snippets.some(function (_snippet, index) {
|
||||||
|
if (_snippet.id === snippet.id) {
|
||||||
|
snippets.splice(index, 1)
|
||||||
|
this.setState({snippets: snippets}, function () {
|
||||||
|
var params = this.getParams()
|
||||||
|
if (parseInt(params.localId, 10) === snippet.localId) {
|
||||||
|
if (snippets.length === 0) {
|
||||||
|
delete params.localId
|
||||||
|
this.transitionTo('planet', params)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (index > 0) {
|
||||||
|
params.localId = snippets[index - 1].localId
|
||||||
|
} else {
|
||||||
|
params.localId = snippets[0].localId
|
||||||
|
}
|
||||||
|
this.transitionTo('snippets', params)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}.bind(this))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ var PlanetStore = Reflux.createStore({
|
|||||||
this.listenTo(PlanetActions.fetchPlanet, this.fetchPlanet)
|
this.listenTo(PlanetActions.fetchPlanet, this.fetchPlanet)
|
||||||
this.listenTo(PlanetActions.createSnippet, this.createSnippet)
|
this.listenTo(PlanetActions.createSnippet, this.createSnippet)
|
||||||
this.listenTo(PlanetActions.updateSnippet, this.updateSnippet)
|
this.listenTo(PlanetActions.updateSnippet, this.updateSnippet)
|
||||||
|
this.listenTo(PlanetActions.deleteSnippet, this.deleteSnippet)
|
||||||
},
|
},
|
||||||
fetchPlanet: function (planetName) {
|
fetchPlanet: function (planetName) {
|
||||||
request
|
request
|
||||||
@@ -69,6 +70,27 @@ var PlanetStore = Reflux.createStore({
|
|||||||
data: snippet
|
data: snippet
|
||||||
})
|
})
|
||||||
}.bind(this))
|
}.bind(this))
|
||||||
|
},
|
||||||
|
deleteSnippet: function (id) {
|
||||||
|
request
|
||||||
|
.del('http://localhost:8000/snippets/id/' + id)
|
||||||
|
.set({
|
||||||
|
Authorization: 'Bearer ' + localStorage.getItem('token')
|
||||||
|
})
|
||||||
|
.send()
|
||||||
|
.end(function (err, res) {
|
||||||
|
if (err) {
|
||||||
|
console.error(err)
|
||||||
|
this.trigger(null)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var snippet = res.body
|
||||||
|
this.trigger({
|
||||||
|
status: 'snippetDeleted',
|
||||||
|
data: snippet
|
||||||
|
})
|
||||||
|
}.bind(this))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,9 @@
|
|||||||
.PlanetContainer
|
.PlanetContainer
|
||||||
absolute top bottom right
|
absolute top bottom right
|
||||||
left 50px
|
left 50px
|
||||||
|
.tags
|
||||||
|
a
|
||||||
|
margin 0 2px
|
||||||
|
|
||||||
.PlanetHeader
|
.PlanetHeader
|
||||||
absolute left right top
|
absolute left right top
|
||||||
@@ -118,9 +121,6 @@
|
|||||||
absolute bottom right
|
absolute bottom right
|
||||||
left 200px
|
left 200px
|
||||||
top 65px
|
top 65px
|
||||||
.tags
|
|
||||||
a
|
|
||||||
margin 0 2px
|
|
||||||
width 250px
|
width 250px
|
||||||
border-right solid 1px highlightenBorderColor
|
border-right solid 1px highlightenBorderColor
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,9 @@
|
|||||||
h1
|
h1
|
||||||
padding: 10px 0 15px;
|
padding: 10px 0 15px;
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
|
.modal-body
|
||||||
|
p
|
||||||
|
margin-bottom 15px
|
||||||
.modal-footer
|
.modal-footer
|
||||||
clearfix()
|
clearfix()
|
||||||
border-top solid 1px borderColor
|
border-top solid 1px borderColor
|
||||||
|
|||||||
Reference in New Issue
Block a user