more badass permissions selector

This commit is contained in:
Devin Howard 2017-02-25 15:18:47 -08:00
parent 3e07c431e0
commit 73d88771af
2 changed files with 28 additions and 38 deletions

View file

@ -72,6 +72,7 @@ class Links extends Component {
render = () => { render = () => {
const { topic, ActiveMapper } = this.props const { topic, ActiveMapper } = this.props
const authorizedToEdit = topic.authorizeToEdit(ActiveMapper)
const metacode = topic.getMetacode() const metacode = topic.getMetacode()
return ( return (
@ -125,8 +126,8 @@ class Links extends Component {
{this.state.hoveringSynapseCount && <div className="tip">Click to see this topics synapses</div>} {this.state.hoveringSynapseCount && <div className="tip">Click to see this topics synapses</div>}
</a> </a>
<Permission <Permission
topic={topic} permission={topic.get('permission')}
ActiveMapper={ActiveMapper} authorizedToEdit={authorizedToEdit}
updateTopic={this.props.updateTopic} updateTopic={this.props.updateTopic}
/> />
<div className="clearfloat"></div> <div className="clearfloat"></div>

View file

@ -22,54 +22,43 @@ class Permission extends Component {
this.setState({selectingPermission: false}) this.setState({selectingPermission: false})
} }
liClick = value => event => {
this.closePermissionSelect()
this.props.updateTopic({
permission: value,
defer_to_map_id: null
})
// prevents it from also firing the event listener on the parent
event.preventDefault()
}
render = () => { render = () => {
const self = this const { permission, authorizedToEdit } = this.props
const { topic, ActiveMapper, updateTopic } = this.props
const { selectingPermission } = this.state const { selectingPermission } = this.state
const permission = topic.get('permission')
const canChange = topic.authorizePermissionChange(ActiveMapper)
const onClick = canChange ? this.togglePermissionSelect : () => {}
let classes = `linkItem mapPerm ${permission.substring(0, 2)}` let classes = `linkItem mapPerm ${permission.substring(0, 2)}`
if (selectingPermission) classes += ' minimize' if (selectingPermission) classes += ' minimize'
const liClick = value => {
return event => {
self.closePermissionSelect()
updateTopic({
permission: value,
defer_to_map_id: null
})
// prevents it from also firing the event listener on the parent
event.preventDefault()
}
}
const selectCommons = <li key='1' className='commons' onClick={liClick('commons')}></li>
const selectPublic = <li key='2' className='public' onClick={liClick('public')}></li>
const selectPrivate = <li key='3' className='private' onClick={liClick('private')}></li>
let permOptions
if (permission === 'commons') {
permOptions = [selectPublic, selectPrivate]
} else if (permission === 'public') {
permOptions = [selectCommons, selectPrivate]
} else if (permission === 'private') {
permOptions = [selectCommons, selectPublic]
}
return ( return (
<div <div className={classes}
className={classes} title={permission}
title={permission} onClick={authorizedToEdit ? this.togglePermissionSelect : null}
onClick={onClick}> >
{selectingPermission && <ul className="permissionSelect"> <ul className="permissionSelect"
{permOptions} style={{ display: selectingPermission ? 'block' : 'none' }}
</ul>} >
{permission !== 'commons' && <li className='commons' onClick={this.liClick('commons')}></li>}
{permission !== 'public' && <li className='public' onClick={this.liClick('public')}></li>}
{permission !== 'private' && <li className='private' onClick={this.liClick('private')}></li>}
</ul>
</div> </div>
) )
} }
} }
Permission.propTypes = { Permission.propTypes = {
topic: PropTypes.object, // backbone object permission: PropTypes.string, // 'co', 'pu', or 'pr'
ActiveMapper: PropTypes.object, authorizedToEdit: PropTypes.bool,
updateTopic: PropTypes.func updateTopic: PropTypes.func
} }