1
0
mirror of https://github.com/ascribe/onion.git synced 2024-06-26 03:06:28 +02:00
onion/js/components/acl_proxy.js

58 lines
1.7 KiB
JavaScript
Raw Normal View History

2015-07-14 11:11:28 +02:00
'use strict';
import React from 'react';
2015-07-14 11:14:15 +02:00
/**
* This component can easily be used to present another component conditionally
* - dependent on their acl.
*
* In order to do that, just wrap AclProxy around the component, add aclObject and
* the acl name you're looking for.
*/
2015-07-14 11:11:28 +02:00
let AclProxy = React.createClass({
propTypes: {
children: React.PropTypes.oneOfType([
React.PropTypes.arrayOf(React.PropTypes.element),
React.PropTypes.element
]).isRequired,
2015-07-14 22:34:34 +02:00
aclObject: React.PropTypes.object,
aclName: React.PropTypes.string,
show: React.PropTypes.bool
2015-07-14 11:11:28 +02:00
},
getChildren() {
2015-09-15 13:22:52 +02:00
if (React.Children.count(this.props.children) > 1){
/*
This might ruin styles for header items in the navbar etc
*/
2015-07-14 11:11:28 +02:00
return (
2015-07-14 17:49:31 +02:00
<span>
2015-07-14 11:11:28 +02:00
{this.props.children}
2015-07-14 17:49:31 +02:00
</span>
2015-07-14 11:11:28 +02:00
);
}
/* can only do this when there is only 1 child, but will preserve styles */
return this.props.children;
},
render() {
if(this.props.show) {
return this.getChildren();
2015-07-14 11:11:28 +02:00
} else {
2015-07-14 22:50:48 +02:00
if(this.props.aclObject) {
if(this.props.aclObject[this.props.aclName]) {
return this.getChildren();
2015-07-14 22:50:48 +02:00
} else {
2015-08-07 13:05:50 +02:00
/* if(typeof this.props.aclObject[this.props.aclName] === 'undefined') {
console.warn('The aclName you\'re filtering for was not present (or undefined) in the aclObject.');
2015-08-07 13:05:50 +02:00
} */
2015-07-14 22:50:48 +02:00
return null;
2015-07-14 22:34:34 +02:00
}
2015-07-14 11:11:28 +02:00
}
}
2015-07-14 22:50:48 +02:00
return null;
2015-07-14 11:11:28 +02:00
}
});
2015-07-14 22:50:48 +02:00
export default AclProxy;