Newer
Older
import React from 'react'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import SimpleEditor from './SimpleEditor'
export class SimpleEditorWrapper extends React.Component {
constructor (props) {
super(props)
this.save = this.save.bind(this)
this.updateComments = this.updateComments.bind(this)
this._checkRights = this._checkRights.bind(this)
this._releaseLock = this._releaseLock.bind(this)
this._acquireLock = this._acquireLock.bind(this)
this.state = {
canEdit: false
}
}
componentWillMount () {
const { getCollections, getFragments } = this.props.actions
getCollections().then(result => {
getFragments(result.collections[0])
})
this._acquireLock()
}
componentDidMount () {
window.addEventListener('beforeunload', this._releaseLock)
}
componentWillUnmount () {
this._releaseLock()
window.removeEventListener('beforeunload', this._releaseLock)
}
_releaseLock () {
const { book, fragment, user } = this.props
const { updateFragment } = this.props.actions
if (get(fragment, 'lock.editor.username') && get(fragment, 'lock.editor.username') === user.username) {
fragment.lock = null
}
updateFragment(book, fragment)
}
_acquireLock () {
const { book, fragment, user } = this.props
const { updateFragment } = this.props.actions
fragment.lock = {
editor: {
username: user.username
},
timestamp: new Date()
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
}
// componentDidUpdate () {
// this._checkRights()
// }
_checkRights () {
const { fragment, user } = this.props
if ((fragment.progress['review'] === 1 && user.teams[0].teamType.name === 'Author') ||
(fragment.progress['edit'] === 1 && user.teams[0].teamType.name === 'Copy Editor')) {
this.setState({ canEdit: true })
} else {
this.setState({ canEdit: false })
}
if (user.teams[0].teamType.name === 'Production Editor') {
this.setState({ canEdit: true })
}
}
save (source, callback) {
const { book, fragment } = this.props
const { updateFragment } = this.props.actions
fragment.source = source
updateFragment(book, fragment)
}
updateComments (newComments) {
const { book, fragment } = this.props
const { updateFragment } = this.props.actions
fragment.comments = newComments
updateFragment(book, fragment)
}
render () {
return (
<SimpleEditor
book={book}
canEdit={this.state.canEdit}
fragment={fragment}
onSave={this.save}
updateComments={this.updateComments}
user={user}
/>
)
}
}
SimpleEditorWrapper.propTypes = {
book: React.PropTypes.object.isRequired,
fragment: React.PropTypes.object.isRequired,
user: React.PropTypes.object.isRequired
}
function mapStateToProps (state, ownProps) {
const bookId = ownProps.params.bookId
let book = find(state.collections, function (c) {
return c.id === bookId
})
const fragmentId = ownProps.params.fragmentId
let fragment = state.fragments[fragmentId]
return {
fragment: fragment,
book: book,
user: state.currentUser.user
}
}
function mapDispatchToProps (dispatch) {
return {
actions: bindActionCreators(Actions, dispatch)
}
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(SimpleEditorWrapper)