reactui
Version:
A components library for ReactJS. This is part of the Gearz project
56 lines (50 loc) • 2 kB
JSX
var React = require("react");
var gearzMixin = require("../../gearz.mixin.js");
var TreeRow = React.createClass({
mixins: [gearzMixin],
propTypes: {
onAnyChange: React.PropTypes.func,
onCollapsedChange: React.PropTypes.func,
path: React.PropTypes.array.isRequired
},
hasChildren: function(nodes) {
if (Array.isArray(nodes))
return nodes.length>0;
if (typeof nodes == 'object')
return Object.keys(nodes).length>0;
return !!nodes;
},
cardinality: function(nodes) {
if (Array.isArray(nodes))
return nodes.length;
if (typeof nodes == 'object')
return Object.keys(nodes).length;
return null;
},
render: function () {
var nodes = this.get("nodes");
var collapsed = !!this.get("collapsed");
var display = this.get("display");
var path = this.get("path");
var hasChildren = this.hasChildren(nodes);
var cardinality = this.cardinality(nodes);
var indentation = 10 + path.length * 15 + "px";
return (
<li className="list-group-item noselect" style={{paddingLeft: indentation}}>
<span
className={
!hasChildren ? "rui-treeView-toggle-button" :
collapsed ? "rui-treeView-toggle-button glyphicon glyphicon-triangle-right" :
"rui-treeView-toggle-button glyphicon glyphicon-triangle-bottom"
}
onClick={ this.setter("collapsed", !collapsed) } >
</span>
<span className="rui-treeView-content">
{ display }
</span>
{ hasChildren && cardinality !== null ? <span className="badge">{ cardinality }</span> : null }
</li>
);
}
});
module.exports = TreeRow;