Skip to content

Commit

Permalink
Add basic PanelGroup
Browse files Browse the repository at this point in the history
  • Loading branch information
stevoland committed Feb 15, 2014
1 parent ec0e797 commit bac30ec
Show file tree
Hide file tree
Showing 17 changed files with 630 additions and 179 deletions.
2 changes: 2 additions & 0 deletions amd.js
Expand Up @@ -4,6 +4,7 @@ define(function (require) {
'use strict';

return {
Accordion: require('../amd/Accordion'),
Alert: require('../amd/Alert'),
BootstrapMixin: require('../amd/BootstrapMixin'),
Button: require('../amd/Button'),
Expand All @@ -19,6 +20,7 @@ define(function (require) {
Nav: require('../amd/Nav'),
NavItem: require('../amd/NavItem'),
Panel: require('../amd/Panel'),
PanelGroup: require('../amd/PanelGroup'),
PrimaryMixin: require('../amd/PrimaryMixin'),
ProgressBar: require('../amd/ProgressBar'),
SmallMixin: require('../amd/SmallMixin'),
Expand Down
3 changes: 3 additions & 0 deletions amd/Accordion.js
@@ -0,0 +1,3 @@
define(['./transpiled/Accordion'], function (Accordion) {
return Accordion.default;
})
3 changes: 3 additions & 0 deletions amd/PanelGroup.js
@@ -0,0 +1,3 @@
define(['./transpiled/PanelGroup'], function (PanelGroup) {
return PanelGroup.default;
})
23 changes: 23 additions & 0 deletions amd/transpiled/Accordion.js
@@ -0,0 +1,23 @@
define(
["./react-es6","./PanelGroup","exports"],
function(__dependency1__, __dependency2__, __exports__) {
"use strict";
/** @jsx React.DOM */

var React = __dependency1__["default"];
var PanelGroup = __dependency2__["default"];

var Accordion = React.createClass({displayName: 'Accordion',

render: function () {
return this.transferPropsTo(
PanelGroup( {isAccordion:true},
this.props.children
)
);
}

});

__exports__["default"] = Accordion;
});
87 changes: 87 additions & 0 deletions amd/transpiled/PanelGroup.js
@@ -0,0 +1,87 @@
define(
["./react-es6","./react-es6/lib/cx","./BootstrapMixin","./utils","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
/** @jsx React.DOM */

var React = __dependency1__["default"];
var classSet = __dependency2__["default"];
var BootstrapMixin = __dependency3__["default"];
var utils = __dependency4__["default"];

var PanelGroup = React.createClass({displayName: 'PanelGroup',
mixins: [BootstrapMixin],

propTypes: {
onSelect: React.PropTypes.func
},

getDefaultProps: function () {
return {
bsClass: 'panel-group'
};
},

getInitialState: function () {
var initialActiveKey = this.props.initialActiveKey;

return {
activeKey: initialActiveKey
};
},

render: function () {
var activeKey =
this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;

return this.transferPropsTo(
React.DOM.div( {className:classSet(this.getBsClassSet())},
utils.modifyChildren(this.props.children, this.renderPanel)
)
);
},

renderPanel: function (child) {
var activeKey =
this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;

var props = {
bsStyle: this.props.bsStyle
};

if (this.props.isAccordion) {
props.isCollapsable = true;
props.isOpen = (child.props.key === activeKey);
props.onSelect = this.handleSelect;
}

return utils.cloneWithProps(
child,
props
);
},

shouldComponentUpdate: function() {
// Defer any updates to this component during the `onSelect` handler.
return !this._isChanging;
},

handleSelect: function (key) {
if (this.props.onSelect) {
this._isChanging = true;
this.props.onSelect(key);
this._isChanging = false;
}

if (this.state.activeKey === key) {
key = null;
}

this.setState({
activeKey: key
});
}
});

__exports__["default"] = PanelGroup;
});
1 change: 1 addition & 0 deletions amd/transpiled/constants.js
Expand Up @@ -12,6 +12,7 @@ define(
'input-group': 'input-group',
'form': 'form',
'panel': 'panel',
'panel-group': 'panel-group',
'progress-bar': 'progress-bar',
'nav': 'nav'
},
Expand Down
2 changes: 2 additions & 0 deletions cjs/Accordion.js
@@ -0,0 +1,2 @@
var Accordion = require('./transpiled/Accordion').default;
module.exports = Accordion
2 changes: 2 additions & 0 deletions cjs/PanelGroup.js
@@ -0,0 +1,2 @@
var PanelGroup = require('./transpiled/PanelGroup').default;
module.exports = PanelGroup
19 changes: 19 additions & 0 deletions cjs/transpiled/Accordion.js
@@ -0,0 +1,19 @@
"use strict";
/** @jsx React.DOM */

var React = require("./react-es6")["default"];
var PanelGroup = require("./PanelGroup")["default"];

var Accordion = React.createClass({displayName: 'Accordion',

render: function () {
return this.transferPropsTo(
PanelGroup( {isAccordion:true},
this.props.children
)
);
}

});

exports["default"] = Accordion;
83 changes: 83 additions & 0 deletions cjs/transpiled/PanelGroup.js
@@ -0,0 +1,83 @@
"use strict";
/** @jsx React.DOM */

var React = require("./react-es6")["default"];
var classSet = require("./react-es6/lib/cx")["default"];
var BootstrapMixin = require("./BootstrapMixin")["default"];
var utils = require("./utils")["default"];

var PanelGroup = React.createClass({displayName: 'PanelGroup',
mixins: [BootstrapMixin],

propTypes: {
onSelect: React.PropTypes.func
},

getDefaultProps: function () {
return {
bsClass: 'panel-group'
};
},

getInitialState: function () {
var initialActiveKey = this.props.initialActiveKey;

return {
activeKey: initialActiveKey
};
},

render: function () {
var activeKey =
this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;

return this.transferPropsTo(
React.DOM.div( {className:classSet(this.getBsClassSet())},
utils.modifyChildren(this.props.children, this.renderPanel)
)
);
},

renderPanel: function (child) {
var activeKey =
this.props.activeKey != null ? this.props.activeKey : this.state.activeKey;

var props = {
bsStyle: this.props.bsStyle
};

if (this.props.isAccordion) {
props.isCollapsable = true;
props.isOpen = (child.props.key === activeKey);
props.onSelect = this.handleSelect;
}

return utils.cloneWithProps(
child,
props
);
},

shouldComponentUpdate: function() {
// Defer any updates to this component during the `onSelect` handler.
return !this._isChanging;
},

handleSelect: function (key) {
if (this.props.onSelect) {
this._isChanging = true;
this.props.onSelect(key);
this._isChanging = false;
}

if (this.state.activeKey === key) {
key = null;
}

this.setState({
activeKey: key
});
}
});

exports["default"] = PanelGroup;
1 change: 1 addition & 0 deletions cjs/transpiled/constants.js
Expand Up @@ -9,6 +9,7 @@ exports["default"] = {
'input-group': 'input-group',
'form': 'form',
'panel': 'panel',
'panel-group': 'panel-group',
'progress-bar': 'progress-bar',
'nav': 'nav'
},
Expand Down

0 comments on commit bac30ec

Please sign in to comment.