1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-28 08:37:59 +02:00
onion/js/components/ascribe_buttons/acl_button_list.js

120 lines
3.6 KiB
JavaScript
Raw Normal View History

2015-06-05 15:17:35 +02:00
'use strict';
import React from 'react/addons';
2015-06-03 10:27:11 +02:00
import UserActions from '../../actions/user_actions';
import UserStore from '../../stores/user_store';
import AclButton from '../ascribe_buttons/acl_button';
import { mergeOptions } from '../../utils/general_utils';
2015-06-03 10:27:11 +02:00
let AclButtonList = React.createClass({
2015-06-05 15:17:35 +02:00
propTypes: {
2015-06-05 16:20:28 +02:00
className: React.PropTypes.string,
2015-07-13 17:09:44 +02:00
editions: React.PropTypes.oneOfType([
React.PropTypes.object,
React.PropTypes.array
]),
availableAcls: React.PropTypes.object,
2015-09-28 22:09:25 +02:00
buttonsStyle: React.PropTypes.object,
2015-07-13 17:09:44 +02:00
handleSuccess: React.PropTypes.func,
children: React.PropTypes.oneOfType([
React.PropTypes.arrayOf(React.PropTypes.element),
React.PropTypes.element
])
2015-06-03 10:27:11 +02:00
},
2015-09-29 10:31:13 +02:00
2015-06-05 15:17:35 +02:00
getInitialState() {
return mergeOptions(
UserStore.getState(),
{
buttonListSize: 0
}
);
2015-06-03 10:27:11 +02:00
},
2015-06-03 11:49:39 +02:00
componentDidMount() {
2015-06-03 10:27:11 +02:00
UserStore.listen(this.onChange);
2015-06-03 11:49:39 +02:00
UserActions.fetchCurrentUser();
window.addEventListener('resize', this.handleResize);
window.dispatchEvent(new Event('resize'));
2015-06-03 10:27:11 +02:00
},
2015-06-05 15:17:35 +02:00
componentWillUnmount() {
2015-06-03 10:27:11 +02:00
UserStore.unlisten(this.onChange);
window.removeEventListener('resize', this.handleResize);
},
handleResize() {
this.setState({
buttonListSize: this.refs.buttonList.getDOMNode().offsetWidth
});
2015-06-03 10:27:11 +02:00
},
2015-06-03 11:49:39 +02:00
2015-06-05 15:17:35 +02:00
onChange(state) {
this.setState(state);
},
renderChildren() {
const { children } = this.props;
const { buttonListSize } = this.state;
return React.Children.map(children, (child) => {
return React.addons.cloneWithProps(child, { buttonListSize });
});
},
2015-06-03 10:27:11 +02:00
render() {
const { className,
buttonsStyle,
availableAcls,
editions,
handleSuccess } = this.props;
const { currentUser } = this.state;
2015-06-03 11:49:39 +02:00
return (
<div className={className}>
<span ref="buttonList" style={buttonsStyle}>
2015-10-08 10:14:06 +02:00
<AclButton
availableAcls={availableAcls}
2015-10-08 10:14:06 +02:00
action="acl_share"
pieceOrEditions={editions}
currentUser={currentUser}
handleSuccess={handleSuccess} />
2015-09-28 22:09:25 +02:00
<AclButton
availableAcls={availableAcls}
2015-09-28 22:09:25 +02:00
action="acl_transfer"
pieceOrEditions={editions}
currentUser={currentUser}
handleSuccess={handleSuccess}/>
2015-09-28 22:09:25 +02:00
<AclButton
availableAcls={availableAcls}
2015-09-28 22:09:25 +02:00
action="acl_consign"
pieceOrEditions={editions}
currentUser={currentUser}
handleSuccess={handleSuccess} />
2015-09-28 22:09:25 +02:00
<AclButton
availableAcls={availableAcls}
2015-09-28 22:09:25 +02:00
action="acl_unconsign"
pieceOrEditions={editions}
currentUser={currentUser}
handleSuccess={handleSuccess} />
2015-09-28 22:09:25 +02:00
<AclButton
availableAcls={availableAcls}
2015-09-28 22:09:25 +02:00
action="acl_loan"
pieceOrEditions={editions}
currentUser={currentUser}
handleSuccess={handleSuccess} />
{this.renderChildren()}
2015-09-28 22:09:25 +02:00
</span>
2015-06-03 11:49:39 +02:00
</div>
);
2015-06-03 10:27:11 +02:00
}
});
export default AclButtonList;